`

struts2 urlrewrite 404 错误解决办法

阅读更多

网站已经开发完毕,struts2+spring+hibernate。

    例如访问某文章的地址为:http://localhost:8080/showArticle/showArticle/showArticleAction.action?article.id=2 ,但是各个搜索引擎对动态页面的收录不是很好,所以想到网站静态化。

目前网站静态化大致有两种实现方式,一种就是生成html文件。另外一种就是对外界发布的时html地址,但是服务器内部依然时动态地址,这种实现方式又成为伪静态。由于项目已经开发完毕本人又比较懒所以选择伪静态实现网站的静态化。这里选用的是urlwrite。

下载了urlrewritefilter-2.5.0.zip,下载地址自己到网上检索下。

网站伪静态化步骤:

    1、下载后把urlrewrite-2.5.2.jar包添加到工程中。

    2、在web-info下建立urlrewriter.xml 内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<urlrewrite>
 <rule>
   <from>/showArticle_([a-z0-9]+).html</from>
         <to type="forward">/showArticleAction.action?article.id=$1</to>
 </rule>
 <rule>
   <from>/showList.html</from>
         <to type="forward">/showListAction.action</to>
 </rule>
</urlrewrite>

       3、在web.xml中添加flter,代码如下:

<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>WARN</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>UrlRewriteFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

注意:该filter要在Struts的filter之上

 

加入到工程后测试,发现转向到action的时候总是报404的错误,

修改为跳转到静态页面或者jsp可以跳转,但是换成Action路径不成。

分析原因是struts2的拦截器在作怪,尝试把to标签添加type=redirect,运行,可以跳转,但是由于是重定向,地址栏的地址又变成struts2的样子。

但是不加redirect还是报404,

分析,可能是struts2转向机制的问题,

查阅资料,说是要在配struts2拦截器的时候需要加:

<dispatcher>REQUEST </dispatcher>  
<dispatcher>FORWARD </dispatcher>  
<dispatcher>INCLUDE </dispatcher>


这三个节点。

但是个人感觉只要可以分发FORWARD就应该可以。

所以修改代码如下:

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

运行,正常,还有待大量测试。

发布项目,在浏览器地址栏敲:http://localhost:8080/showArticle/showList.html 就会被urlrewriter定位到http://localhost:8080/showArticle/showListAction.action  路径下了。

http://localhost:8080/showArticle/showArticle_1.html  就会被urlrewriter定位到http://localhost:8080/showArticle/showArticleAction.action?article.id=1 路径下

总结:

1、配置web.xml的时候,rewrite一定要在strtus2的上面。

2、strtus2的filter-mapping一定要添加:<dispatcher>FORWARD</dispatcher>

分享到:
评论

相关推荐

    urlrewritefliter 3.2.0jar包

    7. **配置文件**:通常,URL重写规则存储在`urlrewrite.xml`文件中,该文件位于Web应用的`WEB-INF/classes`目录下。开发者可以通过修改此文件来添加、删除或修改规则。 8. **日志和调试**:URLRewriteFilter提供了...

    安装broadleaf遇到的问题

    UrlRewrite是一个常用的URL重写工具,如Tuckey's UrlRewriteFilter,它常被用于Spring MVC或Struts2等Web应用中。要解决这个问题,你需要确保已经将UrlRewriteFilter的依赖添加到项目的pom.xml文件中,或者如果是...

    urlrewritefilter-4.0.3.jar

    - `UrlRewriteFilter`的配置主要在`urlrewrite.xml`文件中进行,包括一系列的 `&lt;rule&gt;` 标签,每个规则都包含匹配条件和重写规则。 - 匹配条件可以基于URL路径、查询参数、请求方法等,如`&lt;when&gt;`标签内的正则...

    J2EE武功秘籍

    - **Error**:系统级错误,通常无法通过程序逻辑解决,如 `OutOfMemoryError`。 **3. sleep() 和 wait() 区别** - **sleep()**:当前线程暂停执行指定的时间,不释放锁。 - **wait()**:线程等待直到被唤醒,释放...

    webx3框架指南PDF教程附学习Demo

    • Struts • Webwork • Tapestry • Spring MVC 以上框架都是非常优秀的。说实话,如果阿里巴巴网站在2001年开始,就有这么多可选择的话,无论选择哪一个都不会有问题。因为这些年来,所有的开源Web框架都在...

Global site tag (gtag.js) - Google Analytics