`
hngmduyi
  • 浏览: 329924 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

response.encodeURL的用法

阅读更多
Java Servlet API 中引用 Session 机制来追踪客户的状态。Servlet API 中定义了 javax.servlet.http.HttpSession 接口,Servlet 容器必须实现这个接口。当一个 Session 开始时,Servlet 容器将创建一个 HttpSession 对象,Servlet 容器为 HttpSession 分配一个唯一标识符,称为 Session ID。Servlet 容器将 Session ID 作为 Cookie 保存在客户的浏览器中。每次客户发出 HTTP 请求时,Servlet 容器可以从 HttpRequest 对象中读取 Session ID,然后根据 Session ID 找到相应的 HttpSession 对象,从而获取客户的状态信息。
    当客户端浏览器中禁止 Cookie,Servlet 容器无法从客户端浏览器中取得作为 Cookie 的 Session ID,也就无法跟踪客户状态。
    Java Servlet API 中提出了跟踪 Session 的另一种机制,如果客户端浏览器不支持 Cookie,Servlet 容器可以重写客户请求的 URL,把 Session ID 添加到 URL 信息中。
    HttpServletResponse 接口提供了重写 URL 的方法:public java.lang.String encodeURL(java.lang.String url)
   该方法的实现机制为:
    ● 先判断当前的 Web 组件是否启用 Session,如果没有启用 Session,直接返回参数 url。
    ● 再判断客户端浏览器是否支持 Cookie,如果支持 Cookie,直接返回参数 url;如果不支持 Cookie,就在参数 url 中加入 Session ID 信息,然后返回修改后的 url。
    我们可以对网页中的链接稍作修改,解决以上问题:
    修改前:
        <a href=“maillogin.jsp“>
   修改后:
        <a href=“<%=response.encodeURL(“maillogin.jsp“)%>“>

//HTTP协议与状态保持
HTTP协议本身是无状态的,这与HTTP协议本来的目的是相符的,客户端只需要简单的向服务器请求下载某些文件,无论是客户端还是服务器都没有必要纪录 彼此过去的行为,每一次请求之间都是独立的,好比一个顾客和一个自动售货机或者一个普通的(非会员制)大卖场之间的关系一样。

然而聪明(或者贪心?)的人们很快发现如果能够提供一些按需生成的动态信息会使web变得更加有用,就像给有线电视加上点播功能一样。这种需求一方 面迫使HTML逐步添加了表单、脚本、DOM等客户端行为,另一方面在服务器端则出现了CGI规范以响应客户端的动态请求,作为传输载体的HTTP协议也 添加了文件上载、cookie这些特性。其中cookie的作用就是为了解决HTTP协议无状态的缺陷所作出的努力。至于后来出现的session机制则 是又一种在客户端与服务器之间保持状态的解决方案。

让我们用几个例子来描述一下cookie和session机制之间的区别与联系。笔者曾经常去的一家咖啡店有喝5杯咖啡免费赠一杯咖啡的优惠,然而一次性消费5杯咖啡的机会微乎其微,这时就需要某种方式来纪录某位顾客的消费数量。想象一下其实也无外乎下面的几种方案:
1、该店的店员很厉害,能记住每位顾客的消费数量,只要顾客一走进咖啡店,店员就知道该怎么对待了。这种做法就是协议本身支持状态。
2、发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。这种做法就是在客户端保持状态。
3、发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。这种做法就是在服务器端保持状态。

由于HTTP协议是无状态的,而出于种种考虑也不希望使之成为有状态的,因此,后面两种方案就成为现实的选择。具体来说cookie机制采用的是在 客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个 标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,但实际上它还有其他选择。


分享到:
评论
3 楼 net_ascm 2014-11-26  
不错,谢谢~!
2 楼 wpf523 2012-07-27  
很不错,真的。学了了
1 楼 yp0123456789 2010-06-24  

相关推荐

    用JSP做的网上交友页面

    &lt;a href="&lt;%=response.encodeURL("showMember.jsp")%&gt;"&gt;浏览会员| &lt;a href="&lt;%=response.encodeURL("register.jsp")%&gt;"&gt;会员注册| &lt;a href="&lt;%=response.encodeURL("login.jsp")%&gt;"&gt;会员登录| &lt;a href="&lt;%=...

    jsp java 购物车

    &lt;%String str=response.encodeURL("buybook.jsp");%&gt; &lt;FORM action="&lt;%=str%&gt;" Method="post" &gt; &lt;P&gt;&lt;BR&gt;输入要订购的书的序列号: 提交"&gt; 查询到如下记录: &lt;% StringBuffer b=book.getMessageBybook_id(); %&gt;...

    portal开发portlet的一些知识

    图片路径的写法 &lt;IMG &gt;/testportlet/images/mark.gif"&gt; &lt;IMG src="%=renderResponse.encodeURL(renderRequest.getContextPath()+"&gt;"&gt; 其中renderResponse.encodeURL表示编码。目录结构截图: 。。。 。。。

    servlet学习笔记

    String newURL=response.encodeURL(oldURL); 目的:保证session在cookie禁用时仍然有效 http://localhost:8080/XServlet;jsessionid=fdfsdddde45234435235 GET session id 不再通过请求头中传送...

    java中Cookie被禁用后Session追踪问题

    一.服务器端获取Session对象依赖于客户端携带的Cookie中的JSESSIONID数据。...在 Session1Servlet中,使用response.encodeURL(url) 对超链接路径拼接 session的唯一标识 // 当点击 的时候跳转到 sess

    SimpleServlet.zip

    out.println(response.encodeURL("cart")); out.println("\"method=\"POST\"&gt;"); out.println("&lt;table cellspacing=\"5\" cellpadding=\"5\"&gt;&lt;tr&gt;"); out.println("&lt;td align=\"center\"&gt;&lt;b&gt;种类&lt;/b&gt;&lt;/td&gt;")...

    UrlRewriting Filter-开源

    UrlRewriting Filter 是一个 servlet 过滤器,它自动将 request.encodeURL() 应用于 servlet 响应正文中的 url。 这允许用户不必担心手动将 request.encodeURL() 应用于这些 url 以进行会话传播。

    lua-base64mix:base64编码解码模块

    lua-base64mix base64编码/解码模块 安装 ...应用程序接口 编码 str, err = base64mix.encode( src:...str, err = base64mix.encodeURL( src:string ) 此函数会将参数编码为 base64url 格式。 解码 str, err = base64

    servlet2.4doc

    The default behavior of this method is to call encodeUrl(String url) on the wrapped response object. encodeUrl(String) - Method in interface javax.servlet.http.HttpServletResponse Deprecated. As of ...

    EncodeDecode经典加密解密+VB源码.rar

    EncodeDecode经典加密解密+VB源码.rarEncodeDecode经典加密解密+VB源码.rarEncodeDecode经典加密解密+VB源码.rarEncodeDecode经典加密解密+VB源码.rar

    php二维码扩展库exqrcode.zip

    使用方法:   $instance = new ExQrcode(); //ExQrcode::QRLEVEL_L //ExQrcode::QRLEVEL_M //ExQrcode::QRLEVEL_Q //ExQrcode::QRLEVEL_H $instance-&gt;setLevel(ExQrcode::QRLEVEL_H); $instance-&gt;setSize(7); //$...

    Excel公式与函数大辞典.宋翔(带书签高清文字版).pdf

    本书从函数功能、函数格式、参数说明、注意事项、Excel 版本提醒、案例应用、交叉参考7 个方面,全面、细致地介绍了Excel 2016/2013/2010/2007/2003 中公式和函数的使用方法、实际应用和操作技巧。最后3 章还将公式...

    java-servlet-api.doc

    这份文档以及刚才提及的Javadoc格式的文档都描述了这两个软件包,Javadoc格式的文档还描述了你应该如何使用这两个软件包中的所有方法。 有关规范 你也许对下面的这些Internet规范感兴趣,这些规范将直接影响到...

    javascript中encodeURI和decodeURI方法使用介绍

    一、基本概念 encodeURI和decodeURI是成对来使用的,因为浏览器的地址栏有中文字符的话,可以会出现不可预期的错误,所以可以encodeURI把非英文字符转化为英文编码,decodeURI可以用来把字符还原回来。encodeURI方法...

    ASP中只有UrlEncode,没有Urldecode问题的解决方法?

    在ASP中传递参数时有一个很有用的系统函数Server.UrlEncode,可以将一些非字母数字的特殊符号转换成标准URL编码(其实就是16进制ASC码),这样就解决了参数传递问题,然后我以为也提供了Server.UrlDecode,但使用后...

    字符串转EnCode_c#

    字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c# 字符串转EnCode_c#

    ios获取数据之encodeURI和decodeURI的实例

    下面小编就为大家带来一篇ios获取数据之encodeURI和decodeURI的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

    在asp中使用js的encodeURIComponent方法

    encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串

    PHP rawurlencode与urlencode函数的深入分析

    结论:rawurlencode遵守是94年国际标准备忘录RFC 1738,urlencode实现的是传统做法,和上者的主要区别是对空格的转义是’+’而不是’ ′javascript的encodeURL也是94年标准, 而javascript的escape是另一种用”%xxx”...

    jsqrcodeSample:安卓手机,js调用系统摄像头扫码二维码并识别,推荐火狐以及谷歌浏览器

    shot目录目录结构├── 1.sh├── README.md├── node_modules│ ├── connect│ ├── debug│ ├── depd│ ├── destroy│ ├── ee-first│ ├── encodeurl│ ├── escape-html│ ├──...

Global site tag (gtag.js) - Google Analytics