java UrlRewrite技术简单介绍

我们先简单的了解一下使用Url重写能给你网站带来哪些好处。

第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。
第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。
第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。
第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。
它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就以为着又多了一道访问,会多少影响点访问速度的,这个可以忽略不计的。
现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。
首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter) ,看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().
下面我们就快速的为你的网站搭建Url重写技术。
第一步:下载urlrewrite-2.6.0.现在最新版本是3.1的。把urlrewrite-2.6.0.jar拷到classpath下。
第二步:在WEB-INF目录下建一个urlrewrite.xml文件。
第三步:在web.xml中初始化。加上下面的代码:

 代码如下 复制代码
<!– Set URL Rewrite–>
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

最后我要简单的讲一下常用的两个配置规则.以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成urlRewrite.xml,这样即使你加上

 代码如下 复制代码

<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/urlRewrite.xml</param-value>
</init-param>
  在启动的服务器的时候还是会报错的,因为源码中必须是全小写的(urlrewrite.xml)且只能放到WEB-INF下面。
<urlrewrite>
<rule>
<from>^/(w+)/(w+)/page_(d+).html$</from>
<to type=”forward”>/$1.htm?category=$2&amp;page=$3</to>
</rule>

</urlrewrite>

所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。

 代码如下 复制代码
<rule>
<from></from>
<to type=”forward></to>
</rule>
  <from></from>

写上你自己定义的访问地址,<to type=”forward></to>就是实际的访问地址。
比如我们实际的访问地址是:http://www.111cn.net?post=34
而我们想把它重写为http://www.111cn.net/java/urlwriter.html。
这样看起来比我们实际的要好看的多。
我们就应该这样的写: 

 代码如下 复制代码
<rule>
<from>^/java/urlwriter.htm</from>
<to type=”forward”>/(w+)?post=34$</to>
</rule>

简单的介绍一下常用的正规表示式:
代码 说明
. 匹配除换行符以外的任意字符
w 匹配字母或数字或下划线或汉字
s 匹配任意的空白符
d 匹配数字
b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束

常用的&要用  &amp;来表示。$1,$2代表与你配置正规表达式/(w+)/(w+)/相对应的参数。<to type=”forward”>默认的是 type=”forward”.

我自己用的例子

第一步下载jar包
在http://tuckey.org/urlrewrite/#download下载最新的jar文件,当前最新的是Beat3.2我下载的是urlrewritefilter-2.6.zip。解压得到urlrewrite-2.6.0.jar 和 urlrewrite.xml

第二步新建Web项目TestUrlRewrite,
在WebRoot下新建index.jsp,修改其代码如下所示:

 代码如下 复制代码

<%@ page contentType="text/html; charset=UTF-8"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

       <head>

              <title>测试TestUrlRewrite</title>

       </head>

       <body>

              <%

                     String id = (String) request.getParameter("id");

                     out.println("<h3> the value is  : " + id +" </h3> ");

              %> 

</body>

</html>

【第四步】发布程序
将程序发布到Tomcat中,然后在浏览器输入如下地址:
http://localhost:8080/TestUrlRewrite/index.jsp?username=niejingyu,页面展示效果如图1所示:


 

【第五步】添加urlrewrite文件
将urlrewrite-2.6.0.jar复制到WebRootWEB-INFlib下。
将urlrewrite.xml复制到WebRootWEB-INF下,其中urlrewrite.xml代码如下所示:

 代码如下 复制代码

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

<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.1//EN"

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

<urlrewrite>

       <rule>

              <from>/(.*).html</from>

              <to>index.jsp?id=$1</to>

       </rule>

</urlrewrite>

 

*.html 是一个正则表达式的串。如果你对这个不理解可以学习一下java中正则表达式的应用。
    $1 也是一个正则表达式的语言匹配正则中的组捕获。
 

【第六步】修改web.xml文件
在web.xml 增加如下内容:

 代码如下 复制代码

<filter>

       <filter-name>UrlRewriteFilter</filter-name>

       <filter-class>

              org.tuckey.web.filters.urlrewrite.UrlRewriteFilter

       </filter-class>

       <init-param>

              <param-name>logLevel</param-name>

              <param-value>DEBUG</param-value>

       </init-param>

</filter>

