现在大部分的网站和商城都会使用到URL重写,接触到这个,也是因为正在做的电子商务商城。URL重写,是将原有的URL采用另一种规则来显示,使得用户方便访问同时也屏蔽一些信息。

在此说下它的好处,在开发过程中,经常会遇到一些带了一大堆参数的URL,这样子,一方面显得烦乱,另一方面,一些信息直接显示在URL上,会有些安全性问题。使用URL重写,可以使带有参数的URL以一种较规则的方式体现,如:

/demoAction?id=1            ==>            /demo1.html

它也将本该在URL上显示出来的传参给隐蔽起来,隐藏了技术实现和敏感信息。另外,URL重写,也有利于搜索引擎的访问。

最近项目接触到的URL重写采用的是UrlRewrite,它主要是采用Filter技术在用户请求的时候对访问的URL进行处理,来实现重写的作用。

以下是UrlRewrite的使用实例(个人认为,UrlRewrite的官方文档写的还是比较全面易懂的)

UrlRewrite的导入:

UrlRewrite的导入非常简单,首先需在项目的lib文件夹中加入urlrewrite-3.2.0.jar包,然后,在web.xml中声明Filter

1

2 UrlRewriteFilter

3 org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

4

5

6 UrlRewriteFilter

7 /*

8 REQUEST

9 FORWARD

10

11

声明完filter后,需要在WEB-INF目录下新建一个urlrewrite.xml文件

1 <?xml version="1.0" encoding="utf-8"?>

2 "http://tuckey.org/res/dtds/urlrewrite3.0.dtd">

5

6

7

8

该文件是UrlRewrite的规则制定文件,后续主要通过配置它来进行URL的重写。

至此,UrlRewrite的导入就完成了

UrlRewrite 导入成功后,接下来主要通过在urlrewrite.xml添加规则,就能实现URL的重写了。在此列举一些常用的规则。

1

2 ^/demo/(\w+).html$

3 /Struts/$1

4

rule 是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。关于from,UrlRewrite有两种匹配的模式,一种是正则表达式匹配,一种的通配符匹配,如上就是正则表达式匹配。当进行匹配的时候,匹配部分的正则可以被提取为参数进行传递

1

2 ^/demo1/(\w+)/(\w+).html$

3 /Struts/$1.action?age=$2

4

rule 的默认匹配方式是正则表达式,但是,有时候也可以以通配符的形式进行匹配。在编写规则的时候,只需要在rule添加一个match-type="wildcard" 的属性即可。

1

2 /demo2/*/*

3 /Struts/$1.action?age=$2

4

关于to节点,UrlRewrite提供了多种网址跳转方式,如forward和redirect,这两种方式,和大部分MVC框架提供的功能一样,在此不再赘述。

除了支持指定规则的跳转外,UrlRewrite还支持当匹配规则的时候执行某个对象的某个函数

1

2 ^/demo3/(\w+)/(\w+).html$

3

4 /Struts/$1.action?age=$2

5

如上述设置,要实现匹配规则是执行某个函数,需要添加多一个run节点,在节点上面添加对应的类属性和方法属性。同时,对应的类必须继承RewriteRule类,执行的方法必须传入两个参数,分别是HttpServletRequest 和HttpServletResponse

1 public class Demo extends RewriteRule{2

3 public void log(HttpServletRequest request,HttpServletResponse response){4 System.out.println("haha1");5 }6

7 public void log2(HttpServletRequest request,HttpServletResponse response){8 System.out.println("haha2");9 }10 }

这样,当客户端输入的网址第一次匹配到指定规则的时候,UrlRewrite就会执行对应的函数,该函数只在第一次匹配成功的时候执行。

如果想要每次匹配规则都执行某函数,可以在urlrewrite添加class-rule子节点,该节点设置后,每次匹配规则后,指定的函数都会执行一次。

1

除了对请求的URL进行处理外,UrlRewrite还提供了对返回页面中的地址进行重写的功能。使用rule是对用户输入的url进行处理,但是开发过程中,经常需要在页面中也添加一些网址请求,UrlRewrite可以通过规则,对页面中的网址也进行重写。如:

1

2 /(\w+).action\?id=(\w+)$

3 /$1.html

4

在UrlRewrite中添加该规则后,我们在页面中原本的地址是

可是在页面中显示却成了如下:

这样可以隐藏了许多开发中的技术,较为安全。

以上,就是UrlRewrite的一些常见的用法。关于UrlRewrite,网上也有人说这个会影响性能,因为在每次请求的时候都需要经过换一次过滤,但是这个还是要见仁见智,毕竟,使用URL重写,对网址还是有好处的。

