天天看點

web.xml配置的詳細說明

 定義頭和根元素

部署描述符檔案就像所有XML檔案一樣,必須以一個XML頭開始。這個頭聲明可以使用的XML版本并給出檔案的字元編碼。

DOCYTPE聲明必須立即出現在此頭之後。這個聲明告訴伺服器适用的servlet規範的版本(如2.2或2.3)并指定管理此檔案其餘部分内容的文法的DTD(Document Type Definition,文檔類型定義)。

所有部署描述符檔案的頂層(根)元素為web-app。請注意,XML元素不像HTML,他們是大小寫敏感的。是以,web-App和WEB-APP都是不合法的,web-app必須用小寫。

2 部署描述符檔案内的元素次序

XML 元素不僅是大小寫敏感的,而且它們還對出現在其他元素中的次序敏感。例如,XML頭必須是檔案中的第一項,DOCTYPE聲明必須是第二項,而web- app元素必須是第三項。在web-app元素内,元素的次序也很重要。伺服器不一定強制要求這種次序,但它們允許(實際上有些伺服器就是這樣做的)完全拒絕執行含有次序不正确的元素的Web應用。這表示使用非标準元素次序的web.xml檔案是不可移植的。

下面的清單給出了所有可直接出現在web-app元素内的合法元素所必需的次序。例如,此清單說明servlet元素必須出現在所有servlet-mapping元素之前。請注意,所有這些元素都是可選的。是以,可以省略掉某一進制素,但不能把它放于不正确的位置。

l icon icon元素指出IDE和GUI工具用來表示Web應用的一個和兩個圖像檔案的位置。

l display-name display-name元素提供GUI工具可能會用來标記這個特定的Web應用的一個名稱。

l description description元素給出與此有關的說明性文本。

l context-param context-param元素聲明應用範圍内的初始化參數。

l filter 過濾器元素将一個名字與一個實作javax.servlet.Filter接口的類相關聯。

l filter-mapping 一旦命名了一個過濾器,就要利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。

l listener servlet API的版本2.3增加了對事件監聽程式的支援,事件監聽程式在建立、修改和删除會話或servlet環境時得到通知。Listener元素指出事件監聽程式類。

l servlet 在向servlet或JSP頁面制定初始化參數或定制URL時,必須首先命名servlet或JSP頁面。Servlet元素就是用來完成此項任務的。

l servlet-mapping 伺服器一般為servlet提供一個預設的URL: http://host/webAppPrefix/servlet/ServletName 。但是,常常會更改這個URL,以便servlet可以通路初始化參數或更容易地處理相對URL。在更改預設URL時,使用servlet-mapping元素。

l session-config 如果某個會話在一定時間内未被通路,伺服器可以抛棄它以節省記憶體。可通過使用HttpSession的setMaxInactiveInterval方法明确設定單個會話對象的逾時值,或者可利用session-config元素制定預設逾時值。

l mime-mapping 如果Web應用具有想到特殊的檔案,希望能保證給他們配置設定特定的MIME類型,則mime-mapping元素提供這種保證。

l welcom-file-list welcome-file-list元素訓示伺服器在收到引用一個目錄名而不是檔案名的URL時,使用哪個檔案。

l error-page error-page元素使得在傳回特定HTTP狀态代碼時,或者特定類型的異常被抛出時,能夠制定将要顯示的頁面。

l taglib taglib元素對标記庫描述符檔案(Tag Libraryu Descriptor file)指定别名。此功能使你能夠更改TLD檔案的位置,而不用編輯使用這些檔案的JSP頁面。

l resource-env-ref resource-env-ref元素聲明與資源相關的一個管理對象。

l resource-ref resource-ref元素聲明一個資源工廠使用的外部資源。

l security-constraint security-constraint元素制定應該保護的URL。它與login-config元素聯合使用

l login-config 用login-config元素來指定伺服器應該怎樣給試圖通路受保護頁面的使用者授權。它與sercurity-constraint元素聯合使用。

l security-role security-role元素給出安全角色的一個清單,這些角色将出現在servlet元素内的security-role-ref元素的role-name子元素中。分别地聲明角色可使進階IDE處理安全資訊更為容易。

l env-entry env-entry元素聲明Web應用的環境項。

l ejb-ref ejb-ref元素聲明一個EJB的主目錄的引用。

l ejb-local-ref ejb-local-ref元素聲明一個EJB的本地主目錄的應用。

