引言
在學習過第一個springMVC項目建造過后,讓我們直接進入真實開發中所必需的注解開發,
是何等的簡潔高效!!
注:由于Maven可能存在資源過濾的問題,在maven依賴中加入
?
<build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
第一步:在pom.xml文件引入相關的依賴
主要有spring框架核心庫。springmvc,servlet,JSTL(jsp標準標簽庫),已經在父依賴中了
<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version> 4.13.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>jsp-api</artifactId><version>2.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>2.5</version></dependency></dependencies><build><resources><resource><directory>src/main/resources</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource><resource><directory>src/main/java</directory><includes><include>**/*.properties</include><include>**/*.xml</include></includes><filtering>true</filtering></resource></resources></build>
第二步:配置web.xml
注:
-
注冊DispatcherServlet
-
關聯sprigMVC的配置文件
-
啟動級別為1
-
映射路徑為/(不能為/*)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
第三步:配置springmvc-servlet.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!--自動掃描包,讓指定包下的注解生效,由IOC容器統一管理--><context:component-scan base-package="com.lyc.controller"/>
<!-- 資源過濾 讓springMVC不處理靜態資源 .css .js .html.mp3 --><mvc:default-servlet-handler/>
<!--
支持mvc注解驅動
在spring中一般采用@RequestMappering注解來完成映射關系
要想使@RequestMapping注解生效
必須要上下文中注冊DefaultAnnotationHandlerMappering和一個AnnotationMethodHandlerAdapter實例
這兩個實例分別在類級別和方法級別處理
而annotation-driven配置幫助我們自動完成上述兩個實例的注入
--><mvc:annotation-driven/><!-- 視圖解析器:模板引擎Thymeleaf Freemarker...,可以更換,也可以自定義--><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><!-- 前綴 --><property name="prefix" value="/WEB-INF/jsp/"/><!-- 后綴 --><property name="suffix" value=".jsp"/></bean>
</beans>
這些在spring配置文件就不需要動了,不用改變,直接使用,而在正常開發中,我們只需要修改視圖解析器即可
注:在視圖解析器中我們把所有的視圖都存放在/WEB-INF/目錄下,這樣可以保證試圖安全,因為這個目錄下的文件,客戶端不能直接訪問。
第四步:創建Controller
?package com.lyc.controller;?import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.RequestMapping;?@Controller@RequestMapping("/HelloController")public class HelloController {//封裝數據//真是訪問地:項目名/HelloController/hello@RequestMapping("/hello")public String Hello(Model model){//向模型中添加屬性msg與值,可以在JSP頁面中取出并渲染model.addAttribute("msg","HelloSpringMVC!");//web-inf/jsp/hello.jspreturn "hello";}}
解析代碼:@controller是為了讓Spring IOC 容器初始化時自動掃描到
@RequestMapping是為了映射請求路徑,這里因為類和方法上都有映射,所以訪問時應該是/HelloController/hello
方法中聲明Model類型的參數是為了把Action中的數據帶到視圖中
方法返回的是視圖的名稱hello,加上配置文件中得前后綴變成WEB-INF/jsp/hello.jsp
第五步:創建視圖層 web/WEB-INF/jsp/hello.jsp
?
<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head><title>Title</title></head><body>${msg}</body></html>
運行時報錯:
Unsupported class file major version 61
經過查詢發現是jdk版本過高,我用的是jdk17,將版本改到jdk11重啟,將maven配置文件中的版本改為11即可
再次嘗試運行
運行成功!
總結步驟:
-
新建maven項目
-
導入相關依賴
-
編寫web.xml,注冊DispatcherServlet
-
編寫springmvc配置文件
-
創建對應的Controller類
-
完善前端視圖和Controller之間的對應
-
測試運行測試
注:springMVC配置文件中的核心三要素:處理器映射器,處理器適配器,視圖解析器,在注解開發的幫助下,我們只需要去手動配置視圖解析器,而處理器映射器和處理器適配器只需要開啟注解驅動即可< mvc:annotation-driven/> 是代碼更加簡潔高效!!!