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

下載本文檔

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

文檔簡介

web.xmlWeb 分配名 定義定制的 命名JSP頁 4激活器 重新/servlet/URL模 全局激活器 6過濾 指定歡迎 error-code元 提供安全 限制對Web資源的分配角色 關(guān)聯(lián)文件與MIME類 定位 指定應(yīng)用事件程 使用的XML版本并給出文件的字符編碼。DOCYTPE必須立即出現(xiàn)在此頭之后。這個告訴服務(wù)器適用的servlet規(guī)范的版(如2.2或2.3)并指定管理此文件其余部分內(nèi)容的語法的DTD( 所有部署描述符文件的頂層(根)web-app。請注意,XMLHTML,XML元素不僅是大小寫敏感的,而且它們還對出現(xiàn)在其他元素中的次序敏感。例如,XML頭必須是文件中的第一項,DOCTYPE必須是第二項,而web-app元素必須是第這表示使用非標(biāo)準(zhǔn)元素次序的web.xml文件是不可移植的。此列表說明servlet元素必須出現(xiàn)在所有servlet-map元前。請注意,所有這些元素 icon元素IDE和GUI工具用來表示W(wǎng)eb應(yīng)用的一個和兩個圖像文件的 filter-map一旦命名了一個過濾器,就要利用filter-map元素把它與一個或多個servlet或JSP頁面相關(guān)聯(lián)。listenerservletAPI的版本2.3增加了對事件程序的支持,事件程序在建 servletJSPURLservlet-map服務(wù)器一般 servlet提供一個缺省 URL。但是,常常會更改這個URL,以便servlet可以初始化參數(shù)或更容易地處理相對URLURL時,使用servlet-map元素。 如果某個會話在一定時間內(nèi)未被,服務(wù)器可以拋棄它以節(jié)省內(nèi)HttpSessionsetMaxInactiveInterval方法明確設(shè)置單個會話對象的超時值,或者可利用session-config元素制定缺省mime-map如果Web應(yīng)用具有想到特殊的文件,希望能保證給他們分配特定的MIME類型,則mime-map元素提供這種保證。 e-file-list元素指示服務(wù)器在收到一個 件名的URL時,使用哪個文件。 taglib元素對標(biāo)記庫描述符文件(TagLibraryuDescriptorfile)指定別名。此功能使你能夠更改TLD文件的位置,而不用編輯使用這些文件的JSP頁面。 login-config用login-config元素來指定服務(wù)器應(yīng)該怎樣給試圖受保護頁面的用戶。它與sercurity-constraint元素聯(lián)合使用。security-rolesecurity-role元素給出安全角色的一個列表,這些角色將出現(xiàn)在servlet元素內(nèi)的security-role-ref元素的role-name素中。分別地角色可使高級IDEenv-entryenv-entry元素Web應(yīng)用的環(huán)境項ejb-refejb-ref元素一個EJB的主的ejb-local-refejb-local-ref元素一個EJB的本的應(yīng)用在web.xml中完成的一個最常見的任務(wù)是對servletJSP頁面給出名稱和定制的URL。用servlet元素分配名稱,使用servlet-map元素將定制的URL與剛分配的名稱相關(guān)聯(lián)。分配名為了提供初始化參數(shù),對servletJSP頁面定義一個定制URL或分配一個安全角色,servletJSPservlet元素分配一個名稱。最常見的格式包括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可用于的場所。元素內(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給出了一個名為TestServlet的簡單servlet,它駐留在moreservlets程序包中。因為此servlet是扎根在一個名為deployDemo的 所以TestServlet.class放在deployDemo/WEB-INF/classes/moreservlets中。程序5-2給出將放置在deployDemo/WEB-INF/內(nèi)的web.xml文件的一部分。此web.xml文件使用顯示利用缺省URL和名調(diào)用TestServlet時的結(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ù)器具有一個缺省的serlvetURL。雖然在開發(fā)中使用這個URL很方便,但是常常會希望另一個URLWeb應(yīng)用頂層的URL(如,并且在此URL中沒有servlet項。位于頂層的URL簡化了相對URL的使用。此外,對許多開發(fā)來說,頂層URL看上去比更長更麻煩的缺省URL更簡短。強制實施安全限制或防止用戶意外地?zé)o初始化參數(shù)的servlet。如果你了缺省的URL,那么你怎樣servlet呢?這時只有使用定制的URL了。 的URL。url-pattern元素的值必須以斜杠(/)起始下面給出一個簡單的web.xml摘錄,它允許使用URL 。請注意,仍然需要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頁面要轉(zhuǎn)sevlet,自然希望servlet一樣命JSP頁面。畢竟,JSP替換為servlet-calss元素,如下所示:<servlet-name>Test</servlet-<jsp-file>/TestPage.jsp</jsp-初始化參數(shù)和安全設(shè)置)JSPURL(比方URLURL中去掉.jsp擴展名。但是,在設(shè)置初始化參數(shù)時,應(yīng)該注意,JSP頁面是利用jspInit方法,而不是init方法初始化參數(shù) 5-3給出一個名為TestPage.jsp的簡單JSP頁面,它的工作只是打印出給出了用來分配一個名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激活器對servlet或JSP頁面建立定制URL的一個原因是,這樣做可以從init(servlet)或jspInit(JSP頁面)方法中得初始化參數(shù)。但是,初始化參數(shù)只在是利用定制URL模式或名servlet或JSP頁面時可以使用,用缺省時不能使用。因此,你可能會希望關(guān)閉缺URL因為多數(shù)服務(wù)器具有一個用缺省的servletURL的標(biāo)準(zhǔn)servlet,并激活缺省的URL應(yīng)用的實際servlet。重要的是應(yīng)該注意到,雖然重新每個Web應(yīng)用中的/servlet/模式比徹底激活servlet完全是針對具體機器的,事實上有的服務(wù)器(ServletExec)沒有這樣的選擇。下面的對每個Web應(yīng)用重新/servlet/URL模式的策略。后面提供在Tomcat中全局激活器servlet的詳細(xì)內(nèi)容。重新/servlet/URL模在一個特定的Web應(yīng)用中以 開始的URL的處理非常簡單。所需做的事情就是建立一個錯誤消息servlet,并使用前一節(jié)的url-pattern元素將所有匹配請求轉(zhuǎn)向該servlet。只要簡單地使用: 例如,程 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元素進行關(guān)閉。不同之處在于Tomcat使用了放在install_dir/conf中的一個服務(wù)器的全局web.xmlWebWEB-INF中的標(biāo)準(zhǔn)web.xml文注釋出/servlet/*URL項即可,如下所示:<!-<servlet-name>invoker</servlet-</servlet-map--中的,此文件不是存放在每個Web應(yīng)用的WEB-INF 2.激活器在ApacheTomcat的版本3中,通過在install_dir/conf/server.xml中注釋出InvokerInterceptor項全局缺省servletURL。例如,下面是使用缺省servletURL的server.xml文件的一部分。<!-debug="0"prefix="/servlet/"/>--初始化和預(yù)裝載servlet與JSP這里控制servlet和JSP頁面的啟動行為的方法。特別是,說明了怎樣分配初始化參數(shù)以及怎樣更改服務(wù)器生存期中裝載servletJSP頁面的時刻。分配servletinit-paramservlet提供初始化參數(shù),init-paramparam-nameparam-value素。例如,在下面的例子中,如果initServletservlet是利用它的<servlet-name>InitTest</servlet-<servlet-class>moreservlets.InitServlet</servlet-JSP中的初始化。JSPjspInitinit。JSPjsp-file元素代替servlet-class。用URL時可用,但在使用URL例如,程 5-7給出一個名為InitServlet的簡單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)幾乎總是分配一個明確的URL模式。對servlet,一般相應(yīng)地使用以開始的缺省URL。只需記住,使用名而不是原名稱即可。這對于JSP頁面在技術(shù)上也是合法的。例如,在上面給出的例子中,可用RealPage.jsp的對初始化參數(shù)具有權(quán)的版本。但在用于JSP頁面時,許多用戶似乎不喜歡應(yīng)用常規(guī)的servlet的URL。此外,如果JSP頁面位于服務(wù)器為其提供了 中(如,一個既沒有index.html也沒有index.jsp文件的 則用戶可能會連接到此JSP頁面,單擊它,從而意外地激活未初始來自項目1的servlet定義,可使用下面的servlet-map定義:<servlet-name>PageName</servlet-</servlet-map3)JSPjspInitinitJSPservlet包含一個jspInit方法且放置于deployDemoWeb應(yīng)用層次結(jié)構(gòu)的頂層。一般,形式的URL將激活此頁面的不具有初始化參數(shù)權(quán)的版本,從而將對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頁面利用意servlet或JSP頁面借助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ù)器啟動時裝載一個客戶機請求時裝載servlet的缺省行為將對第一個客戶機產(chǎn)生較長時間的延遲。因此,servletload-on-startupservlet。下面是一個例<servlet-name>…</servlet-<servlet-class>…</servlet- load-on-startup。想法是服務(wù)器應(yīng)該servlet項(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頁面發(fā)其他過濾器,servletJSPServletRequest對象的全部訪問權(quán),因此,它們可以查看客戶機名、查找到來的等。為了servlet或JSP頁面例如,程序5-11難以了一個簡單的過濾器,只要相關(guān)的servlet或JSP頁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ù)器(但不是必需的)強制所需的次序,并且實際中有些服務(wù)器也是這樣做的。但這里要注意,所有filter元素必須出現(xiàn)在任意filter-map元前,filter-map元素又必須出現(xiàn)在所有servlet或servlet-map元<filter-name>Reporter</filter-<filter-class>moresevlets.ReportFilter</filter-一旦命名了一個過濾器,可利用filter-map元素把它與一個或多個servlet或JSP頁<filter-map<filter-name>Reporter</filter-<servlet-name>SomeServletName</servlet-其次,可利用filter-name和url-pattern素將過濾器與一組servlet、JSP頁面或靜態(tài)內(nèi)容相關(guān)聯(lián)。例如,相面的程序片段指示系統(tǒng)只要Web應(yīng)用中的任意URL,就運行名為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頁面命名的談?wù)撁娴?節(jié)“分配名稱和定制的URL”中給出。事實上,程序5-12中的servlet和servlet-name項從該節(jié)原封不動地拿過來的。給定這些web.xml項,可看到下面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-假如用戶提供了一個像這樣的包含一個名URL,會發(fā)生什么事情呢?用戶能得到一個表?一個錯誤?還是e-file-list元素及其輔助的e-file元素解決了這個模糊的問題。例如,下面的web.xml項,如果一個URL給出一個名但未給出文件名,服務(wù)器應(yīng)該首先試用index.jspindex.html。如果兩者都沒有找到,則結(jié)果有賴于所用的服務(wù)器(如一個列表 e-file- e- e- e- e- e-file-雖然許多服務(wù)器缺省遵循這種行為,但不一定必須這樣。因此,明確地使用-file- 保證可移植性是一種良好的servletJSP頁面時從不會犯錯誤,而且你的所有頁面是那URL或者不能提供必需的表單字段值。除此之外,其它error元素就是用來克服這些問題的。它有兩個可能的素,分別是:error-code和exception-type第一個素error-code在給定的HTTP錯誤代碼出現(xiàn)時使用的URL。第二個素excpetion-type在出現(xiàn)某個給定的Java異常但未捕捉到時使用的URL。error-code和exception-type都利用location元素相應(yīng)的URL。此URL必須以/開始。location所的位置處的頁面可通過查找HttpServletRequest對象的兩個專門的屬性來關(guān)于錯誤的信息,這兩個屬性分別是: javax.servlet.error.messageerrorweb.xml文件的末尾附近,servlet、servlet-name和e-filelist之后即error-code為了更好地了解error-code元素的值,可考慮一下如果不正確地輸入文件名,大多數(shù)站 選擇的位置,以便查找感的頁面。提供這樣有用的錯誤頁面對于Web應(yīng)用來說是很有價值得。事實上,就是把整個站點專門用于404錯誤頁面這個內(nèi)容。這個站點包含來自全世界最好、最糟和最搞笑的404頁面。程序5-13給出一個JSP頁面,此頁面可返回給提供位置程序名的客戶機。程序清單5-14給出指定程序5-13作為返回404錯誤代碼時顯示的頁面的web.xml。請注意,瀏覽器中顯示的URL仍然是客戶機所提供的。錯誤頁面是一種實現(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錯誤代碼的錯誤頁面的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<error-<error-code>404</error-</error-<!--...--</web-exception-typeerror-code元素處理某個請求產(chǎn)生一個特定的HTTP狀態(tài)代碼時的情況。然而,對于servlet或JSP頁面返回200但產(chǎn)生運行時異常這種同樣是常見的情況怎么辦呢?這正是exception-type元素要處理的情況。只需提供兩樣?xùn)|西即可:即提供如下的一個完全限定的<error-</error-則使用指定的URL。此異常類型可以是一個標(biāo)準(zhǔn)類型,如javax.ServletException或 pution的一個JSP頁面。在拋出此異常時,如程序清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(為異常指定錯誤頁面的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<servlet>…<!--...--<error-</error-<!--...--</web-指定驗證的使用login-confgi元素規(guī)定服務(wù)器應(yīng)該怎樣驗證試圖受保護頁面的用戶。它包含三login-config的這個素列出服務(wù)器將要使用的特定驗證機制。有效值為BASIC、DIGEST、FORMCLIENT-CERT。服務(wù)器只需要支持BASICFORM。BASIC應(yīng)該使用標(biāo)準(zhǔn)的HTTP驗證,在此驗證中服務(wù)器檢查Authorization頭。如base64編碼發(fā)送的,他們很容易得手。所有兼容的服務(wù)器都需要支持BASIC驗證。了比BASIC驗證更高的防范網(wǎng)絡(luò)截取得的安全性,但這種加密比SSL(HTTPS)所用的方法更容易。不過,此結(jié)論有時沒有意義,因為當(dāng)前很少有瀏覽器支持DigestAuthentication,所以servlet容器不需要支持它。FORM服務(wù)器應(yīng)該檢查保留的會話并且把不具有它的用戶重定向到一個指HTML表單。在登陸之后,利用保留會話級的用戶雖然很復(fù)雜,但FORM驗證防范網(wǎng)絡(luò)窺探并不比BASIC驗證更安全,如果有必要可以在頂層安排諸如SSL或網(wǎng)絡(luò)層安全(如IPSEC或)等額外的保護。所有兼容的服務(wù)器都需要支持FORM驗證。只有兼容J2EE的服務(wù)器需要支持它。此元素只在auth-method為BASIC時使用。它瀏覽器在相應(yīng)框標(biāo)題使用的、并作為Authorization頭組成部分的安全域的名稱。用form-error素。由form-login給出的HTML表單必須具有一個j_security_checkACTIONj_username的用戶名文本字段以及一個名為j_password的口令字段。例如,程序5-19指示服務(wù)器使用基于表單的驗證。Web應(yīng)用的頂層中的一個名為login.jsp的頁面將收集用戶名和口令,并且失敗的登陸將由相同中名為login-error.jsp的頁面報告。5-web.xml(說明login-config的摘錄PUBLIC"-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN" <web-<!--...--<security-constraint>...</security-<!--...--</web-限制對Web面。它包含是個可能的素,分別是:web-resource-collection、auth-constraint、user-donstraint和display-name。下面各小節(jié)對它們進行介紹。web-resource-此元素確定應(yīng)該保護的資源。所有security-constraint元素都必須包含至少一個web-resource-collectionweb-resource-name元素、一個確定應(yīng)該保護的URL的url-pattern元素、一個此保護所適用的HTTP命令(GET、例如,下面的Web-resource-collection項(在security-constratint元素內(nèi))Web應(yīng)用的proprietary中所有文檔應(yīng)該受到保護。<security-<web-resource-<web-resource-name>Proprietary</web-resource-</web-resource-<!--...--</security-重要的是應(yīng)該注意到,url-pattern僅適用于直接這些資源的客戶機。特別是,它不適合于通過MVC體系結(jié)構(gòu)利用RequestDispatcher來的頁面,或者不適合于利用類似jsp:forward段來的頁面。這種不勻稱如果利用得當(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- 這個可選的元素在相關(guān)資源時使用任何傳輸層保護。它必須包含一個INTEGRAL值表示數(shù)據(jù)必須以一種防止截取它的人閱讀它的方式傳送。雖然原理上(并且在未來的HTTP版本中在INTEGRAL和之間可能會有差別,但在當(dāng)前<security-<!--...--<user- <transport-guarantee></transport-</user- </security-security-constraint的這個很少使用的素給予可能由GUI工具使用的安全約束項一個分配角迄今為止,已經(jīng)集中到完全由容器(服務(wù)器)處理的安全問題之上了。但bigwig用戶修改此頁面的參數(shù)。完成這種更細(xì)致的控制的一種常見方法是調(diào)用HttpServletRequset的isUserInRole方法,并據(jù)此修改。Servlet的security-role-ref素提供出現(xiàn)在服務(wù)器口令文件中的安全角色名的一request.isUsernRol“oss”)的servlet,但后來該servlet被用在了一個其口令文件調(diào)用角色manager而不是boss的服務(wù)器中。下面的程序段使該servlet能夠使用這兩個名稱中的任何一個。<!--...--<security-role- <!--Newalias-- <!--Realname--</security-role-也可web-app內(nèi)利用security-role元素提供將出現(xiàn)role-name元素中的所有安全角色的一個全局列表。分別地生命角色使高級IDE容易處理安全信息。如果某個會話在一定的時間內(nèi)未被,服務(wù)器可把它扔掉以節(jié)約內(nèi)存??衫弥萌笔挸瑫r值為三個小時(180分鐘<session-<session-timeout>180</session-</session-越來越多的開發(fā)環(huán)境開始提供servlet和JSP的直接支持。例子有BorlandJbuilderEnterpriseEdition、MacromediaUltraDev、AllaireJRunStudio(Macromedia收購)以及IBMVisuaAgeforJava等??苫貞浺幌?,在web.xml內(nèi)以適當(dāng)?shù)卮涡騱eb-app素很重要。不過,這里只要icondisplay-namedescriptionweb.xml的web-app元素內(nèi)的前三個合法元素即可。icon元素GUI工具可用來代表Web應(yīng)用的一個和兩個圖像文件可利用small-icon16x16GIFJPEGlarge-icon32x32的圖像。下display-nameGUIWeb應(yīng)用的一個名稱。下面是個例 元素提供解釋性文本,如下ThisWebapplicationrepresentsthestoredeveloped,anonlinebookstorespecializinginrareandlimited-editionbooks.關(guān)聯(lián)文件與MIME服務(wù)器一般都具有一種讓W(xué)eb站點管理員將文件擴展名與相關(guān)聯(lián)的方法。例如,mom.jpg的文件image/jpegMIME類型Web應(yīng)用具有幾個不尋常的文件,你希望保證它們在發(fā)送到客戶機時分配為某種MIME類型。mime-map元素(具有extension和mime-type素)可提供這種保證。例如,下面的代碼指示服務(wù)器將application/x-fubarMIME類型分配給所有以.foo結(jié)尾的文件?;蛟S,你的Web應(yīng)用希望重載(override)標(biāo)準(zhǔn)的。例如,下面的代碼將告訴服務(wù)器在發(fā)送到客戶機時指定.ps文件作為純文本(text/plain)而不是作為PostScript(appaonpossrp 定位JSPtagliburiTLD(TagLibraryDescriptor)文但希望避免更改所有現(xiàn)有JSP頁面。此外,可能還希望使用保持taglib元素的簡練性的素:taglib-uritaglib-location。taglib-uriJSPtagliburi屬性的東西相匹配。Tagliblocation元素給出TLD文件的實際位置。例如,假如

溫馨提示

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

評論

0/150

提交評論