`
hngmduyi
  • 浏览: 335117 次
  • 性别: 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  

相关推荐

    这是一个简单的网上交友系统

    - `&lt;a href="&lt;%=response.encodeURL("showMember.jsp")%&gt;"&gt;Ա&lt;/a&gt;`:链接到展示成员信息的页面。 - `&lt;a href="&lt;%=response.encodeURL("register.jsp")%&gt;"&gt;Աع&lt;/a&gt;`:链接到注册页面。 - `&lt;a href="&lt;%=response....

    JSP实现浏览器关闭cookies情况下的会话管理.docx

    JSP提供了两个方法来帮助开发者实现这个功能:`response.encodeURL()`和`response.encodeRedirectURL()`。 `response.encodeURL(String url)`方法的作用是在给定的URL后面附加Session ID,但仅当浏览器不支持...

    关于web回话跟踪session

    例如,在Servlet或JSP文件中,可以使用`HttpServletResponse`接口中的`encodeURL()`和`encodeRedirectURL()`方法来对URL进行编码。这两个方法的作用在于确保即使在没有Cookie的情况下,也能通过URL重写的方式维持...

    JSP常见问题

    String url = response.encodeURL("hello2.jsp");%&gt;&lt;a href=''&lt;%=url%&gt;''&gt;hello2.jsp&lt;/a&gt;hello2.jsp: 我们可以看到JSP提供了许多便捷的方法来处理HTML FORM中的数据、包含静态文件、执行浏览重定向、防止输出被...

    在jbuilder2006使用dwr的问题

    &lt;script type='text/javascript' src='&lt;%=response.encodeURL(contextPath+"/dwr/interface/service.js")%&gt;'&gt; ``` 然后定义了`firstDwr`函数来调用`sayHello`方法,并定义回调函数`callBackHello`来处理返回的数据...

    jsp经典面试题!!!

    jsp经典面试题 JSP(Java Server Pages)是一种基于Java技术... String url =response.encodeUrl("hello1.jsp"); %&gt;。 这些问题涵盖了JSP的基础知识和高级应用,了解这些问题可以帮助开发者更好地理解和使用JSP技术。

    各种 jsp J2EE 面试题目

    - `response.encodeURL("hello2.jsp")`会为URL添加SESSION ID,确保在无Cookie的情况下仍能保持SESSION状态。 这些知识点涵盖了JSP的基础和进阶应用,对于理解和解答JSP面试问题至关重要。在实际面试中,面试官...

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

    在 Java 中,可以使用 response.encodeURL(url) 方法来将 JSESSIONID 信息追加到 URL 中。这种方法可以确保在禁用 Cookie的情况下,服务器端仍然可以获取 JSESSIONID 信息。例如: ```java String path = response....

    jsp常见问题

    这里,`response.encodeURL()`方法自动在URL后面加上了Session ID,确保了即使没有Cookie也能正常跟踪Session。 以上就是关于JSP的一些常见问题及其解决方案的详细介绍,希望能帮助开发者更好地理解和使用JSP技术。

    JSP面试经常问到的知识

    String url =response.encodeURL("hello2.jsp"); %&gt;&lt;a href=&lt;%=url%&gt;&gt;hello2.jsp ``` 这样,SESSION信息会被编码到URL中,即使没有Cookie,服务器仍然可以识别用户。 这些知识点涵盖了JSP的基础使用、数据处理...

    URLRewrite配置和使用[借鉴].pdf

    在本文中,我们将深入探讨URLRewrite的配置和使用方法。 首先,为什么要使用URLRewrite?通常有三个主要原因: 1. **搜索引擎友好**:搜索引擎更倾向于抓取简洁、有意义的URL,URL重写可以使得动态参数化的URL变得...

    软件单词词汇

    16. `response.encodeURL()` 和 `response.sendRedirect()`:用于URL编码和重新定向操作。 17. `response.addCookie()` 和 `request.getCookies()`:在响应中添加Cookie以及获取客户端所有Cookie。 18. `...

    Session.docx

    如果客户端禁用了Cookie,可以通过URL重写的方式来传递Session ID,例如使用`response.encodeURL()`和`response.encodeRedirectURL()`方法。 Session对象的创建是在程序中首次调用`request.getSession()`时触发,...

    jsp基础

    - URL重写:`response.encodeURL()`,将session ID添加到URL中,以保持会话状态。 - 添加cookie:`response.addCookie()`,向响应中添加cookie。 #### 三、JSP页面构成与特性 JSP(JavaServer Pages)是一种简化...

    session的使用

    response.encodeURL("/url"); response.encodeRedirectURL("/url"); ``` 2. **Cookie**:Cookie是服务器发送到用户浏览器并保存在本地的一小段信息,下次用户请求同一服务器时,会携带Cookie信息一起发送。这种...

    cook文档存储

    ### IT知识点:Cook文档存储与会话管理技术详解 #### 一、会话技术概览 在探讨具体的会话管理技术之前,我们首先需要理解...了解这些技术的工作原理和使用方法,对于构建稳定、高效且用户体验友好的Web应用至关重要。

    jsp面试基础题

    这里使用了 `encodeURL` 方法对URL进行了重写,以包含Session ID信息,从而即使没有Cookie也能维持Session状态。 #### 13. JSP如何发送邮件? 虽然JSP本身并不直接提供发送邮件的功能,但可以通过调用Java Mail ...

    java学习心得.docx

    例如,在处理GET请求时,我们可能会使用`response.encodeURL()`方法对URL进行编码,以防止特殊字符引起的问题。同时,需要注意的是,如果重写了`init()`方法,别忘了调用`super.init();`以确保初始化的正确执行。 ...

    cookie会话技术

    String URL = response.encodeURL("/MyShop/SwitchBook?name=java"); out.println("点击购买&lt;/a&gt;"); ``` 这样即使用户禁用了Cookie,通过URL重写也能保持会话的状态信息。 #### 五、结论 Cookie作为一种常见...

    官方servlet3.0.rar

    提供了`RequestDispatcher`的`include()`和`forward()`方法的增强,以及`Response.encodeUrl()`的改进,支持URL重写,有助于实现无状态会话管理和SEO优化。 8. **过滤器链的改进(Filter Chain Improvements)** ...

Global site tag (gtag.js) - Google Analytics