对于session,我想大多学JAVAEE的同学都很清楚。

当一个客户请求一个页面时,服务器端会为该客户分配一个会话ID,

然后在返回给客户的响应头中添加一个头部:

Set-Cookie:JSESSIONID="32位长的16进制字符串"

客户端保存该会话ID,在下一次请求中把该会话ID添加到请求头中,

Cookie:JSESSIONID="32位长的16进制字符串"

服务器取出该首部,和服务器端已有的会话ID逐一匹配,查找到该用户的会话ID。

比如请求一个页面:

上述情况适用于客户接受COOKIE,如果客户拒绝接受COOKIE,则会话会失效。

如图:

为了解决该问题,可以采用URL重写。

在javax.servlet.http.HttpServletResponse接口中定义了两个方法:

public String encodeURL(String url)

public String encodeRedirectURL(String url)

这两个方法首先检查请求头是否包含Cookie投行,如果包含,则证明客户是支持COOKIE的,就不需要重写URL,

否则会将会话ID附加在URL之后(;jsessionid=???)

比如在一个web项目中,有两个JSP文件,index.jsp和page1.jsp

index.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><a href="<%= response.encodeURL("page1.jsp") %>">下一张页面</a></body>
</html>

page1.jsp:

<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="<%=basePath%>"><title>My JSP 'page1.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is page1! <br/><a href="<%= response.encodeURL("index.jsp") %>">首页</a></body>
</html>

在Internet选项中,选择隐私标签,阻止所有COOKIE。

然后启动Weblogic,或者Tomcat,部署项目。

敲入URL   http://127.0.0.1:7001/urltest/index.jsp (具体端口和ContextPath参照自己的项目)

在页面中点击鼠标右键,选择查看源文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="http://127.0.0.1:7001/urltest/"><title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body><a href="page1.jsp;jsessionid=T71DQbwMRYmh43P0TYYpF086BczGm0WyKXHfpcpsssPwYyN9hp4y!736619144">下一张页面</a></body>
</html>

点击超链接,链接到page1.jsp,再次查看源文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><base href="http://127.0.0.1:7001/urltest/"><title>My JSP 'page1.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0">    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"><!--<link rel="stylesheet" type="text/css" href="styles.css">--></head><body>This is page1! <br/><a href="index.jsp;jsessionid=T71DQbwMRYmh43P0TYYpF086BczGm0WyKXHfpcpsssPwYyN9hp4y!736619144">首页</a></body>
</html>

注意到:

<a href="page1.jsp;jsessionid=T71DQbwMRYmh43P0TYYpF086BczGm0WyKXHfpcpsssPwYyN9hp4y!736619144">下一张页面</a>

<a href="index.jsp;jsessionid=T71DQbwMRYmh43P0TYYpF086BczGm0WyKXHfpcpsssPwYyN9hp4y!736619144">首页</a>

你会发现在URL后面增加了";jsessionid=会话ID",说明URL重写成功!

注意事项:

如果使用URL重写,应该在应用程序的所有页面中,对所有的URL进行重写,包括超链接和表单action属性值

应用程序所有页面应该都是动态的,因为静态页面URL无法附加会话ID

所有的静态HTML页面必须通过SERVLET运行。

关于URL重写的实现相关推荐

  1. 配置伪静态(URL重写)

    本篇借鉴了很多文章,这里做个记录. 有时我们的导航栏出现xx.aspx?id=x&name=xx 等等这样,会显得不好看,我们可以利用伪静态来美化我们的导航栏,伪静态的形式可以自己定义,本质还 ...

  2. ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI

    URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页.微软提供的方法需要在根目录里面建立jyk的文件夹,然后再建立一个default.aspx的文件,如果您有100名会员的话,这 ...

  3. 在 ASP.NET 中执行 URL 重写

    在 ASP.NET 中执行 URL 重写 发布日期: 8/23/2004 | 更新日期: 8/23/2004 Scott Mitchell 4GuysFromRolla.com 适用范围: Micro ...

  4. Web服务器 之 Apache 2.x 服务器中的URL重写的配置和应用

    作者:北南南北 来自:LinuxSir.Org 摘要: 本文是关于Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的.能过URL别名规则,我们能看到一个干净的UR ...

  5. Cento7+Nginx 之 URL重写

    Cento7+Nginx  之  URL重写 我们前一篇文章写了一个Cento7+Nginx 反向代理实现多域名跳转,今天主要介绍一下Cento7+Nginx  之  URL重写, Hostname: ...

  6. asp.net用url重写URLReWriter实现任意二级域名 (转)

    asp.net用url重写URLReWriter实现任意二级域名 Asp.net 用url重写(URLReWriter)实现任意二级域名 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在 ...

  7. DTCMS插件的制作实例电子资源管理(四)URL重写

    总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...

  8. ASP.NET Url重写

    新建一个类,并实现IHttpModule接口 实现接口,在Init方法中处理请求,在请求方法中实现具体的Url重写操作 补充Url重写方法,通过 Request的Path对象获取请求文件路径,并根据请 ...

  9. apache配置反向代理以及实现url重写,防盗链

    反向代理配置: 在apache配置文件中加上这一句 反向代理google(已测试) 安装mod_ssl模块:yum -y install mod_ssl 实现url重写: 在apache配置文件中加上 ...

  10. java urlrewriter_java url重写技术(UrlReWriter)

    现在url重写技术用的越来越广泛了,很高兴今天和各位网友分享一下: 首先我们要从网上下一个UrlReWriter jar包 现在地址进不了,我这里有一个3.0版本的,文章底有下载地址,大家可以去下载 ...

最新文章

  1. 码code | 巧用2种方法,打破20条云开发数据库限制
  2. 【Python】参考ggplot2,Seaborn将迎来超大版本更新!
  3. Applese 走方格
  4. 在某游戏公司面试游戏运营的感受
  5. LeetCode Search Insert Position (二分查找)
  6. java贪吃蛇_如何用Java还原童年回忆?在线教你完成贪吃蛇小游戏
  7. .Net Core集成Office Web Apps(一)
  8. 初学echart的简单使用
  9. php框架进入命令行,swoole为何要用命令行来启动_PHP开发框架教程
  10. 如何解决Backup Exec Remote Agent推送安装失败的问题
  11. 苹果6邮件服务器错了如何修改,苹果手机ID电子邮件设错了怎么改
  12. java markdown 转 pdf_markdown转为pdf文件
  13. h5完整抽奖系统带php后台(含数据库脚本)
  14. Weblogic配置jms服务文档,是自己总结网上搜集到的资料以及自己亲自动手配置测试的总结。
  15. oCPC和CPC之间的区别
  16. 2018新年庙会归来
  17. ad怎么修改栅格_AD软件的3种栅格设置详解
  18. OCR中文文字识别软件
  19. Linux 重启网络服务
  20. 医学图像分割知识点总结

热门文章

  1. Nim问题和阶梯Nim(staircase nim)
  2. 树莓派怎么切换输入法_树莓派安装中文界面/输入法/远程桌面控制 实测笔记教学...
  3. FIPS 140-3与140-2的差异-5
  4. java.io.IOException: java.io.FileNotFoundException: C:\Users\26904\AppData 找不到指定的路径,自动跑到C盘里找,太离谱了。
  5. Gym实践(一)——环境安装
  6. IntelliJ IDEA / Webstorm 2019.3 PJ方法(永久有效)
  7. Vue.js使用CSS美化
  8. C++中空类占一字节原因详解
  9. 现在香港开银行账户又变难了
  10. Daily record-October