SpringMVC-web.xml文件解析

简介

SpringMVC的web.xml文件的简单介绍

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	     xmlns="http://java.sun.com/xml/ns/javaee"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-	app_3_0.xsd" version="3.0">
  <!--
 <display-name>practice-manager-web</display-name>
 首页(默认展示的首页):
 <welcome-file-list>
   <welcome-file>index.html</welcome-file>
   <welcome-file>index.htm</welcome-file>
   <welcome-file>index.jsp</welcome-file>
   <welcome-file>default.html</welcome-file>
   <welcome-file>default.htm</welcome-file>
   <welcome-file>default.jsp</welcome-file>
 </welcome-file-list>
-->
  
<!--配置 DispatcherServlet(即配置servlet,可配置多个servlet,但一般不这么做)-->
<servlet>
	<!--DispatcherServlet的名字,要与下面的<servlet-name>的名字相同(<servlet-mapping>) --> 
	<servlet-name>example</servlet-name>  
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <!-- 初始化参数,即让容器找到springMVC的配置文件,可以不配置contextConfigLocation
    	使用默认的的配置文件为: /WEB-INF/<servlet-name>-servlet.xml,因为使用了默认,肯定也有默认路径,
    	新建的文件也要放在 /WEB-INF/文件夹下!!
    --> 
	<init-param>  
		<param-name>contextConfigLocation</param-name>  
		<param-value>classpath:springmvc.xml</param-value> 
	</init-param> 
	
    <!-- 优先启动此servlet(必须是整数,
		小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
		当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
		当值相同时,容器就会自己选择顺序来加载。整数值越小越优先,
		即启动的时候就加载DispatcherServlet,且优先级为1) 
    -->
    <load-on-startup>1</load-on-startup>  
 </servlet> 
 
 <servlet-mapping>  
	<servlet-name>example</servlet-name>  
	<url-pattern>/example/*</url-pattern>  
 </servlet-mapping> 
 <!-- 以上配置的意思是:
 		所有路径以 /example 开头的请求都会被名字为 example 的 DispatcherServlet 处理。
 		流程:
 		路径以/example 开头的请求被拦截,然后根据<servlet-name>找到其配置的servlet,
 		获取配置文件,并初始化(<init-param>  )
  -->
 
<!-- spring核心(加载spring的配置文件) <context-param>和<init-param>下面有补充 
	listener标签中的类获取<context-param>中配置的文件信息。-->
<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
	<param-name>contextConfigLocation</param-name>
	<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 配置过滤器 -->
<!-- 设置字符编码方式-->
 <filter> 
	<filter-name>setcharacter</filter-name> 
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 
	<init-param> 
		<param-name>encoding</param-name> 
		<param-value>utf-8</param-value> 
	</init-param> 
 </filter> 
 <filter-mapping> 
 	<filter-name>setcharacter</filter-name> 
	<url-pattern>/*</url-pattern> 
</filter-mapping> 
</web-app>

init-param标签 和 context-param的区别:

(1)application范围内的参数,存放在servletcontext中,
(2)servlet范围内的参数,只能在servlet的init()方法中取得。

DispatcherServlet 的处理流程:

配置好 DispatcherServlet 以后,开始有请求会经过这个 DispatcherServlet 。此时, DispatcherServlet 会依照以下的次序对请求进行处理:

(1)首先,搜索应用的 上下文对象 WebApplicationContext  并把它作为一个属性(attribute)绑定到该请求上,以便控制器和其他组件能够使用它。属性的键名默认为 DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE;

(2)将地区(locale)解析器绑定到请求上,以便 其他组件在处理请求(渲染视图、准备数据等)时可以获取区域相关的信息。如果你的应用不需要解析区域相关的信息,忽略它即可。

(3)将主题(theme)解析器绑定到请求上,以便其他组件(比如视图等)能够了解要渲染哪个主题文件。同样,如果你不需要使用主题相关的特性,忽略它即可;

(4) 如果你配置了multipart文件处理器,那么框架将查找该文件是不是multipart(分为多个部分连续上传)的。若是,则将该请求包装成一个MultipartHttpServletRequest 对象,以便处理链中的其他组件对它做进一步的处理。关于Spring对multipart文件传输处理的支持,读者可以参考21.10 Spring的multipart(文件上传)支持一小节;

(5)为该请求查找一个合适的处理器。如果可以找到对应的处理器,则与该处理器关联的整条执行链(前处理器、后处理器、控制器等)都会被执行,以完成相应模型的准备或视图的渲染;

(6)如果处理器返回的是一个模型(model),那么框架将渲染相应的视图。若没有返回任何模型(可能是因为前后的处理器出于某些原因拦截了请求等,比如,安全问题),则框架不会渲染任何视图,此时认为对请求的处理可能已经由处理链完成了。

filter和Interceptor的区别

  • Filter是基于函数回调的,而Interceptor则是基于Java反射的。
  • Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
  • Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
  • Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
  • 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值