用web.xml控制Web应用的行为(5)-2

来源:互联网 发布:电子书阅读软件哪个好 编辑:程序博客网 时间:2024/06/06 01:34
用web.xml控制Web应用的行为(5)-2
2008-06-23 15:28
自动给予名为mom.jpg的文件一个image/jpeg的MIME类型。但是,假如你的Web应用具有几个不寻常的文件,你希望保证它们在发送到客户 机时分配为某种MIME类型。mime-mapping元素(具有extension和mime-type子元素)可提供这种保证。例如,下面的代码指示服务器将application/x-fubar的MIME类型分配给所有以.foo结尾的文件。 
<mime-mapping> 
<extension>foo</extension> 
<mime-type>application/x-fubar</mime-type> 
</mime-mapping> 
或许,你的Web应用希望重载(override)标准的映射。例如,下面的代码将告诉服务器在发送到客户机时指定.ps文件作为纯文本(text/plain)而不是作为PostScript(application/postscript)。 
<mime-mapping> 
<extension>ps</extension> 
<mime-type>application/postscript</mime-type> 
</mime-mapping> 

13 定位TLD

JSP taglib元素具有一个必要的uri属性,它给出一个TLD(Tag Library Descriptor)文件相对于Web应用的根的位置。TLD文件的实际名称在发布新的标签库版本时可能会改变,但我们希望避免更改所有现有JSP页 面。此外,可能还希望使用保持taglib元素的简练性的一个简短的uri。这就是部署描述符文件的taglib元素派用场的所在了。Taglib包含两 个子元素:taglib-uri和taglib-location。taglib-uri元素应该与用于JSP taglib元素的uri属性的东西相匹配。Taglib-location元素给出TLD文件的实际位置。例如,假如你将文件chart-tags- 1.3beta.tld放在WebApp/WEB-INF/tlds中。现在,假如web.xml在web-app元素内包含下列内容。 
<taglib> 
<taglib-uri>/charts.tld</taglib-uri> 
<taglib-location> 
/WEB-INF/tlds/chart-tags-1.3beta.tld 
</taglib-location> 
</taglib> 
给出这个说明后,JSP页面可通过下面的简化形式使用标签库。 
<%@ taglib uri="/charts.tld" prefix="somePrefix" %>

14 指定应用事件监听程序

应用事件监听器程序是建立或修改servlet环境或会话对象时通知的类。它们是servlet规范的版本2.3中的新内容。这里只简单地说明用来向Web应用注册一个监听程序的web.xml的用法。 
注册一个监听程序涉及在web.xml的web-app元素内放置一个listener元素。在listener元素内,listener-class元素列出监听程序的完整的限定类名,如下所示: 
<listener> 
<listener-class>package.ListenerClass</listener-class> 
</listener> 
虽然listener元素的结构很简单,但请不要忘记,必须正确地给出web-app元素内的子元素的次序。listener元素位于所有的 servlet元素之前以及所有filter-mapping元素之后。此外,因为应用生存期监听程序是serlvet规范的2.3版本中的新内容,所以 必须使用web.xml DTD的2.3版本,而不是2.2版本。 
例如,程序清单5-20给出一个名为ContextReporter的简单的监听程序,只要Web应用的Servlet-Context建立(如装载Web应用)或消除(如服务器关闭)时,它就在标准输出上显示一条消息。程序清单5-21给出此监听程序注册所需要的web.xml文件的一部分。

程序清单5-20 ContextReporterjava 
package moreservlets;

import javax.servlet.*; 
import java.util.*;

/** Simple listener that prints a report on the standard output 
* when the ServletContext is created or destroyed. 
* <P> 
* Taken from More Servlets and JavaServer Pages 
* from Prentice Hall and Sun Microsystems Press, 
* http://www.moreservlets.com/. 
* © 2002 Marty Hall; may be freely used or adapted. 
*/

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元素相同的属性并以相同的方式使用。
原创粉丝点击