3 配置設定名稱和定制的UL

在web.xml中完成的一個最常見的任務是對servlet或JSP頁面給出名稱和定制的URL。用servlet元素配置設定名稱,使用servlet-mapping元素将定制的URL與剛配置設定的名稱相關聯。

3.1 配置設定名稱

為了提供初始化參數,對servlet或JSP頁面定義一個定制URL或配置設定一個安全角色,必須首先給servlet或JSP頁面一個名稱。可通過 servlet元素配置設定一個名稱。最常見的格式包括servlet-name和servlet-class子元素(在web-app元素内),如下所示:

<servlet>

<servlet-name>Test</servlet-name>

<servlet-class>moreservlets.TestServlet</servlet-class>

</servlet>

這表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已經得到了注冊名Test。給 servlet一個名稱具有兩個主要的含義。首先,初始化參數、定制的URL模式以及其他定制通過此注冊名而不是類名引用此servlet。其次,可在 URL而不是類名中使用此名稱。是以,利用剛才給出的定義,URL http://host/webAppPrefix/servlet/Test 可用于 http://host/webAppPrefix/servlet/moreservlets.TestServlet 的場所。

請記住:XML元素不僅是大小寫敏感的,而且定義它們的次序也很重要。例如,web-app元素内所有servlet元素必須位于所有servlet- mapping元素(下一小節介紹)之前,而且還要位于5.6節和5.11節讨論的與過濾器或文檔相關的元素(如果有的話)之前。類似地,servlet 的servlet-name子元素也必須出現在servlet-class之前。5.2節"部署描述符檔案内的元素次序"将詳細介紹這種必需的次序。

例如,程式清單5-1給出了一個名為TestServlet的簡單servlet,它駐留在moreservlets程式包中。因為此servlet是紮根在一個名為deployDemo的目錄中的Web應用的組成部分,是以TestServlet.class放在deployDemo/WEB- INF/classes/moreservlets中。程式清單5-2給出将放置在deployDemo/WEB-INF/内的web.xml檔案的一部分。此web.xml檔案使用servlet-name和servlet-class元素将名稱Test與TestServlet.class相關聯。圖 5-1和圖5-2分别顯示利用預設URL和注冊名調用TestServlet時的結果。

程式清單5-1 TestServlet.java

package moreservlets;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class TestServlet extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String uri = request.getRequestURI();

out.println(ServletUtilities.headWithTitle("Test Servlet") +

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H2>URI: " + uri + "</H2>\n" +

"</BODY></HTML>");

}

}

程式清單5-2 web.xml(說明servlet名稱的摘錄)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

" http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>

<!-- … -->

<servlet>

<servlet-name>Test</servlet-name>

<servlet-class>moreservlets.TestServlet</servlet-class>

</servlet>

<!-- … -->

</web-app>

3.2 定義定制的URL

大多數伺服器具有一個預設的serlvet URL:

http://host/webAppPrefix/servlet/packageName.ServletName 。雖然在開發中使用這個URL很友善,但是我們常常會希望另一個URL用于部署。例如,可能會需要一個出現在Web應用頂層的URL(如,http: //host/webAppPrefix/Anyname),并且在此URL中沒有servlet項。位于頂層的URL簡化了相對URL的使用。此外,對許多開發人員來說,頂層URL看上去比更長更麻煩的預設URL更簡短。

事實上,有時需要使用定制的URL。比如,你可能想關閉預設URL映射,以便更好地強制實施安全限制或防止使用者意外地通路無初始化參數的servlet。如果你禁止了預設的URL,那麼你怎樣通路servlet呢?這時隻有使用定制的URL了。

為了配置設定一個定制的URL,可使用servlet-mapping元素及其servlet-name和url-pattern子元素。Servlet- name元素提供了一個任意名稱,可利用此名稱引用相應的servlet;url-pattern描述了相對于Web應用的根目錄的URL。url- pattern元素的值必須以斜杠(/)起始。

下面給出一個簡單的web.xml摘錄,它允許使用URL http://host/webAppPrefix/UrlTest 而不是 http://host/webAppPrefix/servlet/Test 或

http: //host/webAppPrefix/servlet/moreservlets.TestServlet。請注意,仍然需要XML頭、 DOCTYPE聲明以及web-app封閉元素。此外,可回憶一下,XML元素出現地次序不是随意的。特别是,需要把所有servlet元素放在所有 servlet-mapping元素之前。

