在某些情形下,浏览器也许不接受cookies,这样就不能用cookies来进行会话跟踪。URL改写就是这种情形下的一个解决办法,当Weblogic服务器检测到浏览器不接受cookies时,就会自动替换URL。URL改写就会将编码的会话ID写进servlet返回给浏览器的Web页面的超级链接里。当用户随后点击这些链接时,Weblogic服务器从URL地址中取出ID,并在servlet调用getSession()方法时找到合适的HttpSession。
要在Weblogic服务器中使用URL改写,在Weblogic特有部署描述符weblogic.xml中的<session-descriptor>下,将属性URLRewritingEnabled设为true(这个属性的默认值是true)。
URL改写的编码原则
要支持URL改写,这里有一些代码应当如何处理URLs的一般原则。
· 避免在输出流中直接写URL,如:
out.println("<a href=\"/myshop/catalog.jsp\">catalog</a>");
而是使用HttpServletResponse.encodeURL()方法,如:
out.println("<a href=\""
+ response.encodeURL("myshop/catalog.jsp")
+ "\">catalog</a>");
调用encodeURL()方法决定URL是否需要改写,如要就用包含会话ID的URL改写。会话ID被添加到URL中,并以分号开头。
· 除了Weblogic服务器响应返回的URLs,也要编码重定向的URLs。如
if (session.isNew())
response.sendRedirect (response.encodeRedirectUrl(welcomeURL));
Weblogic服务器在一个新会话开始时就会使用URL改写,即使浏览器不接受cookies,因为服务器不能断定浏览器在会话的第一次访问时是否接受cookies。
· 通过检查HttpServletRequest.isRequestedSessionIdFromCookie()方法返回的布尔值,servlet能确定是否从cookie按收到给定的会话ID。也许应用程序适当响应,或者简单地依赖Weblogic服务器的URL改写。
URL改写和无线访问协议(WAP)
如编写WAP应用程序,由于WAP协议不支持cookies,就必须使用URL改写。另外,一些WAP设备的URL(包括参数)长度有128个字符的限制,这样就限制了用URL改写传输的数据数量。要允许参数使用更多空间,用IDLength属性指定字节数,可以限制Weblogic服务器随机产生的会话ID的长度。
使用字符集和POST数据
You can set the character set that is used when processing data from a form that uses the POST method. To inform the application that processes the form data that a particular character set is in use, you add specific "signal" characters to the URL used to process the form data (specified with the action attribute of the <form> tag) and then map those characters to an encoding in the Web Application deployment descriptor, web.xml. POST data is normally read as ASCII unless specified using the following procedure.
在处理从用POST方法提交的表单数据时可设定使用的字符集。要通知处理表单数据的应用程序在使用的特定字符集,给处理表单数据(在<form>标签的action属性里指定)的URL添加指定的”信号”字符,然后将那些字符映射到一个WEB应用程序部署描述符web.xml的编码上。POST数据数据正常以ASCII编码读取,除非用以下过程指定编码。
要用非ASCII字符集处理POST数据:
1. 在WEB应用程度部署描述符web.xml中用<context-param>建立一个条目。这个条目应在web.xml 文件里的<distributable>元素后,<servlet>元素前。在这个条目中,<param-name>总是包含weblogic.httpd.inputCharset类名,后跟一句点,再后就是信号字符串。<param-value>包含HTTP字符集的名称。在下例中,字符串/rus/jo*被映射到windows-1251字符集:
<context-param>
<param-name>weblogic.httpd.inputCharset./rus/jo*</param-name>
<param-value>windows-1251</param-value>
</context-param>
2. 在传递表单数据时使用信号字符串编码HTML表单。如:
<form action="http://some.host.com/myWebApp/rus/jo/index.html">
...
</form>
将信号字符串放在WEB应用程序名称(这种情况下也叫context路径-myWebApp-)后面和URL剩余部分的前面。
有关更多的WEB应用程序描述符的信息,参考定义Context参数。
延伸阅读
文章来源于领测软件测试网 https://www.ltesting.net/