1. web.xml配置詳解
<web-app>
? ? <!--指定WEB應(yīng)用的名字-->
? ? <display-name>MyWeb</display-name>
? ? <!--WEB應(yīng)用描述信息-->
? ? <description>MyWeb demo</description>
? ? <!--web的初始化參數(shù),通過(guò)ServletContextEvent.getServletContext().getInitParameter("field")獲得value的值(ServletContextEvent通過(guò)listener獲得)-->
? ? <context-param>
? ? ? ? <param-name>contextConfigLocation</para-name>
? ? ? ? <param-value>/WEB-INF/applicationContext.xml</param-value>
? ? ? ? <description>web的ApplicationContext上下問(wèn)文件配置</description>
? ? </context-param>
? ? <!--filter 和filter-mapping 必須是成對(duì)出現(xiàn)-->
? ? <!--攔截/*的路徑,執(zhí)行CharacterEncodingFilter的父類的OncePerRequestFilter的doFilter(doFilter中調(diào)用doFilterInternal方法,設(shè)置request和response的編碼方式設(shè)置為UTF-8)-->
? ? <filter>
? ? ? ? <filter-name>utf8-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>
? ? ? ? <init-param>
? ? ? ? ? ? <param-name>forceEncoding</param-name>
? ? ? ? ? ? <param-value>true</param-value>
? ? ? ? </init-param>
? ? </filter>
? ? <filter-mapping>
? ? ? ? <filter-name>utf8-encoding</filter-name>
? ? ? ? <url-pattern>/*</url-pattern>
? ? </filter-mapping>
? ? <!--servlet 監(jiān)聽(tīng)配置硫麻,項(xiàng)目啟動(dòng)時(shí)執(zhí)行contextInitialized(ServletContextEvent servletContextEvent)方法鸽照,項(xiàng)目停止時(shí)執(zhí)行contextDestroyed(ServletContextEvent event)-->
? ? <listener>
? ? ? ? <listerner-class>org.springframework.web.context.ContextLoaderListener</listener-class>
? ? </listener>
? ? <!--servlet和servlet-mapping是成對(duì)出現(xiàn)的往声,服務(wù)啟動(dòng)時(shí),執(zhí)行HttpServlet.init(ServletConfig config)方法,當(dāng)用戶請(qǐng)求/myservlet/*路徑時(shí),執(zhí)行HttpServlet.service(HttpServletRequest req, HttpServletResponse resp)方法-->
? ? <servlet>
? ? ? ? <servlet-name>myservlet</servlet-name>
? ? ? ? <servlet-class>javax.servlet.http.HttpServlet</servlet-class>
? ? ? ? <init-param>
? ? ? ? ? ? <param-name>paramField</param-name>
? ? ? ? ? ? <param-value>paramValue</param-value>
? ? ? ? </init-param>
? ? </servlet>
? ? <servlet-mapping>
? ? ? ? <servlet-name>myservlet</servlet-name>
? ? ? ? <url-pattern>/myservlet/*</url-pattern>
? ? </servlet-mapping>
? ? <!--會(huì)話超時(shí)時(shí)間設(shè)置,單位是分鐘-->
? ? <session-config>
? ? ? ? <session-timeout>10</session-timeout>
? ? </session-config>
? ? <!--mime-mapping元素將mime類型映射到擴(kuò)展名, 用于規(guī)定下載格式-->
? ? <mime-mapping>
? ? ? ? <extension>htm</extension>
? ? ? ? <mime-type>text/html</mime-type>
? ? </mime-mapping>
? ? <mime-mapping>
? ? ? ? <extension>pdf</extension>
? ? ? ? <mime-type>application/pdf</mime-type>
? ? </mime-mapping>
? ? <mime-mapping>
? ? ? ? <extension>doc</extension>
? ? ? ? <mime-type>application/msword</mime-type>
? ? </mime-mapping>
? ? <mime-mapping>
? ? ? ? <extension>xls</extension>
? ? ? ? <mime-type>application/msexcel</mime-type>
? ? </mime-mapping>
? ? <!--指定Web項(xiàng)目的歡迎頁(yè)面-->
? ? <welcome-file-list>
? ? ? ? <welcome-file>index.jsp</welcome-file>
? ? ? ? <welcome-file>index.html</welcome-file>
? ? </welcome-file-list>
? ? <!--當(dāng)請(qǐng)求發(fā)生404錯(cuò)誤時(shí)耘婚,跳轉(zhuǎn)到404error.jsp頁(yè)面-->
? ? <error-page>
? ? ? ? <error-code>404</error-code>
? ? ? ? <location>/404error.jsp</location>
? ? </error-page>
? ? <!--當(dāng)Web服務(wù)發(fā)生java.lang.NullException異常時(shí),跳轉(zhuǎn)到nullerror.jsp頁(yè)面-->
? ? <error-page>
? ? ? ? <exception-type>java.lang.NullException</exception-type>
? ? ? ? <location>/nullerror.jsp</location>
? ? </error-page>
? ? <!--對(duì)tag庫(kù)文件名稱。前端JSP可以通過(guò)<%@ taglib uri="http://jakarta.apache.org/tomcat/debug-taglib" prefix="myTag"%>配置使用tag庫(kù)-->
? ? <taglib>
? ? ? ? <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>
? ? ? ? <taglib-location>/WEB-INF/tld/taglib.tld</taglib-location>
? ? </taglib>
? ? <!--配置資源相關(guān)的管理對(duì)象,可通過(guò)new InitialContext().lookup()獲得值-->
? ? <resource-env-ref>
? ? ? ? <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>
? ? </resource-env-ref>
? ? <!--設(shè)置factory的外部資源-->
? ? <resource-ref>
? ? ? ? <description>java JDBC DataSource factory</description>
? ? ? ? <res-ref-name>jdbc/java_db</res-ref-name>
? ? ? ? <res-type>javax.sql.DataSource</res-type>
? ? ? ? <res-auth>dataManager</res-auth>
? ? </resource-ref>
? ? <security-constraint></security-constraint>
? ? <login-config></login-config>
? ? <security-role></security-role>
? ? <env-entry></env-entry>
</web-app>
2. web.xml加載過(guò)程:
1. Web項(xiàng)目啟動(dòng)的時(shí)候橄登,容器(如:tomcat)讀取webapp/WEB-INF/web.xml文件,讀取<context-param>和<listener>;
2. 創(chuàng)建ServletContex拢锹,Web項(xiàng)目所有部分都可以使用該上下文ServletContex谣妻;
3. 容器將<context-param></context-param>解析為key-value對(duì),并交給ServletContext;
4. 容器根據(jù)<listener></listener>中的類創(chuàng)建監(jiān)聽(tīng)實(shí)例,即啟動(dòng)監(jiān)聽(tīng)卒稳;
5. listener監(jiān)聽(tīng)類中會(huì)contextInitialized(ServletContextEvent servletContextEvent)初始化方法,可通過(guò)ServletContextEvent.getServletContext().getInitParameter("field")獲得value的值蹋半;
6. 解析<filters></filters>,并啟動(dòng)攔截器 攔截器開(kāi)始起作用,當(dāng)有請(qǐng)求進(jìn)入時(shí),執(zhí)行Filter的doFilter方法;
7. 最后加載和初始化配置在load on startup的servlets;
8. 加載Spring,如果filter需要用到bean,但加載順序是: 先加載filter 后加載spring充坑,則filter中初始化操作中的bean為null.
? ? 如果過(guò)濾器中要使用到 bean减江,可以將spring 的加載 改成 Listener的方式 :
<listener>??
? ? ? ? ?<listerner-class>org.springframework.web.context.ContextLoaderListener</listener-class>?
? </listener>