<servlet>

<servlet-name>Test</servlet-name>

<servlet-class>moreservlets.TestServlet</servlet-class>

</servlet>

<!-- ... -->

<servlet-mapping>

<servlet-name>Test</servlet-name>

<url-pattern>/UrlTest</url-pattern>

</servlet-mapping>

URL模式還可以包含通配符。例如,下面的小程式訓示伺服器發送所有以Web應用的URL字首開始,以..asp結束的請求到名為BashMS的servlet。

<servlet>

<servlet-name>BashMS</servlet-name>

<servlet-class>msUtils.ASPTranslator</servlet-class>

</servlet>

<!-- ... -->

<servlet-mapping>

<servlet-name>BashMS</servlet-name>

<url-pattern>

public class SorryServlet extends HttpServlet {

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String title = "Invoker Servlet Disabled.";

out.println(ServletUtilities.headWithTitle(title) +

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H2>" + title + "</H2>\n" +

"Sorry, access to servlets by means of\n" +

"URLs that begin with\n" +

" http://host/webAppPrefix/servlet/ \n" +

"has been disabled.\n" +

"</BODY></HTML>");

}

public void doPost(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

doGet(request, response);

}

}

4.2 全局禁止激活器:Tomcat

Tomcat 4中用來關閉預設URL的方法與Tomcat 3中所用的很不相同。下面介紹這兩種方法:

1.禁止激活器: Tomcat 4

Tomcat 4用與前面相同的方法關閉激活器servlet,即利用web.xml中的url-mapping元素進行關閉。不同之處在于Tomcat使用了放在 install_dir/conf中的一個伺服器專用的全局web.xml檔案,而前面使用的是存放在每個Web應用的WEB-INF目錄中的标準 web.xml檔案。

是以,為了在Tomcat 4中關閉激活器servlet,隻需在install_dir/conf/web.xml中簡單地注釋出/servlet

public class InitServlet extends HttpServlet {

private String firstName, emailAddress;

public void init() {

ServletConfig config = getServletConfig();

firstName = config.getInitParameter("firstName");

emailAddress = config.getInitParameter("emailAddress");

}

public void doGet(HttpServletRequest request,

HttpServletResponse response)

throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String uri = request.getRequestURI();

out.println(ServletUtilities.headWithTitle("Init Servlet") +

"<BODY BGCOLOR=\"#FDF5E6\">\n" +

"<H2>Init Parameters:</H2>\n" +

"<UL>\n" +

"<LI>First name: " + firstName + "\n" +

"<LI>Email address: " + emailAddress + "\n" +

"</UL>\n" +

"</BODY></HTML>");

}

}

程式清單5-8 web.xml(說明初始化參數的摘錄)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

" http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>

<!-- ... -->

<servlet>

<servlet-name>InitTest</servlet-name>

<servlet-class>moreservlets.InitServlet</servlet-class>

<init-param>

<param-name>firstName</param-name>

<param-value>Larry</param-value>

</init-param>

<init-param>

<param-name>emailAddress</param-name>

<param-value> [email protected] </param-value>

</init-param>

</servlet>

<!-- ... -->

</web-app>

5.2 配置設定JSP初始化參數

給JSP頁面提供初始化參數在三個方面不同于給servlet提供初始化參數。

1)使用jsp-file而不是servlet-class。是以,WEB-INF/web.xml檔案的servlet元素如下所示:

<servlet>

<servlet-name>PageName</servlet-name>

<jsp-file>/RealPage.jsp</jsp-file>

<init-param>

<param-name>...</param-name>

<param-value>...</param-value>

</init-param>

...

</servlet>

2) 幾乎總是配置設定一個明确的URL模式。對servlet,一般相應地使用以 http://host/webAppPrefix/servlet/ 開始的預設URL。隻需記住,使用注冊名而不是原名稱即可。這對于JSP頁面在技術上也是合法的。例如,在上面給出的例子中,可用URL http://host/webAppPrefix/servlet/PageName 通路RealPage.jsp的對初始化參數具有通路權的版本。但在用于JSP頁面時,許多使用者似乎不喜歡應用正常的servlet的URL。此外,如果 JSP頁面位于伺服器為其提供了目錄清單的目錄中(如,一個既沒有index.html也沒有index.jsp檔案的目錄),則使用者可能會連接配接到此 JSP頁面,單擊它,進而意外地激活未初始化的頁面。是以,好的辦法是使用url-pattern(5.3節)将JSP頁面的原URL與注冊的 servlet名相關聯。這樣,客戶機可使用JSP頁面的普通名稱,但仍然激活定制的版本。例如,給定來自項目1的servlet定義,可使用下面的 servlet-mapping定義:

