SpringMVC

1、执行流程

1、DispatcherSevlet接收到前端请求

2、DispatcherSevlet调用→handlerMapping获取执行器链给→DispatcherSevlet

3、DispatcherSevlet调用→HandlerAdapt适配后调用Controller 返回ModelAndView

4、DispatcherSevlet将ModelAndView交给ViewReslover视图解析器解析

5、视图解析器解析后返回View视图给DispatcherSevlet→渲染视图返回前端

流程图片

客户端(浏览器)发送请求,直接请求到 DispatcherServlet。
DispatcherServlet 根据请求信息调用 HandlerMapping,解析请求对应的 Handler。
解析到对应的 Handler(也就是我们平常说的 Controller 控制器)后,开始由 HandlerAdapter 适配器处理。
HandlerAdapter 会根据 Handler来调用真正的处理器开处理请求,并处理相应的业务逻辑。
处理器处理完业务后,会返回一个 ModelAndView 对象,Model 是返回的数据对象,View 是个逻辑上的 View。
ViewResolver 会根据逻辑 View 查找实际的 View。
DispaterServlet 把返回的 Model 传给 View(视图渲染)。
把 View 返回给请求者(浏览器)


2、Spring MVC的主要组件

(1)前端控制器 DispatcherServlet(不需要程序员开发)
作用:接收请求、响应结果,相当于转发器,有了DispatcherServlet 就减少了其它组件之间的耦合度。

(2)处理器映射器HandlerMapping(不需要程序员开发)
作用:根据请求的URL来查找Handler

(3)处理器适配器HandlerAdapter
注意:在编写Handler的时候要按照HandlerAdapter要求的规则去编写,这样适配器HandlerAdapter才可以正确的去执行Handler。

(4)处理器Handler(需要程序员开发)

(5)视图解析器 ViewResolver(不需要程序员开发)
作用:进行视图的解析,根据视图逻辑名解析成真正的视图(view)

(6)视图View(需要程序员开发jsp)
View是一个接口, 它的实现类支持不同的视图类型(jsp,freemarker,pdf等等)


3、Spring MVC常用的注解有哪些

  • Controller
    分发处理器将会扫描使用了该注解的类的方法,并检测该方法是否使用了@RequestMapping 注解。@Controller 只是定义了一个控制器类,而使用@RequestMapping 注解的方法才是真正处理请求的处理器。

  • RequestMapping
    一个用来处理请求地址映射的注解,可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

  • RequestBody
    注解实现接收http请求的json数据,将json转换为java对象。

  • ResponseBody
    注解实现将conreoller方法返回对象转化为json对象响应给客户。

  • RequestParam
    用于将请求参数映射到功能处理方法的参数上

  • PathVariable
    用于将请求URL中的模板变量映射到功能处理方法的参数上,即取出uri模板中的变量作为参数


4、Spring MVC怎么样设定重定向和转发的

(1)转发:在返回值前面加”forward:”,譬如”forward:user.do?name=method4”

(2)重定向:在返回值前面加”redirect:”,譬如”redirect:/hello.do”


如何解决POST请求中文乱码问题,GET的又如何处理呢

1)解决post请求乱码问题:

在web.xml中配置一个CharacterEncodingFilter过滤器,设置成utf-8;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>
</filter>

<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

(2)get请求中文参数出现乱码解决方法有两个:

①修改tomcat配置文件添加编码与工程编码一致,如下:

1
2
<ConnectorURIEncoding="utf-8" connectionTimeout="20000" 
port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

②另外一种方法对参数进行重新编码:

1
String userName = new String(request.getParamter(“userName”).getBytes(“ISO8859-1”),“utf-8”)

ISO8859-1是tomcat默认编码,需要将tomcat编码后的内容按utf-8编码。