與JSP權(quán)威指南第五章_第1頁(yè)
與JSP權(quán)威指南第五章_第2頁(yè)
與JSP權(quán)威指南第五章_第3頁(yè)
與JSP權(quán)威指南第五章_第4頁(yè)
與JSP權(quán)威指南第五章_第5頁(yè)
已閱讀5頁(yè),還剩29頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

web.xmlWeb 分配名 定義定制的 命名JSP頁(yè) 4激活器 重新/servlet/URL模 全局激活器 6過濾 指定歡迎 error-code元 提供安全 限制對(duì)Web資源的分配角色 關(guān)聯(lián)文件與MIME類 定位 指定應(yīng)用事件程 使用的XML版本并給出文件的字符編碼。DOCYTPE必須立即出現(xiàn)在此頭之后。這個(gè)告訴服務(wù)器適用的servlet規(guī)范的版(如2.2或2.3)并指定管理此文件其余部分內(nèi)容的語(yǔ)法的DTD( 所有部署描述符文件的頂層(根)web-app。請(qǐng)注意,XMLHTML,XML元素不僅是大小寫敏感的,而且它們還對(duì)出現(xiàn)在其他元素中的次序敏感。例如,XML頭必須是文件中的第一項(xiàng),DOCTYPE必須是第二項(xiàng),而web-app元素必須是第這表示使用非標(biāo)準(zhǔn)元素次序的web.xml文件是不可移植的。此列表說明servlet元素必須出現(xiàn)在所有servlet-map元前。請(qǐng)注意,所有這些元素 icon元素IDE和GUI工具用來表示W(wǎng)eb應(yīng)用的一個(gè)和兩個(gè)圖像文件的 filter-map一旦命名了一個(gè)過濾器,就要利用filter-map元素把它與一個(gè)或多個(gè)servlet或JSP頁(yè)面相關(guān)聯(lián)。listenerservletAPI的版本2.3增加了對(duì)事件程序的支持,事件程序在建 servletJSPURLservlet-map服務(wù)器一般 servlet提供一個(gè)缺省 URL。但是,常常會(huì)更改這個(gè)URL,以便servlet可以初始化參數(shù)或更容易地處理相對(duì)URLURL時(shí),使用servlet-map元素。 如果某個(gè)會(huì)話在一定時(shí)間內(nèi)未被,服務(wù)器可以拋棄它以節(jié)省內(nèi)HttpSessionsetMaxInactiveInterval方法明確設(shè)置單個(gè)會(huì)話對(duì)象的超時(shí)值,或者可利用session-config元素制定缺省mime-map如果Web應(yīng)用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-map元素提供這種保證。 e-file-list元素指示服務(wù)器在收到一個(gè) 件名的URL時(shí),使用哪個(gè)文件。 taglib元素對(duì)標(biāo)記庫(kù)描述符文件(TagLibraryuDescriptorfile)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁(yè)面。 login-config用login-config元素來指定服務(wù)器應(yīng)該怎樣給試圖受保護(hù)頁(yè)面的用戶。它與sercurity-constraint元素聯(lián)合使用。security-rolesecurity-role元素給出安全角色的一個(gè)列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name素中。分別地角色可使高級(jí)IDEenv-entryenv-entry元素Web應(yīng)用的環(huán)境項(xiàng)ejb-refejb-ref元素一個(gè)EJB的主的ejb-local-refejb-local-ref元素一個(gè)EJB的本的應(yīng)用在web.xml中完成的一個(gè)最常見的任務(wù)是對(duì)servletJSP頁(yè)面給出名稱和定制的URL。用servlet元素分配名稱,使用servlet-map元素將定制的URL與剛分配的名稱相關(guān)聯(lián)。分配名為了提供初始化參數(shù),對(duì)servletJSP頁(yè)面定義一個(gè)定制URL或分配一個(gè)安全角色,servletJSPservlet元素分配一個(gè)名稱。最常見的格式包括servlet-name和servlet-class素(在web-app元素內(nèi),如下所示:<servlet-name>Test</servlet-<servlet-class>moreservlets.TestServlet</servlet-這表示位于WEB-INF/classes/moreservlets/TestServlet的servlet已經(jīng)得到了名Test。給servletURL模式以及其他定制利用剛才給出的定義,URL可用于的場(chǎng)所。元素內(nèi)所有servlet元素必須位于所有servlet-map元素(下一小節(jié)介紹)之前,而且還要位于5.6節(jié)和5.11節(jié)的與過濾器或文檔相關(guān)的元(如果有的話之前類似地,servlet的servlet-name素也必須出現(xiàn)在servlet-class之前。5.2節(jié)“部署描述符文件內(nèi)的元素次例如,程序5-1給出了一個(gè)名為TestServlet的簡(jiǎn)單servlet,它駐留在moreservlets程序包中。因?yàn)榇藄ervlet是扎根在一個(gè)名為deployDemo的 所以TestServlet.class放在deployDemo/WEB-INF/classes/moreservlets中。程序5-2給出將放置在deployDemo/WEB-INF/內(nèi)的web.xml文件的一部分。此web.xml文件使用顯示利用缺省URL和名調(diào)用TestServlet時(shí)的結(jié)果。5-packageimportjava.io.*;importjavax.servlet.*;import/**SimpleservletusedtoillustrateservletandcustomfromPrenticeHallandSunMicrosystems /.©2002MartyHall;maybefreelyusedorpublicclassTestServletextends{publicvoiddoGet(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();Stringuri=out.println(ServletUtilities.headWithTitle("TestServlet")+"<BODYBGCOLOR=\"#FDF5E6\">\n"+"<H2>URI:"+uri+"</H2>\n"+}5-PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--…--<servlet-name>Test</servlet-<servlet-class>moreservlets.TestServlet</servlet-<!--…--</web-定義定制的大多數(shù)服務(wù)器具有一個(gè)缺省的serlvetURL。雖然在開發(fā)中使用這個(gè)URL很方便,但是常常會(huì)希望另一個(gè)URLWeb應(yīng)用頂層的URL(如,并且在此URL中沒有servlet項(xiàng)。位于頂層的URL簡(jiǎn)化了相對(duì)URL的使用。此外,對(duì)許多開發(fā)來說,頂層URL看上去比更長(zhǎng)更麻煩的缺省URL更簡(jiǎn)短。強(qiáng)制實(shí)施安全限制或防止用戶意外地?zé)o初始化參數(shù)的servlet。如果你了缺省的URL,那么你怎樣servlet呢?這時(shí)只有使用定制的URL了。 的URL。url-pattern元素的值必須以斜杠(/)起始下面給出一個(gè)簡(jiǎn)單的web.xml摘錄,它允許使用URL 。請(qǐng)注意,仍然需要XML頭、DOCTYPEweb-app封閉元素。此外,可回憶一下,XML元素出現(xiàn)地次序不是隨意的。特別是,需要把所有servlet元素放在所有servlet-map元前。<servlet-name>Test</servlet-<servlet-class>moreservlets.TestServlet</servlet-<!--...--<servlet-name>Test</servlet-</servlet-mapURL模式還可以包含通配符。例如,下面的小程序指示服務(wù)器發(fā)送所有以Web應(yīng)用的<servlet-name>BashMS</servlet-<servlet-class>msUtils.ASPTranslator</servlet-<!--...--<servlet-name>BashMS</servlet-</servlet-mapJSPJSP頁(yè)面要轉(zhuǎn)sevlet,自然希望servlet一樣命JSP頁(yè)面。畢竟,JSP替換為servlet-calss元素,如下所示:<servlet-name>Test</servlet-<jsp-file>/TestPage.jsp</jsp-初始化參數(shù)和安全設(shè)置)JSPURL(比方URLURL中去掉.jsp擴(kuò)展名。但是,在設(shè)置初始化參數(shù)時(shí),應(yīng)該注意,JSP頁(yè)面是利用jspInit方法,而不是init方法初始化參數(shù) 5-3給出一個(gè)名為TestPage.jsp的簡(jiǎn)單JSP頁(yè)面,它的工作只是打印出給出了用來分配一個(gè)名PageName,然后將此名與形式的URL相關(guān)聯(lián)的web.xml文件(5-JSPTest<BODY 5-PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<servlet-name>PageName</servlet-<jsp-file>/TestPage.jsp</jsp-<!--...--</servlet-map<!--...--</web-4激活器對(duì)servlet或JSP頁(yè)面建立定制URL的一個(gè)原因是,這樣做可以從init(servlet)或jspInit(JSP頁(yè)面)方法中得初始化參數(shù)。但是,初始化參數(shù)只在是利用定制URL模式或名servlet或JSP頁(yè)面時(shí)可以使用,用缺省時(shí)不能使用。因此,你可能會(huì)希望關(guān)閉缺URL因?yàn)槎鄶?shù)服務(wù)器具有一個(gè)用缺省的servletURL的標(biāo)準(zhǔn)servlet,并激活缺省的URL應(yīng)用的實(shí)際servlet。重要的是應(yīng)該注意到,雖然重新每個(gè)Web應(yīng)用中的/servlet/模式比徹底激活servlet完全是針對(duì)具體機(jī)器的,事實(shí)上有的服務(wù)器(ServletExec)沒有這樣的選擇。下面的對(duì)每個(gè)Web應(yīng)用重新/servlet/URL模式的策略。后面提供在Tomcat中全局激活器servlet的詳細(xì)內(nèi)容。重新/servlet/URL模在一個(gè)特定的Web應(yīng)用中以 開始的URL的處理非常簡(jiǎn)單。所需做的事情就是建立一個(gè)錯(cuò)誤消息servlet,并使用前一節(jié)的url-pattern元素將所有匹配請(qǐng)求轉(zhuǎn)向該servlet。只要簡(jiǎn)單地使用: 例如,程 5-5給出了將 servlet(程序5-6)與所有5-PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<servlet-name>Sorry</servlet-<servlet-class>moreservlets.SorryServlet</servlet-<!--...--</servlet-map<!--...--</web-5-packageimportjava.io.*;importjavax.servlet.*;import/**Simpleservletusedtogiveerrormessagesuserswhotrytoaccessdefaultservlet(i.e.,inWebapplicationsthathavedisabledfromPrenticeHallandSunMicrosystems /.©2002MartyHall;maybefreelyusedorpublicclassSorryServletextends{publicvoiddoGet(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();Stringtitle="InvokerServletDisabled."; "<H2>"+title+"</H2>\n""Sorry,accesstoservletsbymeansof\n"+"URLsthatbeginwith\n"+"\n"+"hasbeendisabled.\n"+}publicvoiddoPost(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{doGet(request,}}全局激活器1.激活器:TomcatTomcat4用與前面相同的方法關(guān)閉激活器servlet,即利用web.xml中的url-map元素進(jìn)行關(guān)閉。不同之處在于Tomcat使用了放在install_dir/conf中的一個(gè)服務(wù)器的全局web.xmlWebWEB-INF中的標(biāo)準(zhǔn)web.xml文注釋出/servlet/*URL項(xiàng)即可,如下所示:<!-<servlet-name>invoker</servlet-</servlet-map--中的,此文件不是存放在每個(gè)Web應(yīng)用的WEB-INF 2.激活器在ApacheTomcat的版本3中,通過在install_dir/conf/server.xml中注釋出InvokerInterceptor項(xiàng)全局缺省servletURL。例如,下面是使用缺省servletURL的server.xml文件的一部分。<!-debug="0"prefix="/servlet/"/>--初始化和預(yù)裝載servlet與JSP這里控制servlet和JSP頁(yè)面的啟動(dòng)行為的方法。特別是,說明了怎樣分配初始化參數(shù)以及怎樣更改服務(wù)器生存期中裝載servletJSP頁(yè)面的時(shí)刻。分配servletinit-paramservlet提供初始化參數(shù),init-paramparam-nameparam-value素。例如,在下面的例子中,如果initServletservlet是利用它的<servlet-name>InitTest</servlet-<servlet-class>moreservlets.InitServlet</servlet-JSP中的初始化。JSPjspInitinit。JSPjsp-file元素代替servlet-class。用URL時(shí)可用,但在使用URL例如,程 5-7給出一個(gè)名為InitServlet的簡(jiǎn)單servlet,它使用init方法設(shè)Name和Address字段。程序5-8給出分配名稱InitTest給servlet的web.xml文packageimportjava.io.*;importjavax.servlet.*;import/**SimpleservletusedtoillustratefromPrenticeHallandSunMicrosystems /.©2002MartyHall;maybefreelyusedorpublicclassInitServletextends{privateStringName,publicvoidinit()ServletConfigconfig=Name=config.getInitParameter("Name");}publicvoiddoGet(HttpServletRequestHttpServletResponseresponse)throwsServletException,IOException{PrintWriterout=response.getWriter();Stringuri=request.getRequestURI();out.println(ServletUtilities.headWithTitle("InitServlet")+"<H2>InitParameters:</H2>\n"+"<UL>\n"+"<LI>name:"+Name+"\n"+"<LI>address:"+Address+"\n"+"</UL>\n"+}}5-web.xml(說明初始化參數(shù)的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<servlet-name>InitTest</servlet-<servlet-class>moreservlets.InitServlet</servlet- <!--...--</web-分配JSP初始化<servlet-name>PageName</servlet-<jsp-file>/RealPage.jsp</jsp-2)幾乎總是分配一個(gè)明確的URL模式。對(duì)servlet,一般相應(yīng)地使用以開始的缺省URL。只需記住,使用名而不是原名稱即可。這對(duì)于JSP頁(yè)面在技術(shù)上也是合法的。例如,在上面給出的例子中,可用RealPage.jsp的對(duì)初始化參數(shù)具有權(quán)的版本。但在用于JSP頁(yè)面時(shí),許多用戶似乎不喜歡應(yīng)用常規(guī)的servlet的URL。此外,如果JSP頁(yè)面位于服務(wù)器為其提供了 中(如,一個(gè)既沒有index.html也沒有index.jsp文件的 則用戶可能會(huì)連接到此JSP頁(yè)面,單擊它,從而意外地激活未初始來自項(xiàng)目1的servlet定義,可使用下面的servlet-map定義:<servlet-name>PageName</servlet-</servlet-map3)JSPjspInitinitJSPservlet包含一個(gè)jspInit方法且放置于deployDemoWeb應(yīng)用層次結(jié)構(gòu)的頂層。一般,形式的URL將激活此頁(yè)面的不具有初始化參數(shù)權(quán)的版本,從而將對(duì)Name和Address變量顯示null。但是,web.xml文件(程5-<BODY<LI>name:<%=Name<LI>address:<%=AddressprivateStringName,publicvoidjspInit()ServletConfigconfig=Name=config.getInitParameter("Name");}5-PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<servlet-name>InitPage</servlet-<jsp-file>/InitPage.jsp</jsp- <!--...--</servlet-map<!--...--</web-提供應(yīng)用范圍內(nèi)的初始servletJSPservletJSP頁(yè)面利用意servlet或JSP頁(yè)面借助ServletContext的getInitParameter方法的系統(tǒng)范圍內(nèi)的初始化可利用context-param元素這些系統(tǒng)范圍內(nèi)的初始化值。context-param元素應(yīng)該包含param-name、param-value以及可選的description素,如下所示: 可回憶一下,為了保證可移植性,web.xml內(nèi)的元素必須以正確的次序。但這里應(yīng)該注意,context-param元素必須出現(xiàn)任意與文檔有關(guān)的元素(icon、display-name或description)之后及filter、filter-map、listener或servlet元前。在服務(wù)器啟動(dòng)時(shí)裝載一個(gè)客戶機(jī)請(qǐng)求時(shí)裝載servlet的缺省行為將對(duì)第一個(gè)客戶機(jī)產(chǎn)生較長(zhǎng)時(shí)間的延遲。因此,servletload-on-startupservlet。下面是一個(gè)例<servlet-name>…</servlet-<servlet-class>…</servlet- load-on-startup。想法是服務(wù)器應(yīng)該servlet項(xiàng)(WebWEB-INF下的web.xml文件中的web-app元素內(nèi))將指示服務(wù)器首先裝載和初始化SearchServlet,然后裝載和初始化由位于Web應(yīng)用的result目錄中的index.jsp文件產(chǎn)生的servlet。<servlet-name>Search</servlet-<servlet-name>Results</servlet-6過濾servlet2.3servletAPI2.3的服務(wù)器都支持過濾器,但為了使用與過濾器有關(guān)的元素,必須在web.xml中使用版本2.3的DTD。servletJSPservletJSP頁(yè)面發(fā)其他過濾器,servletJSPServletRequest對(duì)象的全部訪問權(quán),因此,它們可以查看客戶機(jī)名、查找到來的等。為了servlet或JSP頁(yè)面例如,程序5-11難以了一個(gè)簡(jiǎn)單的過濾器,只要相關(guān)的servlet或JSP頁(yè)5-packageimportjava.io.*;importjavax.servlet.*;importjavax.servlet.http.*;importjava.util.*;/**SimplefilterthatprintsareportonthestandardwhenevertheassociatedservletorJSPpageis fromPrenticeHallandSunMicrosystems /.©2002MartyHall;maybefreelyusedorpublicclassReportFilterimplements{publicvoiddoFilter(ServletRequestFilterChainchain)throwsServletException,{HttpServletRequestreq=(HttpServletRequest)request;System.out.println(req.getRemoteHost()+"triedtoaccess"+req.getRequestURL()+"on"+newDate()+".");}publicvoidinit(FilterConfigconfig)throwsServletException{}publicvoiddestroy()}web-app元素中出現(xiàn)的次序不是任意的;允許服務(wù)器(但不是必需的)強(qiáng)制所需的次序,并且實(shí)際中有些服務(wù)器也是這樣做的。但這里要注意,所有filter元素必須出現(xiàn)在任意filter-map元前,filter-map元素又必須出現(xiàn)在所有servlet或servlet-map元<filter-name>Reporter</filter-<filter-class>moresevlets.ReportFilter</filter-一旦命名了一個(gè)過濾器,可利用filter-map元素把它與一個(gè)或多個(gè)servlet或JSP頁(yè)<filter-map<filter-name>Reporter</filter-<servlet-name>SomeServletName</servlet-其次,可利用filter-name和url-pattern素將過濾器與一組servlet、JSP頁(yè)面或靜態(tài)內(nèi)容相關(guān)聯(lián)。例如,相面的程序片段指示系統(tǒng)只要Web應(yīng)用中的任意URL,就運(yùn)行名為Reporter的過濾器。<filter-map<filter-name>Reporter</filter-</filter- 例如,程序5-12給出了將ReportFilter過濾器與名為PageName的servlet相關(guān)聯(lián)的 開頭的URL相關(guān)聯(lián)。TestPage.jsp的源代碼已經(jīng)JSP頁(yè)面命名的談?wù)撁娴?節(jié)“分配名稱和定制的URL”中給出。事實(shí)上,程序5-12中的servlet和servlet-name項(xiàng)從該節(jié)原封不動(dòng)地拿過來的。給定這些web.xml項(xiàng),可看到下面audit.irs.triedtoonTueDec2513:12:29EDT2001.5-PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<filter-map<!--...--<servlet-name>PageName</servlet-<jsp-file>/RealPage.jsp</jsp-<!--...--</servlet-map<!--...--</web-假如用戶提供了一個(gè)像這樣的包含一個(gè)名URL,會(huì)發(fā)生什么事情呢?用戶能得到一個(gè)表?一個(gè)錯(cuò)誤?還是e-file-list元素及其輔助的e-file元素解決了這個(gè)模糊的問題。例如,下面的web.xml項(xiàng),如果一個(gè)URL給出一個(gè)名但未給出文件名,服務(wù)器應(yīng)該首先試用index.jspindex.html。如果兩者都沒有找到,則結(jié)果有賴于所用的服務(wù)器(如一個(gè)列表 e-file- e- e- e- e- e-file-雖然許多服務(wù)器缺省遵循這種行為,但不一定必須這樣。因此,明確地使用-file- 保證可移植性是一種良好的servletJSP頁(yè)面時(shí)從不會(huì)犯錯(cuò)誤,而且你的所有頁(yè)面是那URL或者不能提供必需的表單字段值。除此之外,其它error元素就是用來克服這些問題的。它有兩個(gè)可能的素,分別是:error-code和exception-type第一個(gè)素error-code在給定的HTTP錯(cuò)誤代碼出現(xiàn)時(shí)使用的URL。第二個(gè)素excpetion-type在出現(xiàn)某個(gè)給定的Java異常但未捕捉到時(shí)使用的URL。error-code和exception-type都利用location元素相應(yīng)的URL。此URL必須以/開始。location所的位置處的頁(yè)面可通過查找HttpServletRequest對(duì)象的兩個(gè)專門的屬性來關(guān)于錯(cuò)誤的信息,這兩個(gè)屬性分別是: javax.servlet.error.messageerrorweb.xml文件的末尾附近,servlet、servlet-name和e-filelist之后即error-code為了更好地了解error-code元素的值,可考慮一下如果不正確地輸入文件名,大多數(shù)站 選擇的位置,以便查找感的頁(yè)面。提供這樣有用的錯(cuò)誤頁(yè)面對(duì)于Web應(yīng)用來說是很有價(jià)值得。事實(shí)上,就是把整個(gè)站點(diǎn)專門用于404錯(cuò)誤頁(yè)面這個(gè)內(nèi)容。這個(gè)站點(diǎn)包含來自全世界最好、最糟和最搞笑的404頁(yè)面。程序5-13給出一個(gè)JSP頁(yè)面,此頁(yè)面可返回給提供位置程序名的客戶機(jī)。程序清單5-14給出指定程序5-13作為返回404錯(cuò)誤代碼時(shí)顯示的頁(yè)面的web.xml。請(qǐng)注意,瀏覽器中顯示的URL仍然是客戶機(jī)所提供的。錯(cuò)誤頁(yè)面是一種實(shí)現(xiàn)技術(shù)。ToolsInternetOptions,單擊Advanced,取消ShowFriendlyHTTPErrorMessage來解決此問題。5-<BODYI'msorry,butIcannotfindapagethat<%=request.getRequestURI()%>onthesystem.Maybeyoushouldtryoneofthefollowing:<LI>Gototheserver's<AHREF="/">home<FORM Keywords:<INPUTTYPE="TEXT"<LI>Admirearandommultipleof<%=404*((int)(1000*Math.random()))<LI>Trya<AHREF="random404errormessage</A>.Fromtheamazingand<AHREF="">404archive</A>.5-HTTP錯(cuò)誤代碼的錯(cuò)誤頁(yè)面的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<error-<error-code>404</error-</error-<!--...--</web-exception-typeerror-code元素處理某個(gè)請(qǐng)求產(chǎn)生一個(gè)特定的HTTP狀態(tài)代碼時(shí)的情況。然而,對(duì)于servlet或JSP頁(yè)面返回200但產(chǎn)生運(yùn)行時(shí)異常這種同樣是常見的情況怎么辦呢?這正是exception-type元素要處理的情況。只需提供兩樣?xùn)|西即可:即提供如下的一個(gè)完全限定的<error-</error-則使用指定的URL。此異常類型可以是一個(gè)標(biāo)準(zhǔn)類型,如javax.ServletException或 pution的一個(gè)JSP頁(yè)面。在拋出此異常時(shí),如程序清DDE.js(5-package/**Exceptionusedtoflagparticularlyonerousprogrammerblunders.Usedtoillustratetheexception-typeweb.xmlelement. fromPrenticeHallandSunMicrosystems /.©2002MartyHall;maybefreelyusedor{publicDumbDeveloperException(){super("Duh.WhatwasI*thinking*?");}publicstaticint putation(intn)throwsDumbDeveloperException{if(n<{return(n+}elsethrow(new}}}5-<HEAD><TITLE>RiskyJSP<BODY<%@pageimport="moreservlets.*"<%intn=((int)(10*Math.random()));<LI>n:<%=n <%= putation(n)5-<BODYWe'rebraindead.Considerusingour5-web.xml(為異常指定錯(cuò)誤頁(yè)面的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<servlet>…<!--...--<error-</error-<!--...--</web-指定驗(yàn)證的使用login-confgi元素規(guī)定服務(wù)器應(yīng)該怎樣驗(yàn)證試圖受保護(hù)頁(yè)面的用戶。它包含三login-config的這個(gè)素列出服務(wù)器將要使用的特定驗(yàn)證機(jī)制。有效值為BASIC、DIGEST、FORMCLIENT-CERT。服務(wù)器只需要支持BASICFORM。BASIC應(yīng)該使用標(biāo)準(zhǔn)的HTTP驗(yàn)證,在此驗(yàn)證中服務(wù)器檢查Authorization頭。如base64編碼發(fā)送的,他們很容易得手。所有兼容的服務(wù)器都需要支持BASIC驗(yàn)證。了比BASIC驗(yàn)證更高的防范網(wǎng)絡(luò)截取得的安全性,但這種加密比SSL(HTTPS)所用的方法更容易。不過,此結(jié)論有時(shí)沒有意義,因?yàn)楫?dāng)前很少有瀏覽器支持DigestAuthentication,所以servlet容器不需要支持它。FORM服務(wù)器應(yīng)該檢查保留的會(huì)話并且把不具有它的用戶重定向到一個(gè)指HTML表單。在登陸之后,利用保留會(huì)話級(jí)的用戶雖然很復(fù)雜,但FORM驗(yàn)證防范網(wǎng)絡(luò)窺探并不比BASIC驗(yàn)證更安全,如果有必要可以在頂層安排諸如SSL或網(wǎng)絡(luò)層安全(如IPSEC或)等額外的保護(hù)。所有兼容的服務(wù)器都需要支持FORM驗(yàn)證。只有兼容J2EE的服務(wù)器需要支持它。此元素只在auth-method為BASIC時(shí)使用。它瀏覽器在相應(yīng)框標(biāo)題使用的、并作為Authorization頭組成部分的安全域的名稱。用form-error素。由form-login給出的HTML表單必須具有一個(gè)j_security_checkACTIONj_username的用戶名文本字段以及一個(gè)名為j_password的口令字段。例如,程序5-19指示服務(wù)器使用基于表單的驗(yàn)證。Web應(yīng)用的頂層中的一個(gè)名為login.jsp的頁(yè)面將收集用戶名和口令,并且失敗的登陸將由相同中名為login-error.jsp的頁(yè)面報(bào)告。5-web.xml(說明login-config的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<security-constraint>...</security-<!--...--</web-限制對(duì)Web面。它包含是個(gè)可能的素,分別是:web-resource-collection、auth-constraint、user-donstraint和display-name。下面各小節(jié)對(duì)它們進(jìn)行介紹。web-resource-此元素確定應(yīng)該保護(hù)的資源。所有security-constraint元素都必須包含至少一個(gè)web-resource-collectionweb-resource-name元素、一個(gè)確定應(yīng)該保護(hù)的URL的url-pattern元素、一個(gè)此保護(hù)所適用的HTTP命令(GET、例如,下面的Web-resource-collection項(xiàng)(在security-constratint元素內(nèi))Web應(yīng)用的proprietary中所有文檔應(yīng)該受到保護(hù)。<security-<web-resource-<web-resource-name>Proprietary</web-resource-</web-resource-<!--...--</security-重要的是應(yīng)該注意到,url-pattern僅適用于直接這些資源的客戶機(jī)。特別是,它不適合于通過MVC體系結(jié)構(gòu)利用RequestDispatcher來的頁(yè)面,或者不適合于利用類似jsp:forward段來的頁(yè)面。這種不勻稱如果利用得當(dāng)?shù)脑捄苡泻锰?。例如,servlet可的bean的servlet來它。url-pattern和auth-contraint元素可通過不允許任何用戶直web-resource-collentionURLauth-constraintweb.xmlsecurity-constraintAdministratorBig<security-</security-如下面例子中所示,它用戶joe(口令bigshot)和jane(口令enaj)屬于administrator和kahuna角色。<username="joe"password="bigshot"roles="administrator,kahuna"user- 這個(gè)可選的元素在相關(guān)資源時(shí)使用任何傳輸層保護(hù)。它必須包含一個(gè)INTEGRAL值表示數(shù)據(jù)必須以一種防止截取它的人閱讀它的方式傳送。雖然原理上(并且在未來的HTTP版本中在INTEGRAL和之間可能會(huì)有差別,但在當(dāng)前<security-<!--...--<user- <transport-guarantee></transport-</user- </security-security-constraint的這個(gè)很少使用的素給予可能由GUI工具使用的安全約束項(xiàng)一個(gè)分配角迄今為止,已經(jīng)集中到完全由容器(服務(wù)器)處理的安全問題之上了。但bigwig用戶修改此頁(yè)面的參數(shù)。完成這種更細(xì)致的控制的一種常見方法是調(diào)用HttpServletRequset的isUserInRole方法,并據(jù)此修改。Servlet的security-role-ref素提供出現(xiàn)在服務(wù)器口令文件中的安全角色名的一request.isUsernRol“oss”)的servlet,但后來該servlet被用在了一個(gè)其口令文件調(diào)用角色manager而不是boss的服務(wù)器中。下面的程序段使該servlet能夠使用這兩個(gè)名稱中的任何一個(gè)。<!--...--<security-role- <!--Newalias-- <!--Realname--</security-role-也可web-app內(nèi)利用security-role元素提供將出現(xiàn)role-name元素中的所有安全角色的一個(gè)全局列表。分別地生命角色使高級(jí)IDE容易處理安全信息。如果某個(gè)會(huì)話在一定的時(shí)間內(nèi)未被,服務(wù)器可把它扔掉以節(jié)約內(nèi)存??衫弥萌笔?huì)話超時(shí)值為三個(gè)小時(shí)(180分鐘<session-<session-timeout>180</session-</session-越來越多的開發(fā)環(huán)境開始提供servlet和JSP的直接支持。例子有BorlandJbuilderEnterpriseEdition、MacromediaUltraDev、AllaireJRunStudio(Macromedia收購(gòu))以及IBMVisuaAgeforJava等??苫貞浺幌拢趙eb.xml內(nèi)以適當(dāng)?shù)卮涡騱eb-app素很重要。不過,這里只要icondisplay-namedescriptionweb.xml的web-app元素內(nèi)的前三個(gè)合法元素即可。icon元素GUI工具可用來代表Web應(yīng)用的一個(gè)和兩個(gè)圖像文件可利用small-icon16x16GIFJPEGlarge-icon32x32的圖像。下display-nameGUIWeb應(yīng)用的一個(gè)名稱。下面是個(gè)例 元素提供解釋性文本,如下ThisWebapplicationrepresentsthestoredeveloped,anonlinebookstorespecializinginrareandlimited-editionbooks.關(guān)聯(lián)文件與MIME服務(wù)器一般都具有一種讓W(xué)eb站點(diǎn)管理員將文件擴(kuò)展名與相關(guān)聯(lián)的方法。例如,mom.jpg的文件image/jpegMIME類型Web應(yīng)用具有幾個(gè)不尋常的文件,你希望保證它們?cè)诎l(fā)送到客戶機(jī)時(shí)分配為某種MIME類型。mime-map元素(具有extension和mime-type素)可提供這種保證。例如,下面的代碼指示服務(wù)器將application/x-fubarMIME類型分配給所有以.foo結(jié)尾的文件?;蛟S,你的Web應(yīng)用希望重載(override)標(biāo)準(zhǔn)的。例如,下面的代碼將告訴服務(wù)器在發(fā)送到客戶機(jī)時(shí)指定.ps文件作為純文本(text/plain)而不是作為PostScript(appaonpossrp 定位JSPtagliburiTLD(TagLibraryDescriptor)文但希望避免更改所有現(xiàn)有JSP頁(yè)面。此外,可能還希望使用保持taglib元素的簡(jiǎn)練性的素:taglib-uritaglib-location。taglib-uriJSPtagliburi屬性的東西相匹配。Tagliblocation元素給出TLD文件的實(shí)際位置。例如,假如

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論