<servlet-mapping>

<servlet-name>PageName</servlet-name>

<url-pattern>/RealPage.jsp</url-pattern>

</servlet-mapping>

3)JSP頁使用jspInit而不是init。自動從JSP頁面建立的servlet或許已經使用了inti方法。是以,使用JSP聲明提供一個init方法是不合法的,必須制定jspInit方法。

為了說明初始化JSP頁面的過程,程式清單5-9給出了一個名為InitPage.jsp的JSP頁面,它包含一個jspInit方法且放置于 deployDemo Web應用層次結構的頂層。一般, http://host/deployDemo/InitPage.jsp 形式的URL将激活此頁面的不具有初始化參數通路權的版本,進而将對firstName和emailAddress變量顯示null。但是, web.xml檔案(程式清單5-10)配置設定了一個注冊名,然後将該注冊名與URL模式/InitPage.jsp相關聯。

程式清單5-9 InitPage.jsp

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">

<HTML>

<HEAD><TITLE>JSP Init Test</TITLE></HEAD>

<BODY BGCOLOR="#FDF5E6">

<H2>Init Parameters:</H2>

<UL>

<LI>First name: <%= firstName %>

<LI>Email address: <%= emailAddress %>

</UL>

</BODY></HTML>

<%!

private String firstName, emailAddress;

public void jspInit() {

ServletConfig config = getServletConfig();

firstName = config.getInitParameter("firstName");

emailAddress = config.getInitParameter("emailAddress");

}

%>

程式清單5-10 web.xml(說明JSP頁面的init參數的摘錄)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

" http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>

<!-- ... -->

<servlet>

<servlet-name>InitPage</servlet-name>

<jsp-file>/InitPage.jsp</jsp-file>

<init-param>

<param-name>firstName</param-name>

<param-value>Bill</param-value>

</init-param>

<init-param>

<param-name>emailAddress</param-name>

<param-value> [email protected] </param-value>

</init-param>

</servlet>

<!-- ... -->

<servlet-mapping>

<servlet-name> InitPage</servlet-name>

<url-pattern>/InitPage.jsp</url-pattern>

</servlet-mapping>

<!-- ... -->

</web-app>

5.3 提供應用範圍内的初始化參數

一般,對單個地servlet或JSP頁面配置設定初始化參數。指定的servlet或JSP頁面利用ServletConfig的getInitParameter方法讀取這些參數。但是,在某些情形下,希望提供可由任意servlet或JSP頁面借助ServletContext的getInitParameter方法讀取的系統範圍内的初始化參數。

可利用context-param元素聲明這些系統範圍内的初始化值。context-param元素應該包含param-name、param-value以及可選的description子元素,如下所示:

<context-param>

<param-name>support-email</param-name>

<param-value> [email protected] </param-value>

</context-param>

可回憶一下,為了保證可移植性,web.xml内的元素必須以正确的次序聲明。但這裡應該注意,context-param元素必須出現任意與文檔有關的元素(icon、display-name或description)之後及filter、filter-mapping、listener或 servlet元素之前。

5.4 在伺服器啟動時裝載servlet

假如servlet或JSP頁面有一個要花很長時間執行的init (servlet)或jspInit(JSP)方法。例如,假如init或jspInit方法從某個資料庫或ResourceBundle查找産量。這種情況下,在第一個客戶機請求時裝載servlet的預設行為将對第一個客戶機産生較長時間的延遲。是以,可利用servlet的load-on- startup元素規定伺服器在第一次啟動時裝載servlet。下面是一個例子。

<servlet>

<servlet-name> … </servlet-name>

<servlet-class> … </servlet-class> <!-- Or jsp-file -->

<load-on-startup/>

</servlet>

可以為此元素體提供一個整數而不是使用一個空的load-on-startup。想法是伺服器應該在裝載較大數目的servlet或JSP頁面之前裝載較少數目的servlet或JSP頁面。例如,下面的servlet項(放置在Web應用的WEB-INF目錄下的web.xml檔案中的web-app元素内)将訓示伺服器首先裝載和初始化SearchServlet,然後裝載和初始化由位于Web應用的result目錄中的index.jsp檔案産生的 servlet。

