2021年3月2日星期二

springmvc核心流程及配置

原文链 id="核心流程及配置">核心流程及配置

核心流程

  • 首先用户发送请求-------->DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为同一访问点,进行全局的流程控制

  • DispatcherServlet--------->HandlerMapping,HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器对象、多个HandlerInterceptor拦截器),通过策略模式,很容易添加新的映射策略

  • DispatcherServlet---------->HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配设计模式的应用,从而很容易支持很多类型的处理器

  • HandlerAdapter------------->处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理,并返回一个ModelAndView对象

  • ModelAndView的逻辑视图名-------->ViewResolver,ViewResolver将把逻辑视图解析为具体的View,通过这种策略模式,很容易更换其他视图技术

  • View------>渲染,View会根据传进来的Model模型进行渲染,此处的Model实际是一个Map

  • 返回控制权给DispatcherServlet,有DispatcherServlet返回响应给用户

配置

DispatcherServlet

DispatcherServlet充当SpringMVC的前端控制器。与其他Servlet一样,DispatcherServlet必须在Web应用程序的web.

web.

<!-- springmvc会过滤掉.html的 导致视图解析器无法找到  如果只是使用jsp资源而未使用html的话可以不配置该项--><servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.html</url-pattern></servlet-mapping><!-- 配置DispatcherServlet --><servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <!-- 初始化参数:配置Springmvc配置文件的位置和名称  默认配置文件为:/WEB-INF/<servlet-name>-servlet.
静态资源请求问题

因为DispatcherServlet的配置的是/,针对的是所有请求,所以对于一些的静态资源(如.js、.css)等也会经过DispatcherServlet,但是DispatcherServlet是处理动态请求的,无法处理静态资源

配置<mvc:default-servlet-handler/>来解决,作用是处理静态资源,将在SpringMVC上下文中定义一个DefaultServletHttpRequestHandler,会对进行DispatcherServlet的请求进行筛选,如果发现是没有经过映射的请求,就将请求交给WEB服务器默认的Servlet来处理,否则交由DispatcherServlet来处理

default-servlet-name默认是default,如果不是default需要显式的进行配置(看所使用的web服务器,tomcat是default

<mvc:default-servlet-handler default-servlet-name="default"/>

需要注意的是,配置了<mvc:default-servlet-handler/>之后,@RequestMapping的映射会失效,需要加上<mvc:annotation-driven/>配置

HandlerMapping

spring自带了多个处理器映射实现

  • BeanNameUrlHandlerMapping 根据控制器Bean的名字将控制器映射到URL

  • ControllerBeanNameHandlerMapping 与BeanNameUrlHandlerMapping类似

  • ControllerClassNameHandlerMapping 通过使用控制器的类名作为URL基础将控制器映射到URL

  • DefaultAnnotationHandlerMapping 将请求映射给使用@RequestMapping注解的控制器和控制器方法

  • SImplerUrlHandlerMapping 使用定义在Spring应用上下文的集合将控制器映射到URL

<!-- 开启注解 --><mvc:annotation-driven/><bean id="defaultAnnotationHandlerMapping" 		 	/>
mvc:annotation-driven配置的作用
  • <mvc:annotation-driven/>会自动注册RequestMappingHandlerMapping、RequestMappingHandlerAdater、ExceptionHandlerExceptionResolver三个bean
  • 支持使用ConversionService实例对表单参数进行类型转换
  • 支持使用@NumberFormatannotation、@DataTimeFormat注解完成数据类型的格式化
  • 支持使用@Vaild注解对JavaBean实例进行JSR 303验证
  • 支持使用@RequestBody和@ResponseBody注解

HandlerAdapter

<bean id="annotationMethodHandlerAdapter" />

配置视图

InternalResourceViewResolver将逻辑视图名称解析为View对象,架构该对象渲染的任务委托给Web应用程序上下文的一个模板

<!-- 配置视图解析器,将ModelAndView及字符串解析为具体的页面 --><bean >	<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property></bean>

由于本身的博客百度没有收录,博客地 />






原文转载:http://www.shaoqun.com/a/598579.html

跨境电商:https://www.ikjzd.com/

vava:https://www.ikjzd.com/w/2780

patents:https://www.ikjzd.com/w/857


原文链id="核心流程及配置">核心流程及配置核心流程首先用户发送请求-------->DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为同一访问点,进行全局的流程控制DispatcherServlet--------->HandlerMapping,HandlerMapping将会把请求映射为Hand
卖家精灵:https://www.ikjzd.com/w/532
tiki:https://www.ikjzd.com/w/2053
photobucket:https://www.ikjzd.com/w/132
一份日本卖家和中国卖家CTR/CR的血淋淋对比数据:https://www.ikjzd.com/tl/98302
eBay:法国12月5日的罢工可能会影响送货时间!:https://www.ikjzd.com/home/112255
亚马逊北美站旺季爆款教卖家如何优化高质量listing?:https://www.ikjzd.com/home/11256