东东东 陈煜东的博客

java struts 2伪静态url rewrite重写

在开发网页的过程中,需要改写(url rewrite)一些URL地址,避免暴露一些具体的文件夹位置。

比如使用http访问/archives/2.html,实际上是访问/post?id=2这个页面,但是后者对搜索引擎不好,而且将来如果想用/article?articleID=2来替换/post?id=2,这样需要对许多页面进行更改,不方便,搜索引擎的搜录也会减少。通过此方法还可以隐藏jsp后缀名。所以使用URL rewrite技术可以实现我们的这个需求。

如果你不知道什么是url重写这个概念,可以看看相关的资料。好了,我们继续。

在struts 2项目中,使用URL rewrite需要使用的UrlRewriteFilter这个类库,下载地址http://tuckey.org/urlrewrite/

官网上的步骤写的很清楚,先添加jar包,配置过滤器,添加url rewrite规则。

要注意是

1.在web.xml中配置filter过滤器,UrlRewriteFilter 要先写,struts后写。

2.在web.xml中struts的过滤器要这样写

<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

如果没有REQUESTINCLUDE,在映射到action的时候,会出现404 not found错误。如果是映射jsp文件,则不会发生错误。对于REQUEST和INCLUDE在页面使用一些东西的时候,会出现错误。比如异常The Struts dispatcher cannot be found或者 This is usually caused by using Struts tags without the associated filter。所以,当出现问题的时候,请务必加上REQUESTINCLUDE

我就因为这样的原因,郁闷了一段时间,redirect可以工作,forward却不能工作。

3.在urlrewrite.xml中,对应的规则,如果是接收的参数有多个,不用&,而是使用&amp;进行分开。

例如,应该这样写

<rule>
     <from>/products/([0-9]+)/([0-9]+).html</from>
     <to>/products/index.jsp?product_category=$1&amp;id=$2</to>
</rule>

声明:未经允许禁止转载 东东东 陈煜东的博客 文章,谢谢。如经授权,转载请注明: 转载自东东东 陈煜东的博客

本文链接地址: java struts 2伪静态url rewrite重写 – https://www.chenyudong.com/archives/java-web-struts-url-rewrite.html

分类: 网站建设

sina weibo qq oauth2 login » « 2013年9月 GoDaddy域名优惠码

6 评论

  1. 不懂java,php都不太懂。

  2. $1对应第一个([0-9]+),$2对应第二个([0-9]+)吗?

  3. 你好,我做过类似的但是我有一点不明白,就是struts转发他还是原来的*.Action你知道如何静态化吗?

  4. 纠结了一天的问题,被你这一个帖子解决了,跪谢了。

发表评论

邮箱(不会被公开)

*

Copyright © 2019 东东东 陈煜东的博客 粤ICP备13059639号-1

SITEMAP回到顶部 ↑