<servlet>

<servlet-name>Search</servlet-name>

<servlet-class>myPackage.SearchServlet</servlet-class> <!-- Or jsp-file -->

<load-on-startup>1</load-on-startup>

</servlet>

<servlet>

<servlet-name>Results</servlet-name>

<servlet-class>/results/index.jsp</servlet-class> <!-- Or jsp-file -->

<load-on-startup>2</load-on-startup>

</servlet>

6 聲明過濾器

servlet版本2.3引入了過濾器的概念。雖然所有支援servlet API版本2.3的伺服器都支援過濾器,但為了使用與過濾器有關的元素,必須在web.xml中使用版本2.3的DTD。

過濾器可截取和修改進入一個servlet或JSP頁面的請求或從一個servlet或JSP頁面發出的相應。在執行一個servlet或JSP頁面之前,必須執行第一個相關的過濾器的doFilter方法。在該過濾器對其FilterChain對象調用doFilter時,執行鍊中的下一個過濾器。如果沒有其他過濾器,servlet或JSP頁面被執行。過濾器具有對到來的ServletRequest對象的全部通路權,是以,它們可以檢視客戶機名、查找到來的cookie等。為了通路servlet或JSP頁面的輸出,過濾器可将響應對象包裹在一個替身對象(stand-in object)中,比方說把輸出累加到一個緩沖區。在調用FilterChain對象的doFilter方法之後,過濾器可檢查緩沖區,如有必要,就對它進行修改,然後傳送到客戶機。

例如,程式清單5-11帝國難以了一個簡單的過濾器,隻要通路相關的servlet或JSP頁面,它就截取請求并在标準輸出上列印一個報告(開發過程中在桌面系統上運作時,大多數伺服器都可以使用這個過濾器)。

程式清單5-11 ReportFilter.java

package moreservlets;

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

import java.util.*;

public class ReportFilter implements Filter {

public void doFilter(ServletRequest request,

ServletResponse response,

FilterChain chain)

throws ServletException, IOException {

HttpServletRequest req = (HttpServletRequest)request;

System.out.println(req.getRemoteHost() +

" tried to access " +

req.getRequestURL() +

" on " + new Date() + ".");

chain.doFilter(request,response);

}

public void init(FilterConfig config)

throws ServletException {

}

public void destroy() {}

}

一旦建立了一個過濾器,可以在web.xml中利用filter元素以及filter-name(任意名稱)、file-class(完全限定的類名)和(可選的)init-params子元素聲明它。請注意,元素在web.xml的web-app元素中出現的次序不是任意的;允許伺服器(但不是必需的)強制所需的次序,并且實際中有些伺服器也是這樣做的。但這裡要注意,所有filter元素必須出現在任意filter-mapping元素之前, filter-mapping元素又必須出現在所有servlet或servlet-mapping元素之前。

例如,給定上述的ReportFilter類,可在web.xml中作出下面的filter聲明。它把名稱Reporter與實際的類ReportFilter(位于moreservlets程式包中)相關聯。

<filter>

<filter-name>Reporter</filter-name>

<filter-class>moresevlets.ReportFilter</filter-class>

</filter>

一旦命名了一個過濾器,可利用filter-mapping元素把它與一個或多個servlet或JSP頁面相關聯。關于此項工作有兩種選擇。

首先,可使用filter-name和servlet-name子元素把此過濾器與一個特定的servlet名(此servlet名必須稍後在相同的 web.xml檔案中使用servlet元素聲明)關聯。例如,下面的程式片斷訓示系統隻要利用一個定制的URL通路名為SomeServletName 的servlet或JSP頁面,就運作名為Reporter的過濾器。

<filter-mapping>

<filter-name>Reporter</filter-name>

<servlet-name>SomeServletName</servlet-name>

</filter-mapping>

其次,可利用filter-name和url-pattern子元素将過濾器與一組servlet、JSP頁面或靜态内容相關聯。例如,相面的程式片段訓示系統隻要通路Web應用中的任意URL,就運作名為Reporter的過濾器。

<filter-mapping>

<filter-name>Reporter</filter-name>

<url-pattern>

