国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于web.xml配置的那些事兒

zhichangterry / 2906人閱讀

摘要:的版本增加了對事件監(jiān)聽程序的支持,事件監(jiān)聽程序在建立修改和刪除會話或環(huán)境時得到通知。元素指出事件監(jiān)聽程序類。過濾器配置將一個名字與一個實現(xiàn)接口的類相關(guān)聯(lián)。

1.簡介

web.xml文件是Java web項目中的一個配置文件,主要用于配置歡迎頁、Filter、Listener、Servlet等,但并不是必須的,一個java web項目沒有web.xml文件照樣能跑起來。Tomcat容器/conf目錄下也有作用于全局web應(yīng)用web.xml文件,當(dāng)一個web項目要啟動時,Tomcat會首先加載項目中的web.xml文件,然后通過其中的配置來啟動項目,只有配置的各項沒有錯誤時,項目才能正常啟動。

那么web.xml文件中到底有些什么內(nèi)容呢?我們要如何去配置它以適應(yīng)我們的項目呢?
首先讓我們從Tomcat加載資源的順序開始,一步步分析web.xml文件的作用。

2.Tomcat加載資源順序

Tomcat啟動時加載資源主要有三個階段:

第一階段:JVM相關(guān)資源

(1)$JAVA_HOME/jre/lib/ext/*.jar
(2)系統(tǒng)classpath環(huán)境變量中的*.jar和*.class 

第二階段:Tomcat自身相關(guān)資源

(1)$CATALINA_HOME/common/classes/*.class  
(2)$CATALINA_HOME/commons/endorsed/*.jar   
(3)$CATALINA_HOME/commons/i18n/*.jar   
(4)$CATALINA_HOME/common/lib/*.jar   
(5)$CATALINA_HOME/server/classes/*.class   
(6)$CATALINA_HOME/server/lib/*.jar   
(7)$CATALINA_BASE/shared/classes/*.class   
(8)$CATALINA_BASE/shared/lib/*.jar 

第三階段:Web應(yīng)用相關(guān)資源

(1)具體應(yīng)用的webapp目錄: /WEB-INF/classes/*.class   
(2)具體應(yīng)用的webapp: /WEB-INF/lib/*.jar

在同一個文件夾下,jar包是按順序從上到下依次加載,由ClassLoader的雙親委托模式加載機(jī)制我們可以知道,假設(shè)兩個包名和類名完全相同的class文件不再同一個jar包,如果一個class文件已經(jīng)被加載java虛擬機(jī)里了,那么后面的相同的class文件就不會被加載了。

但tomcat的加載運(yùn)行機(jī)制與JAVA虛擬機(jī)的父類委托機(jī)制稍有不同。
下面來做詳細(xì)敘述:
1、首先加載TOMCAT_HOME/lib目錄下的jar包
2、然后加載TOMCAT_HOME/webapps/項目名/WEB-INF/lib的jar包
3、最后加載的是TOMCAT_HOME/webapps/項目名/WEB-INF/classes下的類文件
值得注意的關(guān)鍵是:tomcat按上述順序依次加載資源,當(dāng)后加載的資源與之前加載的資源相重時,后加載的資源會繼續(xù)加載并將之前的資源覆蓋。

Tomcat的具體內(nèi)部細(xì)節(jié)及解讀可以參考:

Apache Tomcat 9 (9.0.0.M26) - Documentation

極客學(xué)院wiki - 《Tomcat 8 權(quán)威指南》

《深入剖析Tomcat》

3.web.xml配置文件簡介

servlet和JSP規(guī)范在發(fā)展階段中出現(xiàn)了很多的web.xml配置版本,如3.0、3.1、4.0等,版本的變更會改變web.xml對應(yīng)的配置代碼。下圖是來自Tomcat官網(wǎng)的Servlet和JSP規(guī)范規(guī)范與的Apache Tomcat版本之間的對應(yīng)關(guān)系:

下面是各個版本的web.xml配置示例代碼:

servlet 2.5 [Tomcat 6.0.x(archived)]



   ...

servlet 3.0 [Tomcat 7.0.x]



  ...

servlet 3.1 [Tomcat 8.0.x (superseded) & 8.5.x]



  ...

servlet 4.0 [Tomcat 9.0.x]


  ...

在tomcat目錄${CATALINA_HOME}/conf下和web應(yīng)用目錄${CATALINA_HOME}/webapps/WebDemo(WebDemo為web應(yīng)用名)下都有web.xml這個文件,但是內(nèi)容不一樣。

Tomcat在激活、加載、部署web應(yīng)用時,會解析加載${CATALINA_HOME}/conf目錄下所有web應(yīng)用通用的web.xml,然后解析加載web應(yīng)用目錄中的WEB-INF/web.xml
其實根據(jù)他們的位置,我們就可以知道,conf/web.xml文件中的設(shè)定會應(yīng)用于所有的web應(yīng)用程序,而某些web應(yīng)用程序的WEB-INF/web.xml中的設(shè)定只應(yīng)用于該應(yīng)用程序本身。

如果沒有WEB-INF/web.xml文件,tomcat會輸出找不到的消息,但仍然會部署并使用web應(yīng)用程序,servlet規(guī)范的作者想要實現(xiàn)一種能迅速并簡易設(shè)定新范圍的方法,以用作測試,因此,這個web.xml并不是必要的,不過通常最好還是讓每一個上線的web應(yīng)用程序都有一個自己的WEB-INF/web.xml。

3.web.xml元素配置詳解

web.xml文件加載順序為:(與順序無關(guān))
ServletContext -> context-param -> listener -> filter -> servlet

web.xml中定義了以下元素:

 
    定義了WEB應(yīng)用的名字 
     聲明WEB應(yīng)用的描述信息 
    
     context-param元素聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。 
     過濾器元素將一個名字與一個實現(xiàn)javax.servlet.Filter接口的類相關(guān)聯(lián)。 
     一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關(guān)聯(lián)。 
    
    servlet API的版本2.3增加了對事件監(jiān)聽程序的支持,事件監(jiān)聽程序在建立、修改和刪除會話或servlet環(huán)境時得到通知。Listener元素指出事件監(jiān)聽程序類。 
    
     在向servlet或JSP頁面制定初始化參數(shù)或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務(wù)的。 
    
     服務(wù)器一般為servlet提供一個缺省的URL:http://host/webAppPrefix/servlet/ServletName.
    
    但是,常常會更改這個URL,以便servlet可以訪問初始化參數(shù)或更容易地處理相對URL。在更改缺省URL時,使用servlet-mapping元素。 
    
     如果某個會話在一定時間內(nèi)未被訪問,服務(wù)器可以拋棄它以節(jié)省內(nèi)存。 可通過使用HttpSession的setMaxInactiveInterval方法明確設(shè)置單個會話對象的超時值,或者可利用session-config元素制定缺省超時值。 
    
    如果Web應(yīng)用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-mapping元素提供這種保證。 
    
     指示服務(wù)器在收到引用一個目錄名而不是文件名的URL時,使用哪個文件。 
    
     在返回特定HTTP狀態(tài)代碼時,或者特定類型的異常被拋出時,能夠制定將要顯示的頁面。 
    
     對標(biāo)記庫描述符文件(Tag Libraryu Descriptor file)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。 
    
    聲明與資源相關(guān)的一個管理對象。 
     聲明一個資源工廠使用的外部資源。 
     制定應(yīng)該保護(hù)的URL。它與login-config元素聯(lián)合使用 
     指定服務(wù)器應(yīng)該怎樣給試圖訪問受保護(hù)頁面的用戶授權(quán)。它與sercurity-constraint元素聯(lián)合使用。 
    
    給出安全角色的一個列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name子元素中。分別地聲明角色可使高級IDE處理安全信息更為容易。 
    
    聲明Web應(yīng)用的環(huán)境項。 
    聲明一個EJB的主目錄的引用。 
    聲明一個EJB的本地主目錄的應(yīng)用。 
 

相應(yīng)元素的配置:

Web應(yīng)用圖標(biāo):指出IDE和GUI工具用來表示W(wǎng)eb應(yīng)用的大圖標(biāo)和小圖標(biāo)

 
    /images/app_small.gif 
    /images/app_large.gif 
 

Web 應(yīng)用名稱:提供GUI工具可能會用來標(biāo)記這個特定的Web應(yīng)用的一個名稱

Tomcat Example 

Web 應(yīng)用描述: 給出于此相關(guān)的說明性文本

Tomcat Example servlets and JSP pages. 

上下文參數(shù):聲明應(yīng)用范圍內(nèi)的初始化參數(shù)。

 
    ContextParameter 
    test 
    It is a test parameter. 
 

在servlet里面可以通過getServletContext().getInitParameter("context/param")得到。

過濾器配置:將一個名字與一個實現(xiàn)javaxs.servlet.Filter接口的類相關(guān)聯(lián)。

 
    setCharacterEncoding 
    com.myTest.setCharacterEncodingFilter 
     
        encoding 
        GB2312 
     
 
 
    setCharacterEncoding 
    /* 

監(jiān)聽器配置

 
    listener.SessionListener 

Servlet配置
基本配置

 
snoop 
SnoopServlet 
 
 
snoop 
/snoop 
 
高級配置
    
       snoop 
       SnoopServlet 
        
           foo 
           bar 
        
        
           Security role for anonymous access 
           tomcat 
        
    
    
       snoop 
       /snoop 
    
元素說明 
 用來聲明一個servlet的數(shù)據(jù),主要有以下子元素: 
 指定servlet的名稱 
 指定servlet的類名稱 
 指定web站臺中的某個JSP網(wǎng)頁的完整路徑 
 用來定義參數(shù),可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數(shù) 
指定當(dāng)Web應(yīng)用啟動時,裝載Servlet的次序。 
當(dāng)值為正數(shù)或零時:Servlet容器先加載數(shù)值小的servlet,再依次加載其他數(shù)值大的servlet. 
當(dāng)值為負(fù)或未定義:Servlet容器將在Web客戶首次訪問這個servlet時加載它 
 用來定義servlet所對應(yīng)的URL,包含兩個子元素 
 指定servlet的名稱 
 指定servlet所對應(yīng)的URL 

會話超時配置(單位為分鐘)

 
120 
 

MIME類型配置

 
htm 
text/html 
 

指定歡迎文件頁配置

 
index.jsp 
index.html 
index.htm 
 

配置錯誤頁面
方法1:通過錯誤碼來配置error-page

 
404 
/NotFound.jsp 
 
上面配置了當(dāng)系統(tǒng)發(fā)生404錯誤時,跳轉(zhuǎn)到錯誤處理頁面NotFound.jsp。 
方法2:通過異常的類型配置error-page 
 
java.lang.NullException 
/error.jsp 
 

上面配置了當(dāng)系統(tǒng)發(fā)生java.lang.NullException(即空指針異常)時,跳轉(zhuǎn)到錯誤處理頁面error.jsp

TLD配置

 
http://jakarta.apache.org/tomcat/debug-taglib 
/WEB-INF/jsp/debug-taglib.tld 
如果MyEclipse一直在報錯,應(yīng)該把 放到 
 
 
    http://jakarta.apache.org/tomcat/debug-taglib 
    /WEB-INF/pager-taglib.tld 
 
 

資源管理對象配置

 
jms/StockQueue 
 

資源工廠配置

 
mail/Session 
javax.mail.Session 
Container 
 
配置數(shù)據(jù)庫連接池就可在此配置: 
 
JNDI JDBC DataSource of shop 
jdbc/sample_db 
javax.sql.DataSource 
Container 
 

安全限制配置

 
Example Security Constraint 
 
    Protected Area 
    /jsp/security/protected/* 
    DELETE 
    GET 
    POST 
    PUT 
 
 
    tomcat 
    role1 
 
 

登陸驗證配置

 
FORM 
Example-Based Authentiation Area 
 
    /jsp/security/protected/login.jsp 
    /jsp/security/protected/error.jsp 
 
 

安全角色:security-role元素給出安全角色的一個列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name子元素中。
分別地聲明角色可使高級IDE處理安全信息更為容易。

 
tomcat 
 

Web環(huán)境參數(shù):env-entry元素聲明Web應(yīng)用的環(huán)境項

 
minExemptions 
1 
java.lang.Integer 
 

EJB 聲明

 
Example EJB reference 
ejb/Account 
Entity 
com.mycompany.mypackage.AccountHome 
com.mycompany.mypackage.Account 
 

本地EJB聲明

 
Example Loacal EJB reference 
ejb/ProcessOrder 
Session 
com.mycompany.mypackage.ProcessOrderHome 
com.mycompany.mypackage.ProcessOrder 
 

配置DWR

 
dwr-invoker 
uk.ltd.getahead.dwr.DWRServlet 
 
 
dwr-invoker 
/dwr/* 
 

4.spring項目中web.xml基礎(chǔ)配置

配置基于servlet 3.1




    demo
    demo
    
    
    
        characterEncodingFilter
        org.springframework.web.filter.CharacterEncodingFilter
        
            encoding
            UTF-8
        
        
            forceEncoding
            true
        
    
    
        characterEncodingFilter
        /*
    
    
    
    
    
        org.springframework.web.context.ContextLoaderListener
    
    
    
    
        contextConfigLocation
        classpath:spring/applicationContext.xml
    
    
    
    
    
        default
        *.css
    
    
        default
        *.swf
    
    
        default
        *.gif
    
    
        default
        *.jpg
    
    
        default
        *.png
    
    
        default
        *.js
    
    
        default
        *.html
    
    
        default
        *.xml
    
    
        default
        *.json
    
    
        default
        *.map
    
    
    
    
        DispatcherServlet
        
        org.springframework.web.servlet.DispatcherServlet
        
        
            contextConfigLocation
            
            
            
            
            
            classpath:spring/dispatcher-servlet.xml
        
        1
        
    
    
        
        
        DispatcherServlet
        
        
        
        /
        
    
    
        
        login.html
    
    
        
        404
        /nopage.html
    
    
        
        java.lang.NullPointerException
        /error.html
    
    
        
        360
    
5.流行的web.xml零配置

servlet3.0+規(guī)范后,允許servlet,filter,listener不必聲明在web.xml中,而是以硬編碼的方式存在,實現(xiàn)容器的零配置。

spring框架提供了一些類如WebApplicationInitializer用來配置web.xml,這意味著我們可以舍棄web.xml,僅僅在主程序代碼中進(jìn)行配置。

spring的“約定大于配置”思想也體現(xiàn)在這里,用java注解來優(yōu)化過去繁雜的xml文件配置,大大提高了開發(fā)者的編程速度和體驗。

現(xiàn)在很流行的spring boot框架,只要幾步就可以搭建一個java web項目,根本無需自己手動配置web.xml,框架已經(jīng)為你提供了足夠多的注解、接口及實現(xiàn)類,讓我們能夠?qū)W⒂趹?yīng)用本身。

有關(guān)spring對web.xml配置的隱藏實現(xiàn)細(xì)節(jié),這里就不詳細(xì)展開了,歡迎關(guān)注我的下一篇博客。

6.參考資料

Apache Tomcat 9 (9.0.0.M26) - Documentation

極客學(xué)院wiki - 《Tomcat 8 權(quán)威指南》

Tomcat啟動時類加載順序

Tomcat web.xml詳解

Web啟動過程及web.xml配置

tomcat下的web.xml和web工程下web.xml的區(qū)別

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

web.xml結(jié)構(gòu)

web.xml格式及其詳解

java : maven web項目中的 web.xml

Spring MVC 配置文件 web.xml文件詳解

漫談Spring的啟動與初始化(一)

SpringMVC4零配置--web.xml

本人知識有限,如文中有錯誤或不妥的地方,歡迎私信或評論

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/67621.html

相關(guān)文章

  • 后臺 - 收藏集 - 掘金

    摘要:探究系統(tǒng)登錄驗證碼的實現(xiàn)后端掘金驗證碼生成類手把手教程后端博客系統(tǒng)第一章掘金轉(zhuǎn)眼間時間就從月份到現(xiàn)在的十一月份了。提供了與標(biāo)準(zhǔn)不同的工作方式我的后端書架后端掘金我的后端書架月前本書架主要針對后端開發(fā)與架構(gòu)。 Spring Boot干貨系列總綱 | 掘金技術(shù)征文 - 掘金原本地址:Spring Boot干貨系列總綱博客地址:http://tengj.top/ 前言 博主16年認(rèn)識Spin...

    CrazyCodes 評論0 收藏0
  • 關(guān)于地址解析協(xié)議(Address Resolution Protocol)那些事兒

    摘要:當(dāng)兩臺想要互相通信時,只知道對方的地址,是不可以實現(xiàn)的。要想實現(xiàn)通信,必須通過地址,查詢對方的地址,才能夠?qū)崿F(xiàn)通信。地址就是無線或者有線網(wǎng)卡的硬件地址。所謂地址解析就是主機(jī)在發(fā)送幀前將目標(biāo)地址轉(zhuǎn)換成目標(biāo)地址的過程。 當(dāng)兩臺pc想要互相通信時,只知道對方的ip地址,是不可以實現(xiàn)的。要想實現(xiàn)通信,必須通過IP地址,...

    不知名網(wǎng)友 評論0 收藏0
  • 關(guān)于Android消息機(jī)制那些事兒

    摘要:關(guān)于中的消息機(jī)制就進(jìn)行到這里,下一篇將講講中的內(nèi)存泄漏問題以及處理方法。 這幾天對handler有一些研究,寫出來供大家看看。 一、消息機(jī)制詳解 Android程序中,主要是通過消息機(jī)制來推動整個程序運(yùn)作的。而消息機(jī)制中,完成主要功能的主要有以下幾個類: 1、Looper 2、Message、MessageQueue 3、handler 這是最基礎(chǔ)的幾個消息機(jī)制類,下面探究一下這幾個類...

    lushan 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<