全国咨询/投诉热线:400-618-4000

JAVA培训之URL重写

更新时间:2016年08月26日13时54分 来源:传智播客JAVA培训学院 浏览次数:

URL重写

1.什么是URL重写

session是依赖于cookie或URL重写的,当浏览器端没有禁用Cookie,那么session就依赖cookie,即服务器会将session的id值存放在一个名为JSESSIONID的cookie中,浏览器再次访问服务器时,会将这个cookie带给服务器,这样在服务器端就可以根据获得session的id值找到对应的session,进而从session中获取数据。但是如果浏览器端禁用了cookie,就会出现如图1-1所示的情况:

图1-1 浏览器禁用cookie
由图1-1可知,如果浏览器端禁用了cookie,那么浏览器每次访问服务器时,服务器端只要调用了request.getSession()方法,服务器就会创建一个新的session对象。那么我们就不能再将数据保存在session中,因为新的session创建后,之前的session就无法获取了。
为了解决浏览器禁用cookie后所带来的问题,我们采用URL重写。所谓的URL重写就是将应用中的所有超链接、表单提交路径后面都添加一个特殊的请求参数,参数名为jsessionid,参数值为session的id值。当浏览器访问服务器时,在服务器端调用了request.getSession()方法,这个方法会在没有找到名为JSESSIONID的cookie的情况下,去请求参数中查找名为jsessionid的参数,并获取该参数的值,进而找到对应的session。
另外,需要注意的是,如果使用URL重写,那么应用中的所有超链接和表单提交路径都要进行URL重写,如果有一个超链接或表单路径没有进行URL重写,那么服务器就会认为没有为当前会话创建session,从而又为当前会话创建一个新的session,那么之前的session就无法获取了。

2.实现URL重写

通过对URL重写的了解,下面我们通过一个案例来了解如何实现URL重写,具体如下:
(1)创建一个web应用,名称为Example25,对该应用下的index.jsp文件进行编辑,如例1-1所示:
例1-1 index.jsp
  <body>
  <h1>index.jsp页面</h1>
    <a href="/Example25/url/one.jsp;jsessionid=<%=session.getId()%>">点击这里</a>
    <%=session.getId() %>
  </body>
例1-1中,在超链接中使用了URL重写,注意这里,如果URL后面跟的参数是jsessionid那么连接符就不再使用“?”而是使用“;”连接。
(2)在该应用下的WebRoot目录下新建一个目录url,并在该目录下新建一个jsp文件,one.jsp,主要代码如例1-2所示:
例1-2 one.jsp
<body>
<h1>one.jsp页面</h1>
   <a href="/Example25/url/two.jsp;jsessionid=<%=session.getId()%>">点击这里
   </a>
   <%=session.getId() %>
</body>
在one.jsp中有一个超链接,该超链接也使用了URL重写。
(3)在url目录下新建一个jsp文件,two.jsp,主要代码如例1-3所示:
例1-3 two.jsp
<body>
<h1>two.jsp页面</h1>
    <%=session.getId() %>
</body>
(4)将Example25发布到Tomcat服务器中,然后启动服务器,在浏览器端访问:http://localhost:8080/Example25/index.jsp,浏览器显示结果如图1-2所示:

图1-2 浏览器显示结果
(5)点击图1-2中的超链接“点击这里”,进入如图1-3所示界面:

图1-3 浏览器显示结果
(6)点击图1-3中的超链接“点击这里”,进入图1-4所示界面:

图1-4 浏览器显示结果
由图1-4、图1-3、图1-2可知,index.jsp、one.jsp以及two.jsp,这三个页面中的session是同一个session,也就是说使用URL重写与浏览器没有禁用cookie有一样的效果。
以上是我们手动在URL后面添加jsessionid,如果浏览器没有禁用cookie,那么在URL后面添加jsessionid参数就显得多余了。现在我们使用比较智能的URL重写:如果浏览器没有禁用cookie,那么就不进行URL重写,如果浏览器禁用了cookie就进行URL重写。
response.encodeURL(String url)方法可以实现智能的URL重写,该方法的参数是要进行URL重写的路径。例如,将index.jsp页面中的手动URL重写换成智能的URL重写:
<body>
  <h1>index.jsp页面</h1>
  <%String url=response.encodeURL("/Example25/url/one.jsp"); %>
    <a href="<%=url%>">点击这里</a>
    <%=session.getId() %>
  </body>
将浏览器设置为接受cookie,然后在浏览器端访问index.jsp页面,浏览器显示结果如图1-5所示:

图1-5 浏览器显示结果
设置浏览器禁用cookie,再次访问index.jsp页面,浏览器显示结果如图1-6所示:

图1-6 浏览器显示结果
由图1-5和图1-6可知,使用response.encodeURL(String url)方法可以实现智能的URL重写。
 
本文版权归传智播客Java培训学院所有,欢迎转载,转载请注明作者出处。谢谢!
作者:传智播客Java培训学院
首发:http://www.itcast.cn/javaee