Webxml配置详解.docx

上传人:b****8 文档编号:29399190 上传时间:2023-07-23 格式:DOCX 页数:58 大小:47.85KB
下载 相关 举报
Webxml配置详解.docx_第1页
第1页 / 共58页
Webxml配置详解.docx_第2页
第2页 / 共58页
Webxml配置详解.docx_第3页
第3页 / 共58页
Webxml配置详解.docx_第4页
第4页 / 共58页
Webxml配置详解.docx_第5页
第5页 / 共58页
点击查看更多>>
下载资源
资源描述

Webxml配置详解.docx

《Webxml配置详解.docx》由会员分享,可在线阅读,更多相关《Webxml配置详解.docx(58页珍藏版)》请在冰豆网上搜索。

Webxml配置详解.docx

Webxml配置详解

Web.xml配置详解

关键字:

web.xml配置j2ee

1定义头和根元素

  部署描述符文件就像所有XML文件一样,必须以一个XML头开始。

这个头声明可以使用的XML版本并给出文件的字符编码。

DOCYTPE声明必须立即出现在此头之后。

这个声明告诉服务器适用的servlet规的版本(如2.2或2.3)并指定管理此文件其余部分容的语法的DTD(DocumentTypeDefinition,文档类型定义)。

所有部署描述符文件的顶层(根)元素为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元素之前。

请注意,所有这些元素都是可选的。

因此,可以省略掉某一元素,但不能把它放于不正确的位置。

liconicon元素指出IDE和GUI工具用来表示Web应用的一个和两个图像文件的位置。

ldisplay-namedisplay-name元素提供GUI工具可能会用来标记这个特定的Web应用的一个名称。

ldescriptiondescription元素给出与此有关的说明性文本。

lcontext-paramcontext-param元素声明应用围的初始化参数。

lfilter过滤器元素将一个名字与一个实现javax.servlet.Filter接口的类相关联。

lfilter-mapping一旦命名了一个过滤器,就要利用filter-mapping元素把它与一个或多个servlet或JSP页面相关联。

llistenerservletAPI的版本2.3增加了对事件监听程序的支持,事件监听程序在建立、修改和删除会话或servlet环境时得到通知。

Listener元素指出事件监听程序类。

lservlet在向servlet或JSP页面制定初始化参数或定制URL时,必须首先命名servlet或JSP页面。

Servlet元素就是用来完成此项任务的。

lservlet-mapping服务器一般为servlet提供一个缺省的URL:

host/webAppPrefix/servlet/ServletName。

但是,常常会更改这个URL,以便servlet可以访问初始化参数或更容易地处理相对URL。

在更改缺省URL时,使用servlet-mapping元素。

lsession-config如果某个会话在一定时间未被访问,服务器可以抛弃它以节省存。

可通过使用HttpSession的setMaxInactiveInterval方法明确设置单个会话对象的超时值,或者可利用session-config元素制定缺省超时值。

lmime-mapping如果Web应用具有想到特殊的文件,希望能保证给他们分配特定的MIME类型,则mime-mapping元素提供这种保证。

lwelcom-file-listwelcome-file-list元素指示服务器在收到引用一个目录名而不是文件名的URL时,使用哪个文件。

lerror-pageerror-page元素使得在返回特定HTTP状态代码时,或者特定类型的异常被抛出时,能够制定将要显示的页面。

ltaglibtaglib元素对标记库描述符文件(TagLibraryuDescriptorfile)指定别名。

此功能使你能够更改TLD文件的位置,而不用编辑使用这些文件的JSP页面。

lresource-env-refresource-env-ref元素声明与资源相关的一个管理对象。

lresource-refresource-ref元素声明一个资源工厂使用的外部资源。

lsecurity-constraintsecurity-constraint元素制定应该保护的URL。

它与login-config元素联合使用

llogin-config用login-config元素来指定服务器应该怎样给试图访问受保护页面的用户授权。

它与sercurity-constraint元素联合使用。

lsecurity-rolesecurity-role元素给出安全角色的一个列表,这些角色将出现在servlet元素的security-role-ref元素的role-name子元素中。

分别地声明角色可使高级IDE处理安全信息更为容易。

lenv-entryenv-entry元素声明Web应用的环境项。

lejb-refejb-ref元素声明一个EJB的主目录的引用。

lejb-local-refejb-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元素),如下所示:

Xml代码

1.

2.Test

3.moreservlets.TestServlet

4.

Test

moreservlets.TestServlet

  这表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已经得到了注册名Test。

给servlet一个名称具有两个主要的含义。

首先,初始化参数、定制的URL模式以及其他定制通过此注册名而不是类名引用此servlet。

其次,可在URL而不是类名中使用此名称。

因此,利用刚才给出的定义,URLhost/webAppPrefix/servlet/Test可用于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-1TestServlet.java

Java代码

1.packagemoreservlets;

2.

3.importjava.io.*;

4.importjavax.servlet.*;

5.importjavax.servlet.http.*;

6.

