当前位置:首页>财经>正文

springmvc请求处理的流程有哪些 spring mvc 的工作流程是什么

2023-04-14 13:42:26 互联网 未知 财经

 springmvc请求处理的流程有哪些 spring mvc 的工作流程是什么

springmvc请求处理的流程有哪些

Spring MVC 的运行流程
①. 在整个 Spring MVC 框架中, DispatcherServlet 处于核心位置,负责协调和组织不同组件以完成请求处理并返回响应的工作
②. SpringMVC 处理请求过程:
> 若一个请求匹配 DispatcherServlet 的请求映射路径(在 web.xml 中指定),
WEB 容器将该请求转交给 DispatcherServlet 处理
> DispatcherServlet 接收到请求后, 将根据请求信息(包括 URL、HTTP 方法、请求头、请求参数、Cookie 等)及
HandlerMapping 的配置找到处理请求的处理器(Handler). 可将 HandlerMapping 看成路由控制器,将 Handler 看成目标主机。
> 当 DispatcherServlet 根据 HandlerMapping 得到对应当前请求的 Handler 后,通过 HandlerAdapter
对 Handler 进行封装,再以统一的适配器接口调用 Handler。
> 处理器完成业务逻辑的处理后将返回一个 ModelAndView 给 DispatcherServlet,
ModelAndView 包含了视图逻辑名和模型数据信息
> DispatcherServlet 借助 ViewResoler 完成逻辑视图名到真实视图对象的解析
> 得到真实视图对象 View 后, DispatcherServlet 使用这个 View 对 ModelAndView 中的模型数据进行视图渲染

spring mvc 的工作流程是什么

Spring Web MVC 处理Http请求的大致过程:
一旦Http请求到来,DispatcherSevlet将负责将请求分发。DispatcherServlet可以认为是Spring提供的前端控制器,所有的请求都有经过它来统一分发。
在DispatcherServlet将请求分发给Spring Controller之前,需要借助于Spring提供的HandlerMapping定位到具体的Controller。HandlerMapping是这样一种对象,它能够完成客户请求到Controller之间的映射。在Struts中,这种映射是通过struts-config.xml文件完成的。其中,Spring为Controller接口提供了若干实现,例如Spring默认使用的BeanNameUrlHandlerMapping。还有,SimpleUrlHandlerMapping,CommonsPathMapHandlerMapping。
Spring Controller将处理来自DispatcherServlet的请求。Spring的Controller类似于struts的Action,能够接受HttpServletRequest和HttpServletResponse。Spring为Controller接口提供了若干实现类,位于org.springframework.web.servlet.mvc包中。由于Controller需要为并发用户处理上述请求,因此实现Controller接口时,必须保证线程安全并且可重用。Controller将处理客户请求,这和Struts Action 扮演的角色是一致的。
一旦Controller处理完客户请求,则返回ModelAndView对象给DispatcherServlet前端控制器。ModelAndView中包含了模型(Model)和视图(View)。从宏观角度考虑,DispatcherServlet是整个Web应用的控制器;从微观角度考虑,Controller是单个Http请求处理过程中的控制器,而ModelAndView是Http请求过程中返回的模型和视图。前端控制器返回的视图可以是视图的逻辑名,或者实现了View接口的对象。View对象能够渲染客户响应结果。其中,ModelAndView中的模型能够供渲染View时使用。借助于Map对象能够存储模型。
如果ModelAndView返回的视图只是逻辑名,则需要借助Spring提供的视图解析器(ViewResoler)在Web应用中查找View对象,从而将响应结果渲染给客户。
DispatcherServlet将View对象渲染出的结果返回个客户。

spring mvc 怎么处理请求

一, 我们需要把request.getParameter(“参数名”)获取到的字符串先用ISO-8859-1编码成字节流,然后再将其用utf-8解码成字符流,代码如下:

String str = new String(request.getParameter("参数名").getBytes("iso-8859-1"), "utf-8")

二, 我们也可以通过Tomcat配置文件,设置URL编码集(URIEncoding)设置编码.

在tomcat的server.xml配置文件中,添加 URIEncoding="UTF-8"

在这里要特别注意:当你用eclipse运行项目文件时,如果改了tomcat安装目录下的server.xml文件依旧不起作用,就要改eclipse自身配置的servers底下的server.xml文件.因为eclipse运行项目时用的是这个server.

如下图所示:

添加 URIEncoding="UTF-8"



修改为:



备注:

下面来解释一下这两个属性的意义:

useBodyEncodingForURI参数表示是否用request.setCharacterEncoding参数对URL提交的数据和表单中GET方式提交的数据进行重新编码,在默认情况下,该参数为false。

URIEncoding参数指定对所有GET方式请求进行统一的重新编码(解码)的编码。

URIEncoding和useBodyEncodingForURI区别是,

URIEncoding是对所有GET方式的请求的数据进行统一的重新编码,

而useBodyEncodingForURI则是根据响应该请求的页面的request.setCharacterEncoding参数对数据进行的重新编码,不同的页面可以有不同的重新编码的编码

配置useBodyEncodingForURI="true"后,可以解决普通get请求的中文乱码问题,但是对于通过ajax发起的get请求中文依然会乱码,请把useBodyEncodingForURI="true"改为URIEncoding="UTF-8"即可。

springmvc为请求处理器的目标参数赋值的过程

读取请求参数
1、直接把表单的参数写在Controller相应的方法的形参中
案例:
/**
* 1.直接把表单的参数写在Controller相应的方法的形参中
*/
@RequestMapping("/add")
public String add(String username,String password) {
System.out.println("username is:" username)
System.out.println("password is:" password)
return "index"
}
2、通过HttpServletRequest接收
案例:
/**
* 2、通过HttpServletRequest接收
*/
@RequestMapping("/add")
public String add(HttpServletRequest request) {
String username=request.getParameter("username")
String password=request.getParameter("password")
System.out.println("username is:" username)
System.out.println("password is:" password)
return "index"
}
3、通过一个bean来接收
案例:
public class User {
private Long id
private String username
private String password
public User(){}
public Long getId() {
return id
}
public String getUsername() {
return username
}
public String getPassword() {
return password
}
public void setId(Long id) {
this.id = id
}
public void setUsername(String username) {
this.username = username
}
public void setPassword(String password) {
this.password = password
}
}
/**
* 3、通过一个bean来接收
*/
@RequestMapping("/add")
public String add(User user) {
System.out.println("username is:" user.getUsername())
System.out.println("password is:" user.getPassword())
return "index"
}
4、通过@PathVariable获取路径中的参数
案例:
/**
* 4、通过@PathVariable获取路径中的参数
* @param username
* @param password
* @return
*/
@RequestMapping(value="/add/{username}/{password}",method=RequestMethod.GET)
public String addUser4(@PathVariable String username,@PathVariable String password) {
System.out.println("username is:" username)
System.out.println("password is:" password)
return "index"
}