重学SpringMVC:框架原理解读 + 简单入门程序+组件分析.( 三 )

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %><%@ taglib uri="http://java.sun.com/jsp/jstl/fmt"prefix="fmt"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>查询商品列表</title></head><body> <form action="${pageContext.request.contextPath }/item/queryItem.action" method="post">查询条件:<table width="100%" border=1><tr><td><input type="submit" value=https://www.isolves.com/it/cxkf/kj/2021-07-14/"查询"/>商品列表:

商品名称商品价格生产日期商品描述操作
${item.name }${item.price }${item.detail }修改
2.10、部署测试测试上面三种采用不同的方式编写的处理类 。能够成功访问即成功
 三、springmvc框架原理图分析前面了解了springmvc的mvc设计模式的运用并且还编写了一个简单的实例,关键点就几个,配置DispatcherServlet,编写处理类以及配置,jsp,就mvc的三个关键点,但是这也是粗略的使用一下springmvc,并不知道其中运行的原理,比如
  • springmvc是如何找到处理器的?
  • springmvc如何执行处理器的?
  • springmvc如何查找到视图对象的?
看图即可
重学SpringMVC:框架原理解读 + 简单入门程序+组件分析.

文章插图
 
  • 1、发起请求到前端控制器(DispatcherServlet),该控制器中就会过滤出你哪些请求可以访问该servlet哪些不可以,就是url-pattern的作用,并且会加载springmvc.xml配置文件
  • 2、前端控制器会找到HandlerMapping(处理器映射器),通过HandlerMapping完成url到controller映射的组件,通俗点讲,就是将在springmvc.xml中配置的或者注解的url与对应的处理类找到并进行存储,实际上是用一个map集合来保存这种映射关系,map<url,handler>; 这样,就将所有的这种映射关系都记录保存了下来
  • 3、通过HandlerMapping有了这些映射关系,并且找到了url对应的处理器,HandlerMapping就会将其处理器(图中红色标明的handler)返回,在其返回之前,再加上很多的拦截器,其作用后面
  • 进行讲解,这里知道在返回的处理器前会有很多的拦截器即可 。
  • 4、DispatcherServlet拿到了handler之后,找到HandlerAdapter(处理器适配器),通过它来访问处理器,并且执行处理器 。
这里会有人会有疑惑,为什么需要处理器适配器,我们都获得了处理类了,直接调用不就行了吗?
不行,因为我们只知道处理类在哪里,并不知道执行处理类中的哪个方法,其实也就是不知道处理类是通过哪种方式创建出来的,实现HttpRequestHandler?还是注解方式,或者是 其他方式,我们不知道,所以需要HandlerAdapter来帮我们确认调用哪个方法 。
  • 5、执行处理器
  • 6、处理器会返回一个ModelAndView对象给HandlerAdapter
  • 7、通过HandlerAdapter将ModelAndView对象返回给前端控制器(DispatcherServlet)
  • 8、前端控制器请求视图解析器(ViewResolver)去进行视图解析,根据逻辑视图名解析成真正的视图(jsp),其实就是将ModelAndView对象中存放视图的名称进行查找,找到对应的页面形成视图对象
  • 9、返回视图对象到前端控制器 。
  • 10、视图渲染,就是将ModelAndView对象中的数据放到request域中,用来让页面加载数据的 。
  • 11、通过第8步,通过名称找到了对应的页面,通过第10步,request域中有了所需要的数据,那么就能够进行视图渲染了 。最后将其返回即可 。
通过上面的图和分析过程,就能够完美解答上面的三个问题了 。理解了图,那么springmvc就会用了 。很简单吧,跟struts2差不多,记住原理图即可 。
四、组件分析(默认组件和手动配置组件)通过图可以看到


推荐阅读