什么是SpringMVC?
SpringMVC是Spring框架的一个模块,是一个基于Java的实现了MVC设计模式的轻量级Web框架。它通过一套注解和接口,让开发者能够更简单、更快速地开发Web应用程序。
SpringMVC的核心组件?
-
DispatcherServlet:前端控制器,接收所有请求并分发
-
HandlerMapping:映射请求到处理器(Controller)
-
Controller:处理请求的业务逻辑
-
ModelAndView:封装模型数据和视图信息
-
ViewResolver:解析视图名称到具体视图实现
-
HandlerAdapter:实际执行处理器 【视图:数据和模版的总称】
SpringMVC的工作流程?
-
用户发送请求到DispatcherServlet
-
DispatcherServlet调用HandlerMapping查找Handler
-
HandlerMapping返回HandlerExecutionChain(包含Handler和拦截器)
-
DispatcherServlet调用HandlerAdapter执行Handler
-
Handler(Controller)执行完成返回ModelAndView
-
DispatcherServlet调用ViewResolver解析视图
-
ViewResolver返回View对象
-
DispatcherServlet渲染视图并返回响应
SpringMVC的常用注解?
@Controller
:标识一个类为控制器
@RequestMapping
:映射URL到控制器方法
@RequestParam
:绑定请求参数到方法参数
@PathVariable
:绑定URL模板变量到方法参数
@ResponseBody
:将返回值直接写入HTTP响应体
@RestController
:组合了@Controller和@ResponseBody
@ModelAttribute
:绑定请求参数到模型对象
@SessionAttributes
:声明会话属性
SpringMVC项目代码


web.xml的早期形式:【基于配置】
过滤器:对请求和响应进行过滤
拦截器:对请求进行拦截

java
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<!--在web.xml中配置Spring提供的过滤器类 -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value><!--设置字符集为utf-8 -->
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern><!--/ 匹配所有的请求 但是不包含资源 /* 匹配所有的请求 -->
</filter-mapping>
<!--配置前端控制器,对浏览器发送的请求进行统一处理-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name><!--取别名-->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--类-->
<!--加载springmvc.xml配置文件的位置和名称,配置的是Spring配置-->
<!--Spring加载在DispatcherServlet之后 -->
<init-param><!--初始化参数-->
<!--contextConfigLocation:上下文配置路径,固定值-->
<param-name>contextConfigLocation</param-name>
<!--classpath:类路径,值得是Java和resources文件夹-->
<!--springmvc.xml:指的是配置文件的名称:需要配置springmvc.xml,在下面-->
<param-value>classpath:springmvc.xml</param-value>
</init-param>
<!--DispatcherServlet什么时候加载-->
<!--1 项目一启动就会加载 0 请求打过来时才会加载-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>/</url-pattern><!--localhost:8080 /代表着可以匹配到所有的请求-->
</servlet-mapping>
<!--有一些请求不能打到dispatcherServlet当中 https://localhost:8080/a.html-->
<!--剔除这些请求-->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<!--开启项目时打开的页面-->
<welcome-file-list>
<welcome-file>/index.html</welcome-file>
</welcome-file-list>
</web-app>
MVC执行流程图
处理器适配器作用广泛,涉及转码,加密解密行为

springmvc.xml
java
<?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/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">
<!--配置spring创建容器时要扫描的包-->
<context:component-scan base-package="com.qcby"></context:component-scan>
<!--配置处理器映射器-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
<!--配置处理器适配器-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>
<!--配置视图解析器-->
<bean id="viewResolver" class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
<property name="order" value="1"/>
<property name="characterEncoding" value="UTF-8"/><!--设置字符集-->
<property name="templateEngine" ref="templateEngine"/>
</bean>
<!-- templateEngine -->
<bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
<property name="templateResolver" ref="templateResolver"/>
</bean>
<bean id="templateResolver" class="org.thymeleaf.spring4.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/html/" /><!--
设置模板文件的前缀路径(默认从webapp/resources下开始查找)
示例:/html/ 表示模板文件存放在 webapp/html/ 目录下
-->
<property name="suffix" value=".html" /> <!--
设置模板文件的后缀
示例:.html 表示所有模板文件都以.html结尾
访问时只需写文件名,无需加后缀(如"index"会自动补全为"/html/index.html")
-->
<property name="templateMode" value="HTML5"/><!--
设置模板模式:
HTML5 - 标准HTML5解析模式
其他可选值:LEGACYHTML5(宽松HTML5)、XHTML等
-->
</bean>
<!-- 返回JSON数据 -->
<bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
</bean>
<!-- 配置spring开启注解mvc的支持 默认就是开启的 ,要想让其他组件(不包含映射器、适配器、处理器)生效就必须需要配置了-->
<mvc:annotation-driven></mvc:annotation-driven>
</beans>
HelloController
java
@Controller
public class HelloController {
@RequestMapping("/toIndex")
@ResponseBody /*返回JSON数据*/
public String Index(){
return "aaaa";
}
@RequestMapping("/hello")
public String hello(){
return "hello"; //8080/html/hello.html
}
}