-
1 # 暴躁的達瓦里氏
-
2 # 黃金影視音樂
在java的web專案中,我們都能發現一web.xml文件,但是這個文件並不是必須的,web.xml的主要功能是用來初始化專案工程的配置資訊,比如說welcome頁面,filter,servlet等,當你web工程中沒用到這些當然也就不需要這個xml檔案來配置你的apllication
下面簡單介紹web.xml的幾個功能的配置和作用: 1.context-param容器啟動後建立一個ServletContext(上下文),這個WEB專案所有部分都將共享這個上下文.容器將轉化為鍵值對,並交給ServletContext.
X上面這個context-param的配置主要是區分tomcat的webapp下的不同專案,能夠讓log能將日誌寫到對應專案根目錄下。上面的配置資訊是建立log4j的鍵值對並且建立log4j的監聽。
上面的配置是啟動web的時候初始化spring的配置文件applicationContext.xmlapplicationContext.xml的配置詳見http://blog.sina.cn/dpool/blog/s/blog_6cad92b701019thl.html?vt=4。
2 .配置攔截器dispatcher
以上配置是針對攔截器,可以看到攔截器文件的名字應該叫做dispatcher-servlet.xml,攔截的url請求是以do和aj為結尾。具體的dispatcherservlet.xml的配置請參見:後續會詳細介紹dispatcher-servlet.xml。
3.welcome-file-list
該標籤是為了指定歡迎列表,可以配置多個welcome-file,顯示時候按照順序從第一個開始找起。對於tomcat來說,當你只指定一個web的根名,沒有指定具體頁面,去訪問時一個web時,如果web.xml檔案中配置了歡迎頁,那麼就返回指定的那個頁面作為歡迎頁,如果web.xml中沒指定歡迎頁的情況下,它預設先查詢index.html檔案,如果找到了,就把index.html作為歡迎頁還回給瀏覽器。如果沒找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作為歡迎頁面返回。而如果index.html和index.jsp都沒找到,那此時tomcat就不知道該返回哪個檔案,那麼前端會報錯。
4.過濾器
該過濾器主要是解決前臺JSP頁面和JAVA程式碼中使用了不同的字符集進行編碼的時候出現的表單提交的資料或者上傳/下載中文名稱檔案出現亂碼的問題。encoding用來指定一個具體的字符集 forceEncoding作用很單一,當request中已經被指定了一個字符集的時候是否再將用endcoding對應的字符集設定到request中去。舉個例子來說明,假如forceEncoding=false,當請求被提交之後,過濾器會判斷request.getCharacterEncoding()是否為null,如果是null那麼就會進行request.setCharacterEncoding("UTF-8")的操作,如果不是null那麼過濾器什麼也不會做。
-
3 # Gary2018
從Java EE 6開始, web.xml就不是必須的了,在Spring MVC/Spring Boot中,java config 實現WebApplicationInitializer,然後所有的配置都能用java程式來寫。
-
4 # 視覺前沿
1、原生態寫java web,是必須要一一對應寫到配置檔案的。
2、有三種選擇:
一,自己寫個過濾器,攔截servlet請求並處理也可以。
二,用jsp也可以辦成這事,只不過,是jsp來寫和請求了,jsp和servlet等價,jsp開發效率要高些。
三,用攔截器框架,像Struts、SpringMvc、nutz都有這樣的功能。
舉個例子:
java編寫web應用的時候,當使用servlet 3.0之後,不需要配置web.xml檔案,使用如下註解形式即可
web.xml配置如下web.xml檔案的根元素<web-app>中,都必須標明這個web.xml使用的是哪個模式檔案。
二.標籤元素
<welcome-file>index.jsp</welcome-file>
<welcome-file>index1.jsp</welcome-file>
</welcome-file-list>
上面的例子指定了2個歡迎頁面,顯示時按順序從第一個找起,如果第一個存在,就顯示第一個,後面的不起作用。如果第一個不存在,就找第二個,以此類推。 關於歡迎頁面:訪問一個網站時,預設看到的第一個頁面就叫歡迎頁,一般情況下是由首頁來充當歡迎頁的。一般情況下,我們會在web.xml中指定歡迎頁。但web.xml並不是一個Web的必要檔案,沒有web.xml,網站仍然是可以正常工作的。只不過網站的功能複雜起來後,web.xml的確有非常大用處,所以,預設建立的動態web工程在WEB-INF資料夾下面都有一個web.xml檔案。 對於tomcat來說,當你只指定一個web的根名,沒有指定具體頁面,去訪問時一個web時,如果web.xml檔案中配置了歡迎頁,那麼就返回指定的那個頁面作為歡迎頁,而在文中沒有web.xml檔案,或雖然有web.xml,但web.xml也沒指定歡迎頁的情況下,它預設先查詢index.html檔案,如果找到了,就把index.html作為歡迎頁還回給瀏覽器。如果沒找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作為歡迎頁面返回。而如果index.html和index.jsp都沒找到,又沒有用web.xml檔案指定歡迎頁面,那此時tomcat就不知道該返回哪個檔案了,它就顯示The requested resource (/XXX) is not available(我就出現過這個問題)的頁面。其中XXX表示web的根名。但如果你指定了具體頁面,是可以正常訪問的。
命名與定製URL<servlet>
<servlet-name>servlet1</servlet-name>
<servlet-class>net.test.TestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet1</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
url-pattern的意思是所有的.do檔案都會經過TestServlet處理。
定製初始化引數<servlet> <servlet-name>servlet1</servlet-name> <servlet-class>net.test.TestServlet</servlet-class> <init-param> <param-name>userName</param-name> <param-value>Tommy</param-value> </init-param> <init-param> <param-name>E-mail</param-name> <param-value>[email protected]</param-value> </init-param></servlet>
經過上面的配置,在servlet中能夠呼叫getServletConfig().getInitParameter("param1")獲得引數名對應的值。
//上下文引數:宣告應用範圍內的初始化引數。 <context-param> <param-name>ContextParameter</para-name> <param-value>test</param-value> <description>It is a test parameter.</description> </context-param> //在servlet裡面可以透過getServletContext().getInitParameter("context/param")得到
指定錯誤處理頁面,可以透過“異常型別”或“錯誤碼”來指定錯誤處理頁面。<error-page> <error-code>404</error-code> <location>/error404.jsp</location></error-page>-----------------------------<error-page> <exception-type>java.lang.Exception<exception-type> <location>/exception.jsp<location></error-page><error-page> <exception-type>java.lang.NullException</exception-type> <location>/error.jsp</location> </error-page>
設定過濾器:比如設定一個編碼過濾器,過濾所有資源<filter> <filter-name>XXXCharaSetFilter</filter-name> <filter-class>net.test.CharSetFilter</filter-class></filter><filter-mapping> <filter-name>XXXCharaSetFilter</filter-name> <url-pattern>/*</url-pattern></filter-mapping>
6.設定監聽器
web.xml中的<listener></listener>有什麼用? 沒別的用處!就是配置監聽類的~,它能捕捉到伺服器的啟動和停止! 在啟動和停止觸發裡面的方法做相應的操作! 它必須在web.xml 中配置才能使用! web.xml 中listener元素不是隻能有一個,有多個時按順序執行。
如何在web.xml向listener中傳引數 ?
<listener> <listener-class>監聽器類的完整路徑</listener-class> </listener>
監聽器中不能夠寫初始化引數; 可透過另個的途徑達到初始化引數的效果: 1.寫一個properties檔案,在檔案裡寫好初始化引數值, 2.在監聽器中可以通得到properties檔案中的值(寫在靜態塊中)。
設定會話(Session)過期時間,其中時間以分鐘為單位<session-config> <session-timeout>60</session-timeout></session-config>
除了這些標籤元素之外,還可以往web.xml中新增那些標籤元素呢,那些標籤元素都能起什麼作用呢?我們只要去檢視web.xml的模式檔案就能知道。直接看模式檔案看不懂,可以找一些中文教程來看看。
三.遺留問題
在專案中總會遇到一些關於載入的優先順序問題,近期也同樣遇到過類似的,所以自己查詢資 料總結了下,下面有些是轉載其他人的,畢竟人家寫的不錯,自己也就不重複造輪子了,只 是略加點了自己的修飾。 首先可以肯定的是,載入順序與它們在 web.xml 檔案中的先後順序無關。即不會 因為 filter 寫在 listener 的前面而會先載入 filter。最終得出的結論是:listener -> filter -> servlet 。<session-config></session-config> 如果某個會話在一定時間內未被訪問,伺服器可 以拋棄它以節省記憶體。可透過使用HttpSession的setMaxInactiveInterval方法明確設定單個會話對 象的超時值,或者可利用session-config元素制定預設超時值。<welcome-file-list></welcome-file-list> 指示伺服器在收到引用一個目錄名而不是 檔名的URL時,使用哪個檔案。web.xml中怎麼配置url-pattern? 首先要知道 web.xml 中url-pattern的作用,他是給外部提供的一個訪問DoGetDemo類的介面,你可以自己隨意定義,然後在IE裡面寫入這個配置內容。 可以看我給你寫的一個例子圖片,應該一下就看懂的,用 SimpleHello.java 為例,看圖片,訪問的時候,可以輸入下面的網址 http://192.168.0.67:8888/book/hello 這樣,伺服器就可以透過 <url-pattern>/hello</url-pattern> 找到ch06.SimpleHello類,因此你的<url-pattern></url-pattern> 裡面的內容可以自己定義。然後在應用目錄下訪問這個servlet 。 web.xml中既然有url-pattern為什麼還需要servlet-class呢?url-pattern是表明什麼格式的的url進入這個servlet ,servlet-class 是表明哪個java類來處理這個請求 ,一個請求過來,先到servlet-mapping中去根據請求的url尋找這個url所對應的url-pattern,找到url-pattern後找到了servlet-name, 然後根據servlet-name和servlet中的servlet-name對應找到其所對應的servlet-class,具體的業務邏輯就寫在來servlet-class對應的java類中了!
回覆列表
在java工程中,web.xml用來初始化工程配置資訊,比如說welcome頁面,filter,listener,servlet,servlet-mapping,啟動載入級別等等。
每一個xml檔案都有定義他書寫規範的schema檔案,web.xml所對應的xml Schema檔案中定義了多少種標籤元素,web.xml中就可以出現它所定義的標籤元素,也就具備哪些特定的功能。web.xml的模式檔案是由Sun 公司定義的,每個web.xml檔案的根元素為<web-app>中,必須標明這個web.xml使用的是哪個模式檔案。
web.xml的根元素定義如下所示:
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> </web-app>
下面就來介紹一下web.xml中常用的標籤及其功能1.<description>,<display-name>,<icon>
<description>專案描述</discription> 對專案做出描述.
<display-name>專案名稱</display-name> 定義專案的名稱.
<icon> icon元素包含small-icon和large-icon兩個子元素.用來指定web站臺中小圖示和大圖示的路徑.
<small-icon>/路徑/smallicon.gif</small-icon>small-icon元素應指向web站臺中某個小圖示的路徑,大小為16 X 16 pixel,但是圖象檔案必須為GIF或JPEG格式,副檔名必須為:.gif或 .jpg.
<large-icon>/路徑/largeicon-jpg</large-icon> large-icon元素應指向web站臺中某個大圖表路徑,大小為32 X 32 pixel,但是圖象檔案必須為GIF或JPEG的格式,副檔名必須為; gif 或jpg.
例如:
<display-name>Develop Example</display-name> <description>JSP 2.0 Tech Book"s Examples</description> <icon> <small-icon>/images/small.gif</small-icon> <large-icon>/images/large.gir</large-icon> </icon>
2.<context-param>
<context-param>元素含有一對引數名和引數值,用作應用的servlet上下文初始化引數。引數名在整個Web應用中必須是惟一的。 context-param 元素用來設定web應用的環境引數(context),它包含兩個子元素: param-name和param-value. <param-name>引數名稱</param-name> 設定Context名稱 <param-value>值</param-value> 設定Context名稱的值 </context-param> 例如:<context-param> <param-name>param_name</param-name> <param-value>param_value</param-value> </context-param>
此所設定的引數,在JSP網頁中可以使用下列方法來取得:${initParam.param_name} 若在Servlet可以使用下列方法來獲得: String param_name=getServletContext().getInitParamter("param_name");3.<filter>
filter元素用於指定Web容器中的過濾器。
在請求和響應物件被servlet處理之前或之後,可以使用過濾器對這兩個物件進行操作。
利用下一節介紹 的filter-mapping元素,過濾器被對映到一個servlet或一個URL模式。
這個過濾器的filter元素和filter-mapping 元素必須具有相同的名稱。
filter元素用來宣告filter的相關設定.filter元素除了下面介紹的的子元素之外,還包括之前介紹過的<icon>,<display-name>,<description>,<init-param>,其用途一樣. 下面介紹filter-name,filter-class和init-param元素 init-param元素與context-param 元素具有相同的元素描述符。 filter-name元素用來定義過濾器的名稱,該名稱在整個應用中都必須是惟一的。 filter-class元素指定過濾 器類的完全限定的名稱。 <filter-name>Filter的名稱</filter-name> 定義Filter的名稱. <filter-class>Filter的類名稱</filter-class> 定義Filter的類名稱.例如:com.foo.hello 例如:<filter> <filter-name>setCharacterEncoding</filter-name> <filter-class>coreservlet.javaworld.CH11.SetCharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>GB2312</param-value> </init-param> </filter>
4.<filter-mapping>
filter-mapping元素用來宣告Web應用中的過濾器對映。過濾器可被對映到一個servlet或一個URL模式。將過濾器對映到一個 servlet中會造成過濾器作用於servlet上。將過濾器對映到一個URL模式中則可以將過濾器應用於任何資源,只要該資源的URL與URL模式匹配。過濾是按照部署描述符的filter-mapping元素出現的順序執行的。
filter-mapping 元素的兩個主要子元素filter-name和url-pattern.用來定義Filter所對應的URL。還有servlet-name和dispatcher子元素,不是很常用。
<filter-name>Filter的名稱</filter-name> 定義Filter的名稱.
<url-pattern>URL</url-pattern> Filter所對應的RUL.例如:<url-pattern>/Filter/Hello</url-pattern> <servlet-name>Servlet的名稱<servlet-name> 定義servlet的名稱. <dispatcher>REQUEST|INCLUDE|FORWARD|ERROR</disaptcher> 設定Filter對應的請求方式,有RQUEST,INCLUDE,FORWAR,ERROR四種,預設為REQUEST.
例如:
<filter-mapping> <filter-name>GZIPEncoding</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
完整的filter配置例子如下:
<filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
5.<servlet>
在web.xml中完成的一個最常見的任務是對servlet或JSP頁面給出名稱和定製的URL。用servlet元素分配名稱,使用servlet-mapping元素將定製的URL與剛分配的名稱相關聯。
例如:<servlet> <servlet-name>Test</servlet-name> <servlet-class>com.moreservlets.TestServlet</servlet-class> </servlet>
這表示位於WEB-INF/classes/com/moreservlets/TestServlet的servlet已經得到了註冊名Test。6.<servlet-mapping>
servlet-mapping元素包含兩個子元素servlet-name和url-pattern.用來定義servlet所對應URL. <servlet-name>Servlet的名稱</servlet-name> 定義Servlet的名稱. <url-pattern>Servlet URL</url-pattern> 定義Servlet所對應的RUL.例如:<url-pattern>/Servlet/Hello</url-pattern>例如:<servlet-mapping> <servlet-name>LoginChecker</servlet-name> <url-pattern>/LoginChecker</url-pattern> </servlet-mapping>
在位址列中輸入http://localhost:8080/web-App/aaa/xxx就可以訪問了。7.<listener>
listener元素用來註冊一個監聽器類,可以在Web應用中包含該類。使用listener元素,可以收到事件什麼時候發生以及用什麼作為響應的通知。 listener元素用來定義Listener介面,它的主要子元素為<listener-class> <listen-class>Listener的類名稱</listener-class> 定義Listener的類名稱.例如: com.foo.hello 例如:<listener> <listener-class>com.foo.hello</listener-class> </listener>
8.<session-cofing>
session-config包含一個子元素session-timeout.定義web應用中的session引數. <session-timeout>分鐘</session-timeout> 定義這個web應用所有session的有效期限.單位為分鐘. 例如:<session-config> <session-timeout>20</session-timeout> </session-config>
9.<mime-mapping>
mime-mapping包含兩個子元素extension和mime-type.定義某一個副檔名和某一MIME Type做對映. <extension>副檔名名稱</extension> 副檔名稱 <mime-type>MIME格式</mime-type> MIME格式. 例如:<mime-mapping> <extension>doc</extension> <mime-type>application/vnd.ms-word</mime-type> </mime-mapping> <mime-mapping> <extension>xls</extension> <mime-type>application/vnd.ms-excel</mime-type> </mime-mapping> <mime-mapping> <extension>ppt</extesnion> <mime-type>application/vnd.ms-powerpoint</mime-type> </mime-mapping>
10.<welcome-file-list>
welcome-file-list包含一個子元素welcome-file.用來定義首頁列單. <welcome-file>用來指定首頁檔名稱</welcome-flie> welcome-file用來指定首頁檔名稱.我們可以用<welcome-file>指定幾個首頁,而伺服器會依照設定的順序來找首頁. 例如:<welcome-file-list> <welcome-file>index.jsp</welcome-file> <welcome-file>index.htm</welcome-file> </welcome-file-list>
11.<error-page>
error-page元素包含三個子元素error-code,exception-type和location. 將錯誤程式碼(Error Code)或異常(Exception)的種類對應到web應用資源路徑. <error-code>錯誤程式碼</error-code> HTTP Error code,例如: 404 <exception-type>Exception</exception-type> 一個完整名稱的Java異常型別 <location>/路徑</location> 在web應用內的相關資源路徑 例如:<error-page> <error-code>404</error-code> <location>/error404.jsp</location> </error-page> <error-page> <exception-type>java.lang.Exception</exception-type> <location>/except.jsp</location> </error-page>
12.<jsp-config>
jsp-config元素主要用來設定JSP的相關配置,<jsp:config>包括<taglib>和<jsp-property-group>兩個子元素.其中<taglib>元素在JSP 1.2時就已經存在了;而<jsp-property-group>是JSP 2.0新增的元素. <taglib> taglib元素包含兩個子元素taglib-uri和taglib-location.用來設定JSP網頁用到的Tag Library路徑. <taglib-uri>URI</taglib-uri> taglib-uri定義TLD檔案的URI,JSP網頁的taglib指令可以經由這個URI存取到TLD檔案. <taglib-location>/WEB-INF/lib/xxx.tld</taglib-laction> TLD檔案對應Web應用的存放位置. <jsp-property-group> jsp-property-group元素包含8個元素,分別為: <description>Description</descrition> 此設定的說明 <display-name>Name</display-name> 此設定的名稱 <url-pattern>URL</url-pattern> 設定值所影響的範圍,如:/CH2 或者/*.jsp <el-ignored>true|false</el-ignored> 若為true,表示不支援EL語法. <scripting-invalid>true|false</scripting-invalid> 若為true表示不支援<%scription%>語法. <page-encoding>encoding</page-encoding> 設定JSP網頁的編碼 <include-prelude>.jspf</include-prelude> 設定JSP網頁的抬頭,副檔名為.jspf <include-coda>.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> <uri-pattern>/*</uri-pattern> <el-ignored>true</el-ignored> <page-encoding>GB2312</page-encoding> <scripting-inivalid>true</scripting-inivalid> ............ </jsp-property-group></jsp-config>
12.<resource-ref>
resource-ref元素包括五個子元素description,res-ref-name,res-type,res-auth,res-sharing-scope.利用JNDI取得應用可利用資源. <description>說明</description> 資源說明 <rec-ref-name>資源名稱</rec-ref-name> 資源名稱 <res-type>資源種類</res-type> 資源種類 <res-auth>Application|Container</res-auth> 資源由Application或Container來許可 <res-sharing-scope>Shareable|Unshareable</res-sharing-scope> 資源是否可以共享.預設值為 Shareable例如:<resource-ref> <description>JNDI JDBC DataSource of JSPBook</description> <res-ref-name>jdbc/sample_db</res-ref-name> <res-type>javax.sql.DataSoruce</res-type> <res-auth>Container</res-auth> </resource-ref>