學習目标:
初識SpringMVC
學習内容:
初識SpringMVC
學習時間:
學習産出:
初識SpringMVC
1、SpringMVC執行原理
- DispatcherServlet表示一個前置控制器,是整個SpringMVC的控制中心。使用者送出請求,DisPatcherServelt接受請求并攔截請求。
- HandlerMapping為處理映射器。DispatcherServlet調用HandlerServlet,HandlerMapping根據請求url查找Handler。
- HandlerExecution表示具體的Handler,其主要作用是根據url查找控制器
- HandlerExecution将解析後的資訊傳遞給DispatcherServlet,如解析控制器映射等。
- HandlerAdapter表示處理器擴充卡,其按照特定的規則去執行Handler。
- Handler讓具體的Controller執行。
- Controller将具體的執行資訊傳回給HandlerAdapter,如ModelAndView。
- HandlerAdapter将視圖邏輯名或模型傳遞給DispatcherServlet。
- DispatcherServlet調用視圖解析器(ViewResolver)來解析HandlerAdapter傳遞的邏輯視圖名。
- 視圖解析器将解析的邏輯視圖名傳給DispatcherServlet。
- DispatcherServlet根據視圖解析器解析的視圖結果,調用具體的視圖。
- 最終視圖呈現給使用者。
2、第一個SpringMVC程式
- 導入依賴
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet.jsp/javax.servlet.jsp-api -->
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>javax.servlet.jsp-api</artifactId>
<version>2.3.3</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
- 配置web.xml
<?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">
<!--1、注冊DispatcherServlet-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!--關聯一個springmvc的配置檔案:servlet-name:servlet.xml-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc-servlet.xml</param-value>
</init-param>
<!--啟動級别1:跟伺服器一起啟動-->
<load-on-startup>1</load-on-startup>
</servlet>
<!--/比對所有請求:(不包括.jsp),隻針對我們編寫的請求;即:.jsp不會進入spring的 DispatcherServlet類 。-->
<!--/*比對所有請求:(包括.jsp),會出現傳回jsp視圖時再次進入spring的DispatcherServlet類(多層嵌套,出現一個jsp套一個jsp),導緻找不到對應的controller是以報404錯-->
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
-
springmvc-servlet.xml
配置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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--添加處理映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--添加處理擴充卡-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--添加視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver">
<!--字首-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<!--字尾-->
<property name="suffix" value=".jsp"/>
</bean>
<!--将自己的類交給SpringIOC容器,注冊bean(BeanNameUrlHandlerMapping将會來這裡找bean)-->
<bean id="/hello" class="com.springmvc.controller.HelloSpringMVC"/>
</beans>
- jsp
WEB/INF下建立jsp檔案夾,在裡面建立hello.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>HELLO</title>
</head>
<body>
${msg}
</body>
</html>
-
HelloSpringMVC
編寫控制器
public class HelloSpringMVC implements Controller {
public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
//ModelAndView 模型和視圖層
ModelAndView mav = new ModelAndView();
//封裝對象,放在ModelAndView中。Model
mav.addObject("msg","HelloSpringMVC!");
//封裝要跳轉的視圖,放在ModelAndView中
mav.setViewName("hello");//相當于/WEB-INF/jsp/hello.jsp
return mav;
}
}
注意:出現404确認maven導入的jar包在子產品中存在!