关于URL重写的实现
对于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重写的实现相关推荐
- 配置伪静态(URL重写)
本篇借鉴了很多文章,这里做个记录. 有时我们的导航栏出现xx.aspx?id=x&name=xx 等等这样,会显得不好看,我们可以利用伪静态来美化我们的导航栏,伪静态的形式可以自己定义,本质还 ...
- ASP.net实现无扩展名的URL重写。简单、方便、无需ISAPI
URL重写已经有很多的方法,但是多数都有一个缺点,就是不支持无扩展名的网页.微软提供的方法需要在根目录里面建立jyk的文件夹,然后再建立一个default.aspx的文件,如果您有100名会员的话,这 ...
- 在 ASP.NET 中执行 URL 重写
在 ASP.NET 中执行 URL 重写 发布日期: 8/23/2004 | 更新日期: 8/23/2004 Scott Mitchell 4GuysFromRolla.com 适用范围: Micro ...
- Web服务器 之 Apache 2.x 服务器中的URL重写的配置和应用
作者:北南南北 来自:LinuxSir.Org 摘要: 本文是关于Apache 2.x 服务器中的URL别名规则的文档,它是通过rewrite模块来实现的.能过URL别名规则,我们能看到一个干净的UR ...
- Cento7+Nginx 之 URL重写
Cento7+Nginx 之 URL重写 我们前一篇文章写了一个Cento7+Nginx 反向代理实现多域名跳转,今天主要介绍一下Cento7+Nginx 之 URL重写, Hostname: ...
- asp.net用url重写URLReWriter实现任意二级域名 (转)
asp.net用url重写URLReWriter实现任意二级域名 Asp.net 用url重写(URLReWriter)实现任意二级域名 好久没有写技术文章,如果大家看不明白,就多看几篇,汗,或者,在 ...
- DTCMS插件的制作实例电子资源管理(四)URL重写
总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四) 本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分逻辑实现 ...
- ASP.NET Url重写
新建一个类,并实现IHttpModule接口 实现接口,在Init方法中处理请求,在请求方法中实现具体的Url重写操作 补充Url重写方法,通过 Request的Path对象获取请求文件路径,并根据请 ...
- apache配置反向代理以及实现url重写,防盗链
反向代理配置: 在apache配置文件中加上这一句 反向代理google(已测试) 安装mod_ssl模块:yum -y install mod_ssl 实现url重写: 在apache配置文件中加上 ...
- java urlrewriter_java url重写技术(UrlReWriter)
现在url重写技术用的越来越广泛了,很高兴今天和各位网友分享一下: 首先我们要从网上下一个UrlReWriter jar包 现在地址进不了,我这里有一个3.0版本的,文章底有下载地址,大家可以去下载 ...
最新文章
- 码code | 巧用2种方法,打破20条云开发数据库限制
- 【Python】参考ggplot2,Seaborn将迎来超大版本更新!
- Applese 走方格
- 在某游戏公司面试游戏运营的感受
- LeetCode Search Insert Position (二分查找)
- java贪吃蛇_如何用Java还原童年回忆?在线教你完成贪吃蛇小游戏
- .Net Core集成Office Web Apps(一)
- 初学echart的简单使用
- php框架进入命令行,swoole为何要用命令行来启动_PHP开发框架教程
- 如何解决Backup Exec Remote Agent推送安装失败的问题
- 苹果6邮件服务器错了如何修改,苹果手机ID电子邮件设错了怎么改
- java markdown 转 pdf_markdown转为pdf文件
- h5完整抽奖系统带php后台(含数据库脚本)
- Weblogic配置jms服务文档,是自己总结网上搜集到的资料以及自己亲自动手配置测试的总结。
- oCPC和CPC之间的区别
- 2018新年庙会归来
- ad怎么修改栅格_AD软件的3种栅格设置详解
- OCR中文文字识别软件
- Linux 重启网络服务
- 医学图像分割知识点总结
热门文章
- Nim问题和阶梯Nim(staircase nim)
- 树莓派怎么切换输入法_树莓派安装中文界面/输入法/远程桌面控制 实测笔记教学...
- FIPS 140-3与140-2的差异-5
- java.io.IOException: java.io.FileNotFoundException: C:\Users\26904\AppData 找不到指定的路径,自动跑到C盘里找,太离谱了。
- Gym实践(一)——环境安装
- IntelliJ IDEA / Webstorm 2019.3 PJ方法(永久有效)
- Vue.js使用CSS美化
- C++中空类占一字节原因详解
- 现在香港开银行账户又变难了
- Daily record-October