概述(截图均来自黑马程序员,侵删)
SpringMVC(model view controller)是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的侯勋产品,已经融合在SpringWebFlow中
SpringMVC已经成为目前最主流的MVC框架之一,并且随着Spring3.0的发布,全面超越Struts2,成为嘴优秀的MVC框架。它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无需实现任何接口,同时它还支持RESTful编程风格的请求
开发步骤
- 导入SpringMVC相关坐标
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.1.8.RELEASE</version>
</dependency>
- 配置SpringMVC核心控制器DispathcerServlet
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
- 创建Controller类和视图界面
public class UserController {
public String save(){
System.out.println("Controller save running");
return "success.jsp";
}
}
<html>
<head>
<title>Title</title>
</head>
<body>
<h1>success</h1>
</body>
</html>
- 使用注解配置Controller类中业务方法的映射地址
@Controller
public class UserController {
@RequestMapping("/quick")
public String save(){
System.out.println("Controller save running");
return "success.jsp";
}
}
- 配置SpringMVC核心文件spring-mvc.xml
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<context:component-scan base-package="com.ch.controller"/>
- 客户端发起请求测试

  
SpringMVC组件解析

- 用户发送请求至前端控制器DispatcherServlet
- DispacherServlet收到请求调用HandlerMapping处理器映射器
- 处理器映射器找到具体的处理器(可根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet
- DispatcherServlet调用HandlerAdapter处理器适配器
- HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
- Controller执行完成后返回ModelAndView
- HandlerApapter将controller执行结果ModelAndView返回给DispatcherServlet
- DispatcherServlet将ModelAndView传给ViewReslover视图解析器
- ViewReslover解析后返回具体的View
10.DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet响应用户


数据响应
 直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转  
                     
MVC实现数据请求方式
- 基本类型参数
请求参数的key与对应方法参数名称一致 - POJO类型参数
请求参数的名称与实体内属性名一致 - 数组类型参数
请求参数的名称与数组名称一致 - 集合类型参数
封装到VO类型中,除ajax请求外
MVC获取数据细节
- 中文乱码问题
设置过滤器,指定enconding - @RequestParm和@PathVariable
解决请求参数名称不一致问题 - 自定义类型转换器
类型转换定义,配置,注解驱动 - 获取Servlet相关API
直接定义 - @RequestHeader和Cookoevalue
- 文件上传
|