<filter-mapping>

       <filter-name>UrlRewriteFilter</filter-name>

       <url-pattern>/*</url-pattern>

</filter-mapping>

重启tomcat

       访问http://localhost:8080/TestUrlRewrite/2.html,页面效果如图所示:


 

在这里是匹配/(.*).html,将请求转发到index.jsp?id=$1。你还可以根据需要转到xxx.action?id=$1

时间: 2024-07-29 11:49:39

java UrlRewrite技术简单介绍的相关文章

Microsoft Tag二维条形码技术简单介绍

经过一年半的漫长等待,前几天微软终于将其"Microsoft Tag"产品从Beta版改为了正式版本."Microsoft Tag"就是微软自家的一种二维条形码技术,不过和我们常规看到的那些黑白的二维条形码不一样的地方在于微软用了彩色的三角形来存储数据信息.本文则对于Microsoft Tag系统做一简单的介绍,希望对大家有所帮助. 如下图所示为我们WPMind的手机访问网址的Microsoft Tag码和常规的QRCode码: 和常规各种条形码还有一点不同的地方在

Java 处理 XML 的三种主流技术及介绍

XML (eXtensible Markup Language) 意为可扩展标记语言,它已经是软件开发行业中大多数程序员和厂商用以选择作为数据传输的载体.本文作者对于 Java 处理 XML 的几种主流技术进行一些总结和介绍,希望帮助那些有不同需求的开发人员对于 XML 处理技术的作出最优的选择. 最初,XML 语言仅仅是意图用来作为 HTML 语言的替代品而出现的,但是随着该语言的不断发展和完善,人们越来越发现它所具有的优点:例如标记语言可扩展,严格的语法规定,可使用有意义的标记,内容 存储和

Java中ArrayList的使用方法简单介绍_java

ArrayList没有封装好的去重方法,比如对于一个[2, 5, 2, 3, 2, 4]的ArrayList,我要去除其中的重复的元素, 我也不想把语句也这么长,也不想用for循环的方法去重,那么可以先考虑把ArrayList转化为一个临时的HashSet,再把这个临时的HashSet转化回ArrayList,因为HashSet里面的元素是不可重复的嘛!至于什么是ArrayList与HashSet,在<详解java中的Collections类>已经说得很清楚了,这里不再赘述.  你可以这样写:

简单介绍Java编程中的线程池_java

从 Java 5 开始,Java 提供了自己的线程池.线程池就是一个线程的容器,每次只执行额定数量的线程. java.util.concurrent.ThreadPoolExecutor 就是这样的线程池.它很灵活,但使用起来也比较复杂,本文就对其做一个介绍. 首先是构造函数.以最简单的构造函数为例: public ThreadPoolExecutor( int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit uni

深入浅出Java clone技术

这是clone技术介绍的第一篇.本篇主要介绍对象clone技术的基本知识. Clone基本知识储备在Java里提到clone技术,就不能不提java.lang.Cloneable接口和含有clone方法的Object类.所有具有clone功能的类都有一个特性,那就是它直接或间接地实现了Cloneable接口.否则,我们在尝试调用clone()方法时,将会触发CloneNotSupportedException异常.下面我们通过对Object类的部分源码的分析,来发现和理解这一特性.请看JDK中O

Java加密技术(一)——BASE64与单向加密算法MD5&amp;amp;SHA&amp;amp;MAC

 加密解密,曾经是我一个毕业设计的重要组件.在工作了多年以后回想当时那个加密.解密算法,实在是太单纯了.     言归正传,这里我们主要描述Java已经实现的一些加密解密算法,最后介绍数字证书.     如基本的单向加密算法:  BASE64 严格地说,属于编码格式,而非加密算法 MD5(Message Digest algorithm 5,信息摘要算法) SHA(Secure Hash Algorithm,安全散列算法) HMAC(Hash Message Authentication Cod

JAVA缓存技术之EhCache(转)

最近再ITEYE上看到关于讨论JAVA缓存技术的帖子比较多,自己不懂,所以上网大概搜了下,找到一篇,暂作保存,后面如果有用到可以参考.此为转贴,帖子来处:http://cogipard.info/articles/cache-static-files-with-jnotify-and-ehcache 介绍 JNotify:http://jnotify.sourceforge.net/,通过JNI技术,让Java代码可以实时的监控制定文件夹内文件的变动信息,支持Linux/Windows/MacO

json简单介绍_json

JSON简单介绍: 所谓的JSON是JavaScript Object Notation的缩写,意思是javascript对象表示法. 下面对JSON做一下总结: (1).JSON指的是javascript对象表示法,是JavaScript Object Notation的缩写. (2).JSON是轻量级的文本数据交换格式. (3).JSON是独立于平台和语言的. (4).JSON是具有自我描述性,非常易于理解. 特别说明:JSON是一种用来规范字符串数据格式的语法. 代码实例: 实例一: 上面

Ubuntu中为Android简单介绍硬件抽象层(HAL)

Android的硬件抽象层,简单来说,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节. 对硬件的支持分成了两层,一层放在用户空间(User Space),一层放在内核空间(Kernel Space),其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间.为什么要这样安排呢?把硬件抽象层和内核驱动整合在一起放在内核空间不可行吗?从技术实现的角度来看,是可以的,然而从商业的角度来看,把对硬件的支持逻辑都放在内核空间,可能会损害厂家的利益.我们知道,Linux内