1. 程式人生 > >servlet,filter,listener三者的載入順序

servlet,filter,listener三者的載入順序

我們在配置tomcat的入口檔案web.xml時,一般都配置這三項,那他們的執行順序你知道?

 <!-- 載入spring容器 -->
	<context-param>
	    <param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring/applicationContext-*.xml</param-value>
		
	</context-param>
	<!-- spring的監聽器 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	
	<!-- 中文過濾器 -->
	<filter>
		<filter-name>encoding</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>encoding</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	
	<filter-mapping>
		<filter-name>encoding</filter-name>
		<url-pattern>*.shtml</url-pattern>
	</filter-mapping>
	
	<!-- springmvc-->
	<servlet>
		<servlet-name>front</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>classpath:spring/springmvc.xml</param-value>
		</init-param>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>front</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

經過測試他們的載入順序是,listener,filter,servlet(和他們在xml配置的先後無關)

servlet和filter的區別

Filter可認為是Servlet的一種“變種”,它主要用於對使用者請求進行預處理,也可以對HttpServletResponse進行後處理,是個典型的處理鏈。它與Servlet的區別在於:它不能直接向用戶生成響應。完整的流程是:Filter對使用者請求進行預處理,接著將請求交給Servlet進行處理並生成響應,最後Filter再對伺服器響應進行後處理。