SpringMVC工作流程
前言
这里对代码流程说个大概,详细版看这个
版权声明:本文为优快云博主「麦田里的守望者呀」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_53353693/article/details/124057001
一、SpringMVC常用组件说明
DispatcherServlet:前端控制器,不需要工程师开发,由框架提供
作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求
<!-- 添加对SpringMVC的支持 配置SpringMVC的前端控制器,对浏览器发送的请求统一进行处理-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<!-- 如果url-pattern定义的是路径,那么以后所有对这个路径下资源的请求都会由servlet-name中定义的servlet处理;
如果url-pattern定义的是资源格式例如*.do等,那么对于所有符合这种格式的资源的请求都由指定的servlet处理。-->
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
HandlerMapping:处理器映射器,不需要工程师开发,由框架提供(根据路径找到Controller)
作用:根据请求的url、method等信息查找Handler,即控制器方法
Handler:处理器,需要工程师开发(Controller的内容)
作用:在DispatcherServlet的控制下Handler对具体的用户请求进行处理
//如果ModelAndView对象不对viewName赋值,那么将默认为此方法的访问地址
@Controller
public class IndexController {
@RequestMapping({"/index"})
public ModelAndView index(@RequestParam(value="page",required=false)String page,
@RequestParam(value="typeId",required=false)String typeId,
@RequestParam(value="releaseDateStr",required=false)String releaseDateStr,
HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
return mav;
}
}
HandlerAdapter:处理器适配器,不需要工程师开发,由框架提供
作用:通过HandlerAdapter对处理器(控制器方法)进行执行(执行Controller)
ViewResolver:视图解析器,不需要工程师开发,由框架提供
作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、RedirectView
<!-- 视图解析器 当 ModelAndView 对象返回具体的 View 名称时,它会将前缀 prefix 和后缀 suffix 与具体的视图名称拼接-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"/>
<property name="suffix" value=".jsp"/>
</bean>
View:视图
作用:将模型数据通过页面展示给用户
二、SpringMVC流程
1.启动程序自动访问a.jsp
2.a.jsp重定向index.html(一般从这里开始,浏览器发送请求)
如果是index.jsp则直接访问jsp页面,没有数据(因为没有经过前端控制器)
3.被拦截,进入到DispatcherServlet:前端控制器
4.执行Controller,获得数据与视图名称
Model 是返回的数据对象,View 是个逻辑上的 View
//如果ModelAndView对象不对viewName赋值,那么将默认为此方法的访问地址
@Controller
public class IndexController {
@RequestMapping({"/index"})
public ModelAndView index(@RequestParam(value="page",required=false)String page,
@RequestParam(value="typeId",required=false)String typeId,
@RequestParam(value="releaseDateStr",required=false)String releaseDateStr,
HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
mav.addObject("blogList",list); //添加数据
return mav;
}
}
5.返回到前端控制器,进行视图解析器,前面默认视图名称为index,根据下面程序解析得到路径 /index.jsp 返回到前端控制器
去进行视图解析,返回最后的View对象
6.前端控制器将数据与视图一齐返回到前台
前端控制器对视图view进行渲染。最后前端控制器向用户响应结果
总结
稍微整理了下SpringMVC的工作流程,感觉明确了很多,不至于很久没搞,一下子什么流程的忘完了。
我也不是很明确,如果有什么错误,请大佬指出。
一个有图有讲的完善MVC流程的博客地址原文链接:https://blog.youkuaiyun.com/weixin_53353693/article/details/124057001