Spring MVC框架的工作流程如下:
(1)用户通过浏览器向服务器发送请求,请求会被 Spring MVC 的前端控制器 DispacherServlet 所拦截。
(2)DispacherServlet 拦截到请求后,会调用 HandlerMapper 处理器映射器。
(3)解析到对应的Handle后,开始由HandleAdaptter适配器处理。
(4)HandleAdapter会根据Handler来调用真正的处理器开始处理请求,并处理相应的业务逻辑。
(5)处理器处理完业务后,会返回一个ModelAndView对象,Model是返回的数据对象,View是个逻辑上的View。
(6)ViewResolver会根据逻辑View查找实际的View
(7)DispaterServlet把返回的Model传给View。
(8)通过View返回给请求者(浏览器)

HttpSession的作用

http是无状态的协议,客户每次读取web页面时,服务器打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能实现会话跟踪呢?session就是一种保存上下文信息的机制,它时针对每一个用户的变量的值保存在服务器端,通过SessionID来区分不同的客户,session时以cookie或URL重写为基础的,默认使用cookie来实现,系统会创造一个名为JSESSIONID的输出返回给客户端Cookie保存。
举个例子:一个临时用户登录电商首页,选了一堆的商品加入了购物车;这个时候需要生成订单了,跳转到另外一个页面,此时通过Session我们就可以定位这个临时用户,获取到购物车里面的商品。

JSESSIONID

用户第一次请求,或者session失效后,Tomcat会创建一个Session对象,然后把SessionID设置给浏览器Cookie;之后浏览器就带着这个Cookie参数过来,服务器端就知道是哪个用户会话了。

首次请求
image.png

再次请求
image.png

URL地址重写

URL地址重写是对客户端不支持Cookie的解决方案,原理是给url地址加上JSESSIONID参数,第一次登录系统后,给客户端返回的url全部带上JSESSIONID参数,这样就识别是哪个session会话了。

  1. <td>
  2. <a href="index.jsp?jsessionid=ECCD096E7F8D97B0BE608AFDC3E1931B>Home</a>
  3. </td>