web.xml文件的作用及基本配置

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文件元素詳解

  1. 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>
  1. <display-name>Web應用名稱
    用于標記這個特定的Web應用的名稱
<display-name>Tomcat Example</display-name>
  1. <discription>Web應用描述
<disciption>Tomcat Example servlets and JSP pages.</disciption>
  1. <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>
  1. <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>
  1. <listerner>監聽器
<listener> 
    <listerner-class>com.listener.SessionListener</listener-class> 
</listener>
  1. <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
-->
  1. <session-config>會話超時配置
    單位為min
<session-config>
    <session-timeout>120</session-timeout>
</session-config>
  1. <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>

顯示時按順序從第一個找起,如果第一個存在,就顯示第一個,后面的不起作用。如果第一個不存在,就找第二個,以此類推。

  1. <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。

參考文章

web.xml文件詳解
web.xml詳解

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • 前言:一般的web工程中都會用到web.xml,web.xml主要用來配置,可以方便的開發web工程。web.xm...
    李天火閱讀 1,238評論 0 6
  • 1. web.xml配置詳解 <web-app> <!--指定WEB應用的名字--> <display-n...
    zhglance閱讀 808評論 0 1
  • 本章為部署描述符中Web容器支持詳細描述Java Servlet 規范3.0版本要求。部署描述符在應用開發者,應用...
    Lucky_Micky閱讀 2,042評論 0 0
  • web.xml文件詳解 前言:一般的web工程中都會用到web.xml,web.xml主要用來配置,可以方便的開發...
    ProZoom閱讀 2,232評論 0 4
  • 別著急,我們最后都會變成小心翼翼的人。 從前的日子里,總是充斥著孤單的味道,一個人的生活單調的無聊,想著有一個知心...
    暗戀月亮的小蔥閱讀 491評論 7 21