public class ContextReporter implements ServletContextListener {

public void contextInitialized(ServletContextEvent event) {

System.out.println("Context created on " +

new Date() + ".");

}

public void contextDestroyed(ServletContextEvent event) {

System.out.println("Context destroyed on " +

new Date() + ".");

}

}

程式清單5-21 web.xml(聲明一個監聽程式的摘錄)

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE web-app

PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"

" http://java.sun.com/dtd/web-app_2_3.dtd ">

<web-app>

<!-- ... -->

<filter-mapping> … </filter-mapping>

<listener>

<listener-class>package.ListenerClass</listener-class>

</listener>

<servlet> ... </servlet>

<!-- ... -->

</web-app>

15 J2EE元素

本節描述用作J2EE環境組成部分的Web應用的web.xml元素。這裡将提供一個簡明的介紹,詳細内容可以參閱 http://java.sun.com/j2ee/j2ee-1_3-fr-spec.pdf 的Java 2 Plantform Enterprise Edition版本1.3規範的第5章。

l distributable

distributable 元素指出,Web應用是以這樣的方式程式設計的:即,支援叢集的伺服器可安全地在多個伺服器上分布Web應用。例如,一個可分布的應用必須隻使用 Serializable對象作為其HttpSession對象的屬性,而且必須避免用執行個體變量(字段)來實作持續性。distributable元素直接出現在discription元素之後,并且不包含子元素或資料,它隻是一個如下的标志。

<distributable />

l resource-env-ref

resource -env-ref元素聲明一個與某個資源有關的管理對象。此元素由一個可選的description元素、一個resource-env-ref- name元素(一個相對于java:comp/env環境的JNDI名)以及一個resource-env-type元素(指定資源類型的完全限定的類),如下所示:

<resource-env-ref>

<resource-env-ref-name>

jms/StockQueue

</resource-env-ref-name>

<resource-env-ref-type>

javax.jms.Queue

</resource-env-ref-type>

</resource-env-ref>

l env-entry

env -entry元素聲明Web應用的環境項。它由一個可選的description元素、一個env-entry-name元素(一個相對于java: comp/env環境JNDI名)、一個env-entry-value元素(項值)以及一個env-entry-type元素(java.lang程式包中一個類型的完全限定類名,java.lang.Boolean、java.lang.String等)組成。下面是一個例子:

<env-entry>

<env-entry-name>minAmout</env-entry-name>

<env-entry-value>100.00</env-entry-value>

<env-entry-type>minAmout</env-entry-type>

</env-entry>

l ejb-ref

ejb -ref元素聲明對一個EJB的主目錄的應用。它由一個可選的description元素、一個ejb-ref-name元素(相對于java: comp/env的EJB應用)、一個ejb-ref-type元素(bean的類型,Entity或Session)、一個home元素(bean的主目錄接口的完全限定名)、一個remote元素(bean的遠端接口的完全限定名)以及一個可選的ejb-link元素(目前bean連結的另一個 bean的名稱)組成。

l ejb-local-ref

ejb-local-ref元素聲明一個EJB的本地主目錄的引用。除了用local-home代替home外,此元素具有與ejb-ref元素相同的屬性并以相同的方式使用。

17:42 | 固定連結 | 評論 (0) | 引用通告 (0) | 記錄它 | 計算機與 Internet

固定連結 關閉

http://spaces.msn.com/members/tsfy/Blog/cns!1pFtRRZqZXTCdE5YlUjqVIcQ!116.entry

4月14日

給你的session加個監聽器

今天一個學生問我怎麼實作在網頁裡顯示線上使用者的名稱——他已經使用了session,但是無法處理使用者離開的情況,然後導緻線上使用者清單的無限增大。跟他說了自己在application中進行逾時檢查,更新application的時候就比較目前所有清單中的session是否超過自己指定的時間間隔。後來想了想,又給他提了使用給session加監聽器的方法。但是提的時候自己也沒有做過,是以隻是說這種方式很複雜,建議他還是自己進行逾時檢查。剛才又看了看資料,發現實際上給session加監聽器的方式很簡單,不禁覺得自己有點誤人子弟了,現在将方法寫在這,借以告誡自己以後要嚴謹。

首先寫一個SessionBinder類,它實作了HttpSessionBindingListener接口的valueBound方法和valueUnbound方法,示例代碼如下:

public class SessionBinder implements HttpSessionBindingListener {

  public void valueBound(HttpS