admin管理员组

文章数量:1794759

Spring MVC处理HTTP请求的过程

Spring MVC处理HTTP请求的过程

面试中经常被问到的一个关于HTTPs://www.105188/sh/1136531.html style="color:#2aa0ea" target=_blank class=infotextkey>Spring MVC的问题就是解释web请求的过程,比如一个HTTP请求从开始到结束的处理过程。换句话说,就是解释Spring MVC处理请求的过程。其实,所有的请求都是从客户端出发,发送到特定的URL。当请求到达web容器,比如tomcat,它就会在web.xml中找出已经配置好的来处理特定的URL的Servlet或过滤器。由于Spring MVC是建立在Servlet之上的,所以这也是任何以Spring MVC为基础构建的Java Web应用的处理请求的过程。 像tomcat这样的web容器,是负责创建Servlet和过滤器实例,然后调用它们的各个生命周期内的方法,比如init(),service(),destroy()。在HTTP请求的例子中,HttpServlet负责处理请求,根据HttP请求的方法类型,调用各种doXXX()方法。比如doGet()处理GET请求,doPost处理POST请求。 我们应该都知道在启动一个Spring MVC项目的时候,我们要在web.xml配置文件中声明DispatcherServlet。如下图的web.xml所示,这个Servlet监听的URL是*模式,这意味着所有的请求都能通过DispatcherServlet。 下面是Spring MVC中的web.xml配置,从中你可以看到DispatcherServlet能处理各种使用*匹配模式的URL的请求。

<web-app> <servlet> <servlet-name>Spring MVC Dispatcher Servlet </servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class> <init-param> <param-name> contextConfigLocation</param-name> <param-value> /WEB-INF/config/web-application-config.xml </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>example</servlet-name> <url-pattern>*</url-pattern> </servlet-mapping> </web-app>

URL匹配模式是非常重要的,如果请求符合DispatcherServlet配置的URL模式,那么这个请求就会被处理,否则就不会。DispatcherServlet根据URL请求的地址把请求传给指定的controller。那么DispatcherServlet是如何知道请求要传给哪个controller的呢? 使用@RequestMapping注解或者Spring MVC配置文件,可以找到URL请求的controller。当然也可以用特定的请求注解,比如@GetMapping或PostMapping。controller文件必须使用@Controller或@RestController(Restful风格)注解进行标记。

下面的这个例子中,Controller会处理所有包含 /appointments的URL。其中@GetMapping标记的方法会处理GET请求,@PostMapping标记的方法会处理POST请求。

@Controller @RequestMapping("/appointments") public class AppointmentsController { @GetMapping public Map get() { return appointmentBook.getAppointmentsForToday(); } @PostMapping public String add(@Valid AppointmentForm appointment, BindingResult result) { if (result.hasErrors()) { return "appointments/new"; } appointmentBook.addAppointment(appointment); return "redirect:/appointments"; } }

在处理请求之后,Controller将一个逻辑视图的名称和模型返回给DispatcherServlet,它会询问视图解析器,直到确定好一个实际的视图来呈现输出为止。 DispatchServlet可以选择Freemarker或JSP来展示数据。 呈现的输出作为HTTP响应返回给客户端,在返回的过程中,可以传递给配置好的过滤器,比如Spring Security过滤器链或者将响应转换为JSON或XML的过滤器。 Spring MVC框架中的DispatcherServlet是前端控制器模式的实现。它是单一入口点-处理所有传入的请求,不过这取决于URL配置模式和你的应用。 下面用一张图来表示Spring MVC的工作过程。

最后,总结一下Spring MVC处理HTTP请求的过程 1.客户端发送HTTP请求到指定的URL。 2.Spring MVC的DispatcherServlet接收到请求 3.DispatcherServlet把请求传到用@Controller和@RequestMapping注解的controller 4.Spring MVC返回逻辑视图的名称和模型给DispatcherServlet 5.DispatcherServlet咨询视图处理器直到有实际的视图来展示数据为止 6.DispatcherServlet使用模型数据联系所选的视图,例如Thymeleaf,Freemarker,JSP,并根据数据模型呈现输出。 7.呈现的输出作为响应返回给客户端 以上就是Spring MVC的工作流程或者说Spring MVC处理HTTP请求的过程。

原文地址

本文标签: 过程springMVCHTTP