Java之旅--Web.xml解析,java之旅--web.xml

來源:互聯網
上載者:User

Java之旅--Web.xml解析,java之旅--web.xml


Windows的IIS,是用UI介面進行網站的配置;Linux下面的幾乎所有系統,都是使用設定檔來進行配置,Java容器(JBoss/Tomcat/Jetty/WebSphere/WebLogic等等)也不例外,它們使用一個部署在WEB-INFO目錄下面的web.xml來作為網站設定檔。

本文參考互連網文章,學習並記錄web.xml的載入順序及配置詳解。


web.xml載入順序


應用伺服器啟動時web.xml的載入過程,和這些節點在xml檔案中的前後順序沒有關係,不過有些應用伺服器,比如WebSphere,就嚴格要求web.xml的節點順序,否則部署不成功,所以最好還是按照web.xml的標準格式寫,即:context-param --> listener --> filter --> servlet 。

對於某類配置節而言,與它們出現的順序是有關的。

以 filter 為例,web.xml 中當然可以定義多個 filter,與 filter 相關的一個配置節是 filter-mapping,這裡一定要注意,對於擁有相同 filter-name 的 filter 和 filter-mapping 配置節而言,filter-mapping 必須出現在 filter 之後,否則當解析到 filter-mapping 時,它所對應的 filter-name 還未定義。

web 容器啟動時初始化每個 filter 時,是按照 filter 配置節出現的順序來初始化的,當請求資源匹配多個 filter-mapping 時,filter 攔截資源是按照 filter-mapping 配置節出現的順序來依次調用 doFilter() 方法的。 

servlet 同 filter 類似,此處不再贅述。

比如filter 需要用到 bean ,但載入順序是: 先載入filter 後載入spring,則filter中初始化操作中的bean為null;所以,如果過濾器中要使用到 bean,可以將spring 的載入 改成 Listener的方式:

 <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>


web.xml節點解析
<context-param />


用來設定web網站的環境參數

它包含兩個子項目:<param-name></param-name> 用來指定參數的名稱;<param-value></param-value> 用來設定參數值

在此設定的參數,可以在servlet中用 getServletContext().getInitParameter("my_param") 來取得

例子:

<context-param><param-name>webAppRootKey</param-name><param-value>privilege.root</param-value></context-param><context-param><param-name>contextConfigLocation</param-name><param-value>classpath*:/applicationContext*.xmlclasspath*:/cas-authority.xml</param-value></context-param><context-param><param-name>log4jConfigLocation</param-name><param-value>/WEB-INF/classes/log4j.xml</param-value></context-param><context-param>  <param-name>spring.profiles.default</param-name>  <param-value>dev</param-value>  </context-param> 


<listener />


用來設定Listener介面

它的主要子項目為 <listener-class></listener-class> ,用來定義Listener的類名稱

例子:

 <listener>     <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

<filter />


用來聲明filter的相關設定

<filter-name></filter-name> 指定filter的名字

<filter-class></filter-class> 用來定義filter的類的名稱

<init-param></init-param> 用來定義參數,它有兩個子項目: <param-name></param-name> 用來指定參數的名稱, <param-value></param-value> 用來設定參數值

與<filter></filter>一起使用的是

<filter-mapping></filter-mapping> 用來定義filter所對應的URL,包含兩個子項目:

<filter-name></filter-name> 指定filter的名稱

<url-pattern></url-pattern> 指定filter所對應的URL

 例子:

<!-- 解決中文亂碼問題 --><filter><filter-name>encodingFilter</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>encodingFilter</filter-name><url-pattern>*.do</url-pattern></filter-mapping>


<servlet /> 


用來聲明一個servlet的資料,主要有以下子項目:

<servlet-name></servlet-name> 指定servlet的名稱

<servlet-class></servlet-class> 指定servlet的類名稱

<jsp-file></jsp-file> 指定web月台中的某個JSP網頁的完整路徑

<init-param></init-param> 用來定義參數

與<servlet></servlet>一起使用的是

<servlet-mapping></servlet-mapping> 用來定義servlet所對應的URL,包含兩個子項目:

<servlet-name></servlet-name> 指定servlet的名稱

<url-pattern></url-pattern> 指定servlet所對應的URL

例子:

<servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>*.do</url-pattern></servlet-mapping><!-- 用dubbo提供hessian服務 --><servlet>        <servlet-name>dubbo</servlet-name>        <servlet-class>com.alibaba.dubbo.remoting.http.servlet.DispatcherServlet</servlet-class>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>dubbo</servlet-name>        <url-pattern>/hessian/*</url-pattern>    </servlet-mapping>


基本節點


1、<description/> 是對網站的描述

例子:<description>傳道、授業、解惑</description> 


2、<display-name/> 定義網站的名稱

例子:<display-name>我的網站</display-name>


3、<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。

例子:

<icon> 

 <small-icon>/images/small.gif</small-icon> 

 <large-icon>/images/large.gir</large-icon> 

</icon>


4、 <distributable/> 是指定該網站是否可分散式處理


5、 <session-config/> 用來定義web月台中的session參數

包含一個子項目:

<session-timeout></session-timeout> 用來定義這個web月台所有session的有效期間限,單位為 分鐘


6、 <mime-mapping /> 定義某一個副檔名和某一個MIME Type做對應,它包含兩個子項目:

<extension></extension> 副檔名的名稱

<mime-type></mime-type> MIME格式

例子:

<mime-mapping><extension>csv</extension><mime-type>application/octet-stream</mime-type></mime-mapping>

7、 <error-page>

通過錯誤碼來配置error-page

 <error-page>     <error-code>404</error-code>     <location>/message.jsp</location> </error-page>

通過異常類來配置error-page

   <error-page>           <exception-type>java.lang.NullException</exception-type>           <location>/error.jsp</location>       </error-page>  

8、 <welcome-file-list/>

<welcome-file-list><welcome-file>index.html</welcome-file><welcome-file>index.jsp</welcome-file></welcome-file-list>

9、 <resource-ref></resource-ref> 定義利用JNDI取得月台可利用的資源

有五個子項目:

<description></description> 資源說明

<rec-ref-name></rec-ref-name> 資源名稱

<res-type></res-type> 資源種類

<res-auth></res-auth> 資源經由Application或Container來許可

<res-sharing-scope></res-sharing-scope> 資源是否可以共用,有Shareable和Unshareable兩個值,預設為Shareable

比如,設定資料庫串連池就可在此配置

<resource-ref>

<description>JNDI JDBC DataSource of shop</description>

<res-ref-name>jdbc/sample_db</res-ref-name>

<res-type>javax.sql.DataSource</res-type>

<res-auth>Container</res-auth>

</resource-ref>


怎用java在webxml檔案中取值

如果是要取出全部的值.建議解析WEB.XML然後取值.如果是取某個特定的值可以用下面的:
web.xml裡面可以定義兩種參數:
(1)application範圍內的參數,存放在servletcontext中,在web.xml中配置如下:xml 代碼
<context-param>
<param-name>context/param</param-name>
<param-value>avalible during application</param-value>
</context-param> (2)servlet範圍內的參數,只能在servlet的init()方法中取得,在web.xml中配置如下:xml 代碼
<servlet>
<servlet-name>MainServlet</servlet-name>
<servlet-class>com.wes.controller.MainServlet</servlet-class>
<init-param>
<param-name>param1</param-name>
<param-value>avalible in servlet init()</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet> 在servlet中可以通過代碼分別取用:java 代碼
package com.test;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

public class TestServlet extends HttpServlet ...{

public TestServlet() ...{
super();
}
public void init() throws ServletException ...{
System.out.println("下面的兩個參數param1是在servlet中存放的");
System.out.println(this.getInitParameter("param1"));
System.out.println("下面的參數是存放在servletcontext中的");
System.out.println(getServletContext().getInitParameter("context/param"));
} ......餘下全文>>
 
java webxml

1. 啟動一個WEB項目的時候,容器(如:Tomcat)會去讀它的設定檔web.xml.讀兩個節點: <listener></listener> 和 <context-param></context-param>
2.緊接著,容器建立一個ServletContext(上下文),這個WEB項目所有部分都將共用這個上下文.
3.容器將<context-param></context-param>轉化為索引值對,並交給ServletContext.
4.容器建立<listener></listener>中的類執行個體,即建立監聽.
5.在監聽中會有contextInitialized(ServletContextEvent args)初始化方法,在這個方法中獲得ServletContext = ServletContextEvent.getServletContext();context-param的值 = ServletContext.getInitParameter("context-param的鍵");
6.得到這個context-param的值之後,你就可以做一些操作了.注意,這個時候你的WEB項目還沒有完全啟動完成.這個動作會比所有的Servlet都要早.換句話說,這個時候,你對<context-param>中的索引值做的操作,將在你的WEB項目完全啟動之前被執行.
7.舉例.你可能想在項目啟動之前就開啟資料庫.那麼這裡就可以在<context-param>中設定資料庫的串連方式,在監聽類中初始化資料庫的串連.
8.這個監聽是自己寫的一個
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.