UrlRewrite的帮助文档:http://pan.baidu.com/s/1c0fg0uc

java 重写url_网站URL重写(Java UrlRewrite 的使用)相关推荐

  1. java学习视频网站_学习Java的视频网站

    原标题:学习Java的视频网站 很多自学Java的人都发现网上的Java视频教程都会分章节讲解,但是总感觉很乱?那是因为你没有比较系统.全面的了解Java语言,没有将Java应用到实际项目中,那么有哪 ...

  2. apache php url重写语法,apache url重写实现伪静态

    前段时间项目为了配合seo的工作,把现有的php网站改成静态页面,刚拿到需求时候第一感觉就是用静态页面啊,可是看了一会以后发现页面有点多4.50个,没办法就用比较简单的url重写(apache的)吧, ...

  3. 学习java的中文网站_学习java的网站有哪些

    1.Stack overflow Stack可能是编程界中非常流行的网站了 , 是一个与程序相关的 IT 技术问答网站,用户可以在网站免费提交问题,浏览问题,索引相关内容,在创建主页的时候使用简单的 ...

  4. Win10 IE11浏览器,您正在查看的页使用 Java,Microsoft 网站提供有关 Java 支持的更多信息 解决

    最近工作需要支持下IE11浏览器,使用java applet控件. 以前IE10及以下版本都比较正常,但是IE11会出现一些比较奇怪的现象. 记录下解决的方法和过程,便于有需要的同学自取. 1.首先是 ...

  5. java动态url_使用url Param的动态主题

    快速简单的答案是使用$ rootScope . $ rootScope可供所有控制器使用,但是应该谨慎使用所有全局变量 . 基本上,如果你在你的两个控制器上使用它来寻找页面x和y app.contro ...

  6. 基于java的购物网站论文,基于JAVA购物网站的设计与实现(SSH,MySQL)

    基于JAVA购物网站的设计与实现(SSH,MySQL)(任务书,开题报告,中期检查表,毕业论文14000字,程序代码,MySQL数据库,答辩PPT) 功能模块需求分析 本系统最大的特点是使用操作简单. ...

  7. tp3 普通模式url模式_[tp3.2.1]开启URL(重写模式),省略URL中的index.php

    重写模式(省略url中的index.php) 在apache配置文件httpd.conf中,查找 1.mod_rewrite.so, 启动此模块 2.AllowOverride , 值= All 3. ...

  8. Url Rewrite 再说Url 重写

    前几天看到园子里一篇关于 Url 重写的文章<获取ISAPI_Rewrite重写后的URL> , URL-Rewrite 这项技术早已不是一项新技术了,这个话题也已经被很多人讨论过多次.搜 ...

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

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

最新文章

  1. 快速删除c/c++语言中的注释
  2. Flask入门之Jinjia模板的一些语法
  3. Java基础 HashMap实现原理及方法
  4. 前端学习(547):node的系统模块fs
  5. 普中51控制火焰传感器_汽车爆震传感器的工作原理及的检测方法、处理
  6. python编码操作技巧总结
  7. 2013蓝桥杯java试题_2013年第四届蓝桥杯javaB组 试题 答案 解析
  8. python如何读取文本_python 如何读取windows-1252格式文本?
  9. Python取出SQL表单中的字段名
  10. shell之BASH_SOURCE
  11. 云计算概念的基本介绍,云计算的特点主要有哪些?
  12. aspack脱壳脚本的编写
  13. Mybatis学习之一 引入dtd文件
  14. 基于超声波的库位重定位算法
  15. 算法的五大要素 学计算机必备
  16. 揭密巴西Banrisul银行网站遭遇5小时劫持的原因
  17. ctrl键频繁失灵,但不是键盘本身的问题,换个键盘同样失灵
  18. 群晖 mysql 端口配置_群晖DS218+部署mysql
  19. 技术不是越来越简单,而是框架是你的羁绊
  20. 速卖通自定义html模板,速卖通运费模版如何设置?

热门文章

  1. 联想重启乐檬?5G时代手机双品牌战略带来变局 1
  2. 【公开课预告】:超分辨率技术在视频画质增强领域的研究与应用
  3. 玩转示波器从这里开始
  4. 移动开发-混合App介绍
  5. mysql搞笑代码_搞笑代码注释,佛祖保佑 永无BUG
  6. 马斯洛需求层次结构、配置控制委员会CCB、领导者和管理者、战略组织模式
  7. 5D9DVR动感平台常见故障码说明及故障处理
  8. Spring Boot 四大核心机制
  9. ZMQ之克隆模式的可靠性
  10. dockerfile中的env指令_Dockerfile中的ENV指令详解