J2EE web xml配置详解

所需积分/C币:11 2012-03-29 16:16:02 224KB PDF
17
收藏 收藏
举报

J2EE web xml配置详解 J2EE web xml配置详解
Import javax. serv Importjavax.servlethttp* Simple servlet used to illustrate servlet naming and custom urls <P> Taken from More Servlets and JavaServer Pages e from Prentice Hall and Sun microsystems press http://www.moreservlets.com/. 2002 Marty Hall; may be freely used or adapted public class Testservlet extends Http servlet i publicvoiddoget(httpServletrequestrequest Http scrvletRcsponsc response throws ServletException, IOException response. setContentType( text/html ") Print Writer out=response. get Writer String uri=rcqucst. gctrcqucstURIO out printIn(ServletUtilities head WithTitle(Test Servlet" )+ <BODY BGCOLOR"#FDF5E6>>n"+ K<H2>URI: uri+H2>n"+ </BODY></HTML>") 程序清单5-2web.xml(说明 servlet名称的摘录) xml version-10"encoding-"ISo-8859-1"?> <IDOCTYPE web-app PUBLIC "-/Sun Microsystems, Inc. DTD Web application 2.3//EN http:/iava.sun.com/dtd/web-app23.dtd> <web-app> <servlet <servlet-name>Test/servlet-name> Kservlet-class>moreservlets. TestServlet</servlet-class> <servlet> Vweb-app> 32定义定制的URL 大多数服务器具有一个缺省的 serlvet url: h:/ host/webAppPrefix/servlet/packageName. ServletName。虽然在开发中使用这个URL很方 便,但是我们常常会希望另一个URL用于部署。例如,可能会需要一个出现在Wb应用顶 层的URL(如,htp:/ 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/webApp Prefix/ ArtEst而不是 http://host/wcbappprcfix/scrvlet/teStEx htt:/ host/web App Prefix/servlet/moreservlets. TestServlet请注意,仍然需要XML头 DOCTYPE声明以及web-app封闭元素。此外,可回忆一下,XML元素出现地次序不是随意 的。特別是,需要把所有 servlet元素放在所有 servlet- mapping元素之前。 <servlet> <servlet-name>Test</servlet-name> servlet-class >moreservlets TestServlet</serylet-class <servlet> ≤ servlet- mapping> <servlet-name>Test</servlet-name> <url-pattern>/UrlTest</url-pattern> </scrvlct-mapping URL模式还可以包含通配符。例如,下面的小程序指示服务器发送所有以Web应用的URL 前缀开始,以.asp结束的请求到名为 BashES的 servlet <servlet> <servlet-name>BashMS</servlet-name> <servlet-class>msUtils ASPTranslator</servlet-class> </servlet> <servlet-mapping> <servlet-name>BashMS</servlet-name> <url-pattern>/*. asp</url-pattern> </servlet-mapping> 33命名JSP页面 因为JsP页面要转换成 sevlet,自然希望就像命名 servlet一样命名JSP页面。毕竞,JSP页面 可能会从初始化参数、安全设置或定制的URL中受益,正如普通的 scrlvct那样。虽然JSP 页面的后台实际上是 servlet这句话是正确的,但存在一个关键的猜疑:即,你不知道JsP页 面的实际类名(因为系统自己挑选这个名字)。因此,为了命名JSP页面,可将jp-fle素 替换为 servlet-cals元素,如下所示: <servIc <servlet-name>Test</servlet-name> <jsp-file>/TestPagejsp</jsp-file> </servlet> 命名JSP页面的原因与命名 servlet的原因完仝相同:即为了提供一个与定制设置(如,初始 化参数和安全设置)一起使用的名称,并且,以便能更改激活JSP页面的URL(比方说, 以便多个URL通过相同页面得以处理,或者从URL中去掉jp扩展名)。但是,在设置初 始化参数时,应该注意,JSP页面是利用 jsplnit方法,而不是init方法读取初始化参数的 例如,程序清单5-3给出一个名为 TestPage. jsp的简单JSP页面,它的工作只是打印出用来激 江它的URL的本地部分。 TestPage. jsp放置在 deploy demo应用的顶层。程序清单5-4给出了 用来分配一个注册名 PageName,然后将此注册名与 htt:/ host/webAppPrefix/ UrlTest2/ anything形式的URL相关联的 web. xml文件(即, deploy demo/WEB- INF/wcb. xml)的一部分 程序清单5-3 TestPage」jsp <!DOCTYPE HTML PUBLIC "-/W3C//DTD HTML 4.0 Transitional/EN't <HTML <HEAD> <TITLE> JSP Test page TITLE> <HEAD> <BODY BGCOLOR=#FDFSE6> H2>URI < %- request.getrequestURIO %></H2> </BODYS <HTML> 程序清单5-4 web. xml(说明JSP页命名的摘录) <?xml vcrsion="1.0"cncoding=ISo-8859-1?> DOCTYPE web-app PUBLIC"//Sun Microsystems, Inc //DTD Web Application 2. 3//EN http:/iava.sun.com/dtd/web-app23.dtd> <web-app <servlet-name>PageName</servlet-name> <jsp-file/TestPage jsps/jsp-file> <servlet-mapping> <servlet-name> PageName </servlet-name> <url-pattern >/UrlTest2/</url-pattern> servlet-mapping> </web-app> 4禁止激活器 servlet 对 servlet或JSP页面建立定制URL的一个原因是,这样做可以注册从init( servlet)或 jspInit(JsP页面)方法中读取得初始化参数。但是,初始化参数只在是利用定制URL模式 或注册名访问 servlet或JsP页面时可以使用,用缺省URI htt:/ host/webAppPrefix/servlet/ServletName访问时不能使用。因此,你可能会希望关闭缺省 URL,这样就不会有人意外地调川初始化 servlet了。这个过程有时称为禁止激活器 servlet, 因为多数服务器具有一个用缺省的 servlet URL注册的标准 servlet,并激活缺省的URL应用 的实际 servlet 有两种禁止此缺省URL的主要方法 1在每个web应用中重新映射/ servlet模式, 1全局关闭激活器 servlet 重要的是应该注意到,虽然重新映射每个web应用中的/ servlet模式比彻底禁止激活 servlet 所做的工作更多,但重新映射可以用一种完仝可移植的方式来完成。相反,全局禁止激活器 servlet完全是针对具体机器的,事实上有的服务器(如 Servletexec)没有这样的选择。下面 的讨论对每个Web应用重新映射/ /servlet/uri模式的策略。后面提供在 Tomcat中全局禁止 激活器 servlet的详细内容。 4.1重新映射/ Servlet/Url模式 在一个特定的web应用中禁止以htt:/ host/webAppPrefix/ servlet/开始的URL的处理非常简 单。所需做的事情就是建立一个错误消息 servlet,并使用前一节讨论的url- pattern元素将所 有匹配请求转向该 servlet。只要简单地使用 <url-patterm>/servlet/*</url-pattern> 作为 servlet-mapping元素中的模式即可 例如,程序清单5-5给出了将 Sorry Servlet servlet(程序清单5-6)与所有以 htp/ host/web AppPrefix/ servlet/开头的URL相关联的部署描述符文件的一部分 程序清单5-5wcb,xml(说明JSP页命名的摘录) ?xml version=1.0"encoding=ISO-8859-1"?> <IDOCTYPE web-app PUBLIC"-//Sun MicrosystemS, Inc/DTD Web application 2.3//EN Thttp://iava.sun.com/dtd/web-app23.dtd"> <web-app> <servlet <scrvlct-namc>Sorrv</scrvlct-namc cservlet-class >moreservlets Sorry Servlet</servlet-class <servlet <servlet-mapping> <servlet-name Sorry </servlet-name'> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> </web-app> 程序清单5-6 SorryServlet. java package moreservlets Import java.10. import javax. servlet ' importjavax.servlethttp Simple servlet used to give error messages to uscrs who try to access default servlet urls *(i.e.,http://host/webappprefix/servlet/seRvletname) R in Web applications that have disabled this behavior <P> N Taken from More Servlets and JavaServer pages from Prentice Hall and Sun Microsystems Press shttp://www.moreservlets.com/. :? 2002 Marty Hall; may be freely used or adapted public class Sorry Servlet extends Http servlet ( publicvoiddoget(httpServletrequestrequest Http servletresponse response throws ServletException, IOException i response. setContentType("text/html") Print Writer out= response. get Writer String title="Invoker Servlet Disabled out printIn(ServletUtilities head WithTitle(title)+ <BODY BGCOLOR#FDF5E6">n"+ <I2>"+ title+"!/H2>n"+ Sorry, access to servlets by means ofn"+ URLS that begin withn"+ http://host/webappPrefix/servlet/n' has been disabled. in"+ </BODY×<HTML>"); public void dopost(hTtp servletrequest request Http Scrvlctrcsponsc responsc) throws ServletException, IOException i doGet(request, response) 4.2全局禁止激活器: TOmcat Tomcat4中用来关闭缺省URL的方法与 Tomcat3中所用的很不相同。下面介绍这两种方法: 禁止激活器: Tomcat4 Tomcat4用与前面相同的方法关闭激活器 servlet,即利用 wcb. xml中的url- mapping元素进行 关闭。不同之处在于 Tomcat使用了放在 install dir/conf中的个服务器专用的全局 web. xml 文件,而前亩使川的是存放在每个Web应用的WEB-INF日录中的标准 web . xml文件 因此,为了在 Tomcat4中关闭激活器 servlet,只需在 install dir./ conf /web. xm中简单地注释 出/ servlet/ url映射项即可,如卜所小: <servlet-mapping> <scrvlct-namc>invoker</scrvlct-namc> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> 再次提聾,应该注意这个项是位于存放在 install dir/conf的 Tomcat专用的 web. xml文件中的, 此文件不是存放在每个Web应用的WEB-NF目录中的标准 web. xml 2.禁止激活器: Tomcat3 在 Apache Tomcat的版本3中,通过在 install dir/ conf/server xml中注释出 InvokcrIntcrccptor 项全局禁止缺省 servlet url。例如,下面是禁止使用缺省 servlet url的 server.xml文件的 一部分。 <Requsetlnterceptor className=org. apache tomcat request InvokerInterceptor' debug"0"prefix="/servlet/"/> 5初始化和预装载 servlet与JSP页面 这里讨论控制 servlet和JsP页面的启动行为的方法。特别是,说明了怎样分配初始化参数以 及怎样更改服务器生存期中装我 servlet和JSP页面的时刻。 51分配 servlet初始化参数 利用 In1t-param儿索向 servlet提供初始化参数, Init-param元素具有 paraml-name和 param value子元素。例如,在下面的例子屮,如果 initservlet servlet是利用它的注册名( UnitTest) 访问的,它将能够从其方法中调用 getServlet Config(. getInitParameter(" paran1")获得" Value 调用 getServletConfig(. getlnitParameter(" param2")获得"2" <servlet servlet-name>Init Test</servlet-name> <servlet-class >moreservlets InitServlet</servlet-class <init-param> <param-name>param1</param-name> <param-value>valuel</param-value> C/init-param> <init-param> <param-namc>param2/param-namc> <param-value>2</param-value> </init-param> </servlet> 在涉及初始化参数时,有几点需要注意: 1返回值。 Getinitparameter的返回值总是一个 String。因此,在前一个例子中,可对 param2 使用 Integer. parselnt获得个int。 1JSP中的初始化。JP贞面使川 jspInit而不是init。JSP贞亩还需要使川jsp-fle元素代替 servlet-class l缺省URL。初始化参数只在通过它们的注册名或与它们注册名相关的定制URL模式访问 Servlet时可以使用。因此,在这个例子中, param1和 param2初始化参数将能够在使用URL htt:/ host/webAppPrefix/ servlet/unittest时可用,但在使用URL http://host/wcbappprcfix/scrvlct/mYpackagc.InitscrvlcT时不能使用。 例如,程序清单5-7给出一个名为 Initservlet的简单 servlet,它使用ii方法设置 firstName 和 emailAddress字段。程序清单5-8给出分巸名称 Unittest给 servlet的web.xm文件 程序清单5-7 InitServlet. java package morescrvlcts import java. io. import javax. servlet. " importjavax.scrvlct.http /** Simple servlet used to illustrate servlet initialization parameters <P N Taken from More Servlets and JavaServer Pages i from Prentice hall and Sun Microsystems Press *http://www.moreservlets.com d? 2002 Marty Hall; may be freely used or adapted public class InitservlEt extends Http servlet i private String firstName, emailAddress public void inito i ServletConfig config=getServlet Config firstName= config. getInitParameter("firstName) emailAddress=config. getInitParameter("email Address") public void doget(hTtp Servletrequest request Http servletresponse response throws ServletException, IOException i response. setContentType("text/html") Print Writer out=response get Writer; String uri= rcqucst. gctRcquestURIO out printIn(ServletUtilities head with Title("Init Servlet")+ <BODY BGCOLOR"*FDF5E6\">n"+ K<H2>Init Parameters /H2>n"+ I<UL>In"+ <LI First name: + firstName+n"+ <LIEmail address: emailAddress + in"+ </UL>n"+ "</BODYX/HTML>"); 程序凊单5-8web.xmⅠ(说明初始化参数的摘录) < xml version-10"encoding-"ISo-8859-1"?> <IDOCTYPE web-app PUBLIC "-/Sun Microsystems, Inc. DTD Web application 2.3//EN http:/iava.sun.com/dtd/web-app23.dtd> <web-app> <servlet <servlet-name>InitTest</servlet-name> Kservlet-class >moreservlets InitServlet</servlet-class> <lnit-param> <param-name'>firstName /param-name> param-value>Larry</param-value> C/init-param> <init-param> <param-namc>cmailAddress</param-namc> <param-value>ellison(@microsoft.com</param-Value> </init-param> </servlet> web-app> 52分配JSP初始化参数 给JSP页面提供初始化参数在三个方面不同于给 servlet提供初始化参数。 1)使川jp-file而不是 servlet-class因此,wFB-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,一般相应地使用以 htp:/ host/webAppPrefix/servlet/开始的缺省URL。只需记住,使用注册名而不是原名称即可。 这对于JSP页面在技术上也是合法的。例如,在上面给出的例子中,可用URL htt/host/ webAppPrefix/ servlet/PageName访问 RealPage. jsp的对初始化参数具有访问权的版 本。但在川于JSP贞面时,许多川户似乎不喜欢应用常规的 servlet的URL。此外,如果 JSP页面位于服务器为其提供了目录清单的目录屮(如,一个既没有 index. htm也没有 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方法且放置于 deploy demo Web应用层次结构的顶层。一般, http://host/dcploydcmo/initpagc.isp形式的URL将激活此页面的不具有初始化参数访问权的 版木,从而将对 firstName和 emailaddress变量显示null。但是, web, xml文件(程序清单 5-10)分配了一个注册名,然后将该注册名与URL模式/ InitPage」js相关联。 程序清单5-9 InitPagc. jsp <IDOCTYPE HTML PUBLIC "W3C//dTD HTML 4.0 Transitional//en"> <HTML KHEADX<TITLE>JSP Init Test/TITLE></hEAD> <BODY BGCOLOR=#FDF5E6"> <H2>Init parameters /H2> <ULS <LI> First name: <%o= firstName %/ <LI> Email address: <%/=emailAddress o/0> BODY</HTML private String firstName, emailAddress public void jspinito i Servletconfig config-getServletConfigo; firstName=config. getInitParameter("firstName") cmailAddrcss= config. gctInitParamctcr("cmailAddrcss")

...展开详情
试读 21P J2EE web xml配置详解
立即下载 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
关注 私信
上传资源赚钱or赚积分
最新推荐
J2EE web xml配置详解 11积分/C币 立即下载
1/21
J2EE web xml配置详解第1页
J2EE web xml配置详解第2页
J2EE web xml配置详解第3页
J2EE web xml配置详解第4页
J2EE web xml配置详解第5页

试读结束, 可继续读2页

11积分/C币 立即下载