web.xml文件的作用及基本配置
web.xml是什么啊
web.xml是web項目的配置文件,一般的web工程都會用到web.xml來配置,方便大型開發。web.xml主要用來配置Filter,Listener,Servlet等。但是web.xml并不是必須的,一個web工程可以沒有web.xml文件
web工程加載web.xml過程
web容器的加載順序ServletContext -> context-param -> listener -> filter -> servlet。并且這些元素可以配置在文件中的任意位置,不會因為filter在web.xml文件中寫在listener前面就先加載filter。
加載過程順序如下
- 啟動一個web項目,web容器會讀取它的配置文件web.xml,讀取<listener>和<context-param>兩個結點。
- 創建一個ServletContext(Servlet上下文),這個web項目的所有部分都將共享這個上下文
- 容器將<context-param>轉換為鍵值對,并交給ServletContext
- 容器創建<listener>中的類實例,創建監聽器
web.xml文件元素詳解
- schema
web.xml的模式文件是由Sun公司定義的,每個web.xml文件的根元素<web-app>中,都必須標明這個web.xml使用的是哪個模式文件。其他的元素都放在<web-app></web-app>中
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>
- <display-name>Web應用名稱
用于標記這個特定的Web應用的名稱
<display-name>Tomcat Example</display-name>
- <discription>Web應用描述
<disciption>Tomcat Example servlets and JSP pages.</disciption>
- <context-param>上下文參數
聲明應用范圍內的初始化參數。用于向Servlet+Context提供鍵值對,即應用程序上下文信息。后續的listener,filter在初始化時會用到這些上下文信息。在servlet里面可以通過getServletContext().getInitParameter("context/param")
得到
<context-param>
<param-name>log4jConfiguration</param-name>
<param-value>/WEB-INF/log4j2.xml</param-value>
</context-param>
- <filter>過濾器
filter可以認為是servlet的一種加強版,主要用于對用戶請求request進行預處理,也可以對response進行后處理,是個典型的處理鏈。使用filter的完整流程是,filter對用戶請求進行預處理,接著將請求HttpServletRequest交給Servlet處理并生成響應。最后Filter再對服務器響應HttpServletResponse進行后處理。Servlet與Servlet具有完全相同的生命周期,而Filter也可以通過<init-para>進行初始化參數的配置,并通過FilterConfig傳送給filter
Filter的配置就是將此項目與一個實現javax.servlet.Filter接口的類相關聯
<filter>
<filter-name>setCharacterEncoding</filter-name>
<filter-class>com.myTest.setCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>setCharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
- <listerner>監聽器
<listener>
<listerner-class>com.listener.SessionListener</listener-class>
</listener>
- <servlet>
servlet老生常談啦,是運行在服務器端的小程序
<!-- 基本配置 -->
<servlet>
<servlet-name>snoop</servlet-name>
<servlet-class>SnoopServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>snoop</servlet-name>
<url-pattern>/snoop</url-pattern>
</servlet-mapping>
<!-- 高級配置 -->
<servlet>
<servlet-name>snoop</servlet-name>
<servlet-class>SnoopServlet</servlet-class>
<init-param>
<param-name>foo</param-name>
<param-value>bar</param-value>
</init-param>
<run-as>
<description>Security role for anonymous access</description>
<role-name>tomcat</role-name>
</run-as>
</servlet>
<servlet-mapping>
<servlet-name>snoop</servlet-name>
<url-pattern>/snoop</url-pattern>
</servlet-mapping>
<!--
<servlet-name></servlet-name> 指定servlet的名稱
<servlet-class></servlet-class> 指定servlet的類名稱
<jsp-file></jsp-file> 指定web站臺中的某個JSP網頁的完整路徑
<init-param></init-param> 用來定義參數,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數
<load-on-startup></load-on-startup>指定當Web應用啟動時,裝載Servlet的次序。當值為正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet。當值為負或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它。
<servlet-mapping></servlet-mapping> 用來定義servlet所對應的URL,包含兩個子元素
<servlet-name></servlet-name> 指定servlet的名稱
<url-pattern></url-pattern> 指定servlet所對應的URL
-->
- <session-config>會話超時配置
單位為min
<session-config>
<session-timeout>120</session-timeout>
</session-config>
- <welcome-file-list>歡迎文件頁
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
</welcome-file-list>
顯示時按順序從第一個找起,如果第一個存在,就顯示第一個,后面的不起作用。如果第一個不存在,就找第二個,以此類推。
- <jsp-config>設置jsp
<jsp-config> 包括 <taglib> 和 <jsp-property-group> 兩個子元素。
<jsp-property-group> 元素主要有八個子元素,它們分別為:
<description>:設定的說明
<display-name>:設定名稱
<url-pattern>:設定值所影響的范圍,如: /CH2 或 /*.jsp
<el-ignored>:若為 true,表示不支持 EL 語法
<scripting-invalid>:若為 true,表示不支持 <% scripting %>語法
<page-encoding>:設定 JSP 網頁的編碼
<include-prelude>:設置 JSP 網頁的抬頭,擴展名為 .jspf
<include-coda>:設置 JSP 網頁的結尾,擴展名為 .jspf
<jsp-config>
<taglib>
<taglib-uri>Taglib</taglib-uri>
<taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location>
</taglib>
<jsp-property-group>
<description>Special property group for JSP Configuration JSP example.</description>
<display-name>JSPConfiguration</display-name>
<url-pattern>/jsp/* </url-pattern>
<el-ignored>true</el-ignored>
<page-encoding>GB2312</page-encoding>
<scripting-invalid>true</scripting-invalid>
<include-prelude>/include/prelude.jspf</include-prelude>
<include-coda>/include/coda.jspf</include-coda>
</jsp-property-group>
</jsp-config>
對于Web 應用程式來說,Scriptlet 是個不樂意被見到的東西,因為它會使得HTML 與Java 程式碼交相混雜,對于程式的維護來說相當的麻煩,必要的時候,可以在web.xml 中加上<script-invalid> 標簽,設定所有的JSP 網頁都不可以使用Scriptlet。