java中urlRewriter的使用

现在很多网站都会使用这样的技术,就是url重写,究竟有什么用呢?网上很多人都说便于搜索引擎收录,这一点我buy,毕竟不是所有的搜索引擎都会提高动态页面的权。而且这样的url比较短,便于收录那是肯定的。再者可以隐藏实现技术,当然这个只是对于普通的菜鸟才会有效,要想知道你的实现技术太容易了。当然知道了也没什么大不了的。只要腰杆直,咱也不怕你来挑衅。

http://www.soku.com/search_video/q_电影

平时可能就是直接xxx.action?q=xxxxx,用Url Rewrite Filter就可以实现了,这东西的实现方式就是一个javax.servlet.Filter,目前的最新版本是4.0,这个版本还在测试中,推荐使用urlrewritefilter-3.2.0.zip ,这个版本比较稳定。网上很多人发的网址都是下不了的。这个是可以下的。作为学习之用还有更好的配置,源码你也下下来吧。源码包urlrewritefilter-3.2.0-src.zip 包含了一些例子,还有源码,配置说明等等。其实下源码包就足够了,它里面也包含了jar文件。在webapp\WEB-INF目录下,自己找找就的了。

好了,开始说说怎么使用吧,也就是helloworld啦。实际上会个helloworld就差不多了。

拷贝urlrewrite-3.2.0.jar到web的lib目录下,urlrewrite.xml文件拷贝到WEB-INF目录下。拷贝以下这段代码到你的web.xml文件里面,就是配置一个Filter,在servlet3.0,你可以选择直接继承该类,加个注解,也是可以的。具体怎么做上网去查怎么创建一个Filter吧。

<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> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping>
urlrewrite.xml基本格式如下

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
<rule>
<from>/a_([0-9]*)</from>
<to>/a.action?id=$1</to>
</rule>
</urlrewrite>

这样就是配置就一个url,如:/a_1,实际上访问的是/a.action?id=1

如果是多个参数,那又该怎么配呢?

源码包给出的例子如下:

eg 1:


<from>/a/([0-9]*)/([0-9]*)</from>
<to>/a.action?id=$1&typeid=$2</to>

eg 2:


<from>/a-([0-9]*)-([0-9]*)</from>
<to>/a.action?id=$1&typeid=$2</to>

这些明显不能满足我们的需求,不知道网友有没有遇到跟我一样的情况,就是想配成如下这个样子:

/a_id_0_type_1,配置如下:


<from>/a_id_([0-9]*)_type_([0-9]*)</from>
<to>/a.action?id=$1&typeid=$2</to>

运行的时候,会发现报404错误,按照正常来说,应该是没有问题的呀,但就是有问题,怎么办呢?当时我也是用的很急,也就没想过这么多了,就直接用人家的。

想想难道这是人家已经规定好只能是'/','-'才能作为分割符吗?这个不是正则表达式吗?分组应该是没有问题的呀。我开始想到的解决方法是在'_'前面加一个'\'字符,也就是如下配置啦:

<from>/a_id_([0-9]*)\_type_([0-9]*)</from>
<to>/a.action?id=$1&typeid=$2</to>

还别说,行了。哈哈,想不到吧,'_'要转义才行。这也太神奇了吧。

后来我又试了另外一种方法,也就是在括号外面再加多一个括号。配置如下:

<from>/a_id_(([0-9]*))_type_(([0-9]*))</from>
<to>/a.action?id=$1&typeid=$2</to>

行了。加什么字符(转义字符另说)都可以了。

先写到这里。待续。

http://www.iduona.com这个网站是我写出来的,大家可以进去看看,查看源代码可以发现很多有趣的东西的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值