7.publicclassTestServletextendsHttpServlet{

8.publicvoiddoGet(HttpServletRequestrequest,

9.HttpServletResponseresponse)

10.throwsServletException,IOException{

11.response.setContentType("text/html");

12.PrintWriterout=response.getWriter();

13.Stringuri=request.getRequestURI();

14.out.println(ServletUtilities.headWithTitle("TestServlet")+"\n"+"

URI:

"+uri"

\n"+"");

15.}

16.}

packagemoreservlets;

importjava.io.*;

importjavax.servlet.*;

importjavax.servlet.http.*;

publicclassTestServletextendsHttpServlet{

publicvoiddoGet(HttpServletRequestrequest,

HttpServletResponseresponse)

throwsServletException,IOException{

response.setContentType("text/html");

PrintWriterout=response.getWriter();

Stringuri=request.getRequestURI();

out.println(ServletUtilities.headWithTitle("TestServlet")+"\n"+"

URI:

"+uri"

\n"+"");

}

}

程序清单5-2web.xml(说明servlet名称的摘录)

Xml代码

1.

xmlversion="1.0"encoding="ISO-8859-1"?

>

2.

DOCTYPEweb-app

3.PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"

4."java.sun./dtd/web-app_2_3.dtd">

5.

6.

--…-->

7.

8.Test

9.moreservlets.TestServlet

10.

11.

--…-->

12.

xmlversion="1.0"encoding="ISO-8859-1"?

>

DOCTYPEweb-app

PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"

"

--…-->

Test

moreservlets.TestServlet

--…-->

3.2定义定制的URL

大多数服务器具有一个缺省的serlvetURL:

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摘录,它允许使用URLhost/webAppPrefix/UrlTest而不是host/webAppPrefix/servlet/Test或

http:

//host/webAppPrefix/servlet/moreservlets.TestServlet。

请注意,仍然需要XML头、DOCTYPE声明以及web-app封闭元素。

此外,可回忆一下,XML元素出现地次序不是随意的。

特别是,需要把所有servlet元素放在所有servlet-mapping元素之前。

Xml代码

1.

2.Test

3.moreservlets.TestServlet

4.

5.

--...-->

6.

7.Test

8./UrlTest

9.

Test

moreservlets.TestServlet

--...-->

Test

/UrlTest

URL模式还可以包含通配符。

例如,下面的小程序指示服务器发送所有以Web应用的URL前缀开始,以..asp结束的请求到名为BashMS的servlet。

Xml代码

1.

2.BashMS

3.msUtils.ASPTranslator

4.

5.

--...-->

6.

7.BashMS

8./*.asp

9.

BashMS

msUtils.ASPTranslator

--...-->

BashMS

/*.asp

3.3命名JSP页面

  因为JSP页面要转换成sevlet,自然希望就像命名servlet一样命名JSP页面。

毕竟,JSP页面可能会从初始化参数、安全设置或定制的URL中受益,正如普通的serlvet那样。

虽然JSP页面的后台实际上是servlet这句话是正确的,但存在一个关键的猜疑:

即,你不知道JSP页面的实际类名(因为系统自己挑选这个名字)。

因此,为了命名JSP页面,可将jsp-file元素替换为servlet-calss元素,如下所示:

Xml代码

1.

2.Test

3./TestPage.jsp

4.

Test

/TestPage.jsp

  命名JSP页面的原因与命名servlet的原因完全相同:

即为了提供一个与定制设置(如,初始化参数和安全设置)一起使用的名称,并且,以便能更改激活JSP页面的URL(比方说,以便多个URL通过相同页面得以处理,或者从URL中去掉.jsp扩展名)。

但是,在设置初始化参数时,应该注意,JSP页面是利用jspInit方法,而不是init方法读取初始化参数的。

例如,程序清单5-3给出一个名为TestPage.jsp的简单JSP页面,它的工作只是打印出用来激活它的URL的本地部分。

TestPage.jsp放置在deployDemo应用的顶层。

程序清单5-4给出了用来分配一个注册名PageName,然后将此注册名与host/webAppPrefix/UrlTest2/anything形式的URL相关联的web.xml文件(即,deployDemo/WEB-INF/web.xml)的一部分。

程序清单5-3TestPage.jsp

Html代码

1.

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">

2.

3.

4.JSPTestPage

5.

6.

7.

URI:

<%=request.getRequestURI()%>

8.

9.

DOCTYPEHTMLPUBLIC"-//W3C//DTDHTML4.0Transitional//EN">

JSPTestPage

URI:

<%=request.getRequestURI()%>

程序清单5-4web.xml(说明JSP页命名的摘录)

Xml代码

1.

xmlversion="1.0"encoding="ISO-8859-1"?

>

2.

DOCTYPEweb-app

3.PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"

4."java.sun./dtd/web-app_2_3.dtd">

5.

6.

--...-->

7.

8.PageName

9./TestPage.jsp

10.

11.

--...-->

12.

13.PageName

14./UrlTest2/*

15.

16.

--...-->

17.

xmlversion="1.0"encoding="ISO-8859-1"?

>

DOCTYPEweb-app

PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN"

"

--...-->

PageName

/TestPage.jsp

--...-->

PageName

/UrlTest2/*

--...-->

4禁止激活器servlet

  对servlet或JSP页面建立定制URL的一个原因是,这样做可以注册从init(servlet)或jspInit(JSP页面)方法中读取得初始化参数。

但是,初始化参数只在是利用定制URL模式或注册名访

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 设计艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1