原文链接,原文作者:ThinkWon
SpringMVC是基于Java实现了MVC模式的轻量级的web框架,通过model-view-controller的分离实现了web层的解耦,它与Spring框架继承,如IOC、AOP等,支持各种视图类型,支持各种资源的请求映射
DispatcherServlet:中心控制器 ,用于接收请求,分发请求,响应结果,减少了其他组件的耦合度
HandlerMapping:处理器映射器,通过它根据具体的URL获取对应的Handler处理器
HandlerAdapter:处理器适配器,通过它取执行Handler,因此在编写Handler时候需要按照HandlerAdapter规则编写
Handler:具体的处理器 ,用于处理资源,再返回数据或者ModelView给HandlerAdapter
ViewResolver:视图解析器,根据视图 逻辑名解析为真正的视图
View:具体的视图,比如jsp,freemarker
1.用户请求发送到DispatcherServlet
2.DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,获取Handler
3.HandlerMapping根据url找到对应的Handler,生成Handler对象返回给DispatcherServlet
4.DispatcherServlet调用HandlerAdapter执行Handler
5.Handler执行完后返回数据或者ModelView
6.HandlerAdapter将Handler执行结果返回给DispatcherServlet
7.DispatcherServlet将ModelView传给ViewResolver视图解析器
8.ViewResolver解析后返回具体View
9.DispatcherServlet进行渲染视图,将具体的Model渲染到视图
10.将视图响应给用户
MVC是一种设计模式,即Model模型 - View视图 - Controller控制器,用于实现前端页面的展示和后端业务数据的分离;提高了项目开发的效率,以及对业务系统的解耦
@RequestMapping:用于处理请求URL映射的 注解,可以用在类上或者方法上,用在类上则表示类中所有请求的方法的url都是以该路径为父路径
@RequestBody:用于接收前端传递的请求体中的json类型数据,将json数据转为java对象,json的key必须和java对象属性一致,GET方法没有请求体,因此该注解只能在POST方法使用,@RequestBody只能有一个
@ResponseBody:将Controller方法返回的对象转换为json格式返回给前端
在SpringMVC中,控制器用于处理具体的数据并返回Model或者ModelView,最终由DispatcherServlet渲染,而SpringMVC提供了@Controller注解,然后使用@RequestMapping等注解定义url请求和Controller中的方法之间的映射,这样,控制器就可以被获取到;
@Controller用于标记在一个类上,表示该类就是SpringMVC的一个控制器,分发处理器会扫描使用了该注解的方法,并扫描有没有@RequestMapping,单单使用@Controller还不能算SpringMVC的控制器,因为Spring还不认识它,需要交给Spring管理,在配置文件中定义Controller的位置
@RequestMapping用于处理请求URL的映射,可以用在类上或者方法上,用在类上,表示Controller类中所有的方法的url都是以它为父路径
@Requestmapper有六个属性:
value:请求的url实际地址
method:请求的类型、GET、POST、PUT等
consumes:请求的内容类型、application/json、text/html等
produces:指定返回的内容类型
params:指定request中必须包含某个参数,才会处理
headers:指定request请求头中必须包含某值,才会处理
@ResponseBody用于将方法返回的对象转为指定格式的数据,写入Response响应体的body数据区
比如,当返回的不是视图,而是json数据或者xml时需要使用,前后端分离情况下也会使用
@PathVariable用于接收请求路径上的变量值,比如url格式为/hello/{id}
@Controller
public class HelloController {
@ResponseBody
@RequestMapping(value = "/hello/{id}")
public String hello(@PathVariable Integer id) {
return "hello" + id;
}
}
@RequestParam用于获取url的参数,比如url格式为/hello?id=
,可以不写,但是参数名需要和变量名保持一致
参数:
@Controller
public class HelloController {
@ResponseBody
@RequestMapping(value = "/hello")
public String hello(@RequestParam Integer id) {
return "hello" + id;
}
}
首先说一下重定向与转发的区别:
SpringMVC重定向和转发:
forward:
,如forward:hello
redirect:
,如redirect:hello
1.引入Jackson.jar
2.在配置文件中配置json的映射
3.Controller方法使用@ResponseBody注解,前端可以直接返回Object、List接收
SpingMVC提供了字符编码过滤器,在web.xml设置
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<!--是否允许上面的编码覆盖已经存在编码方式-->
<init-param>
<param-name>forceEncoding</param-name>
<param-value>false</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
直接在Controller方法中定义形参即可,SpringMVC会自动将对象传入
可以将参数封装为一个对象接收,但是参数名必须和属性名保持一致
//todo
原文:https://www.cnblogs.com/dingjn/p/12844260.html