需求
需求:前端瀏覽器請(qǐng)求url:http://localhost:8080/demo/handler肋杖,前端頁(yè)面顯示后臺(tái)服務(wù)器的時(shí)間
- 配置DispatcherServlet前端控制器
- 開(kāi)發(fā)處理具體業(yè)務(wù)邏輯的Handler(@Controller倡缠、@RequestMapping)
- xml配置文件配置controller掃描侣诺,配置springmvc三大件
- 將xml文件路徑告訴springmvc(DispatcherServlet)
核心代碼
- pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.study</groupId>
<artifactId>springmvc-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<name>springmvc-demo Maven Webapp</name>
<!-- FIXME change it to the project's website -->
<url>http://www.example.com</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<!--引入spring webmvc的依賴-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.12.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<port>8080</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
</project>
- web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<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.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<!--
方式一:帶后綴盾沫,比如*.action *.do *.aaa
該種方式比較精確晰赞、方便陈醒,在以前和現(xiàn)在企業(yè)中都有很大的使用比例
方式二:/ 不會(huì)攔截 .jsp,但是會(huì)攔截.html等靜態(tài)資源(靜態(tài)資源:除了servlet和jsp之外的js或杠、css、png等)
方式三:/* 攔截所有宣蔚,包括.jsp
-->
<!--攔截匹配規(guī)則的url請(qǐng)求向抢,進(jìn)入springmvc框架處理-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
- ControllerDemo.java
package com.study;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
import java.util.Date;
@Controller
@RequestMapping("/demo")
public class DemoController {
/**
* url: http://localhost:8080/demo/handler
*/
@RequestMapping("/handler")
public ModelAndView handler(){
// 服務(wù)器時(shí)間
Date date = new Date();
// 封裝了數(shù)據(jù)和頁(yè)面信息的 ModelAndView
ModelAndView modelAndView = new ModelAndView();
// addObject 其實(shí)是向請(qǐng)求域中request.setAttribute("date",date);
modelAndView.addObject("date",date);
// 視圖信息(封裝跳轉(zhuǎn)的頁(yè)面信息) 邏輯視圖名
modelAndView.setViewName("success");
return modelAndView;
}
}
- springmvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
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
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
">
<!--開(kāi)啟controller掃描-->
<context:component-scan base-package="com.study"/>
<!--配置springmvc的視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--
自動(dòng)注冊(cè)最合適的處理器映射器,處理器適配器(調(diào)用handler方法)
-->
<mvc:annotation-driven/>
</beans>
- success.jsp(isELIgnored="false" 需要加胚委,如果不加可能顯示不出來(lái)時(shí)間)
<%@ page language="java" isELIgnored="false" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<html>
<head>
<title>Title</title>
</head>
<body>
跳轉(zhuǎn)成功挟鸠!服務(wù)器時(shí)間:${date}
</body>
</html>
Spring MVC 請(qǐng)求處理流程
流程說(shuō)明
- 第一步:用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet
- 第二步:DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器
- 第三步:處理器映射器根據(jù)請(qǐng)求Url找到具體的Handler(后端控制器),生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回DispatcherServlet
- 第四步:DispatcherServlet調(diào)用HandlerAdapter處理器適配器去調(diào)用Handler
- 第五步:處理器適配器執(zhí)行Handler
- 第六步:Handler執(zhí)行完成給處理器適配器返回ModelAndView
- 第七步:處理器適配器向前端控制器返回 ModelAndView亩冬,ModelAndView 是SpringMVC 框架的一個(gè)底層對(duì)象艘希,包括 Model 和 View
- 第八步:前端控制器請(qǐng)求視圖解析器去進(jìn)行視圖解析,根據(jù)邏輯視圖名來(lái)解析真正的視圖硅急。
- 第九步:視圖解析器向前端控制器返回View
- 第十步:前端控制器進(jìn)行視圖渲染覆享,就是將模型數(shù)據(jù)(在 ModelAndView 對(duì)象中)填充到 request 域
- 第十一步:前端控制器向用戶響應(yīng)結(jié)果