一般来说我们在用Struts2进行开发的时候我们的访问url都是带上一些类似于.action或者.do还有用?传递参数,这种访问方式与静态页面的访问相比,我就可以用
一些开源的组件来进行url的重写,以实现伪静态,虽然这样对于访问速度并没有提高,但是有一个很明确的好处就是经过url重写的url是更有利于搜索引擎优化的,还有一个好处就是完全隐藏了一些action的结构,下面就让我们来看看怎么进行url的重写

首先,这要用到两个软件包,一个是SmartUrls(Struts2的插件,下载地址:http://code.google.com/p/smarturls-s2/downloads/list),还有就是urlrewritefilter(下载地址:http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip).
要想去掉struts2的后缀,就要这样配置filter:
<filter> 
<filter-name>struts2</filter-name> 
<filter-class>org.texturemedia.smarturls.SmartURLsFilter</filter-class>
</filter>用这个代替struts2的核心过滤器,FilterDispatcher。不必担心struts2不起作用了,因为这个过滤器是继承自FilterDispatcher的。同时在struts.properties中加入struts.action.extension= ,不设任何值。
然后就是配置UrlRewriteFilter,如下
<filter> 
<filter-name>UrlRewriteFilter</filter-name> 
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
</filter>

在配置filter-mapping的时候,注意urlrewritefilter的应该在前面。然后urlrewritefilter的重写该怎么用大家可以参看文档,这里就不再赘述。

当使用时发现重写后,filterChain上只有一个urlrewritefilter,而没有经过smartUrls就发到了请求的资源,得到的自然是一个404错误。于是我参看urlrewritefilter的源代码发现,如果重写url成功的话,将会调用RequestDispatcher的forward方法转发到资源,而重写不成功或者是没有重写才会调用filterChain.dofilter。所以struts2的filter-mapping应该这样配置
<filter-mapping> 
<filter-name>struts2</filter-name> 
<url-pattern>/*</url-pattern> 
<dispatcher>FORWARD</dispatcher> 
</filter-mapping> 
然后就 OK 了
最后说明一点,这要在支持servlet2.4以上规范的容器中才气作用,因为servlet2.3规范里面,过滤器只支持request过滤,不支持转发之类的过滤

//下面介绍另外一种思路
需要修改的地方是:
<filter-mapping> 
<filter-name>struts2 </filter-name> 
<url-pattern>*.do </url-pattern> 
<dispatcher>REQUEST </dispatcher> 
<dispatcher>FORWARD </dispatcher> 
<dispatcher>INCLUDE </dispatcher> 
</filter-mapping>
1.1URLRewirte的用处
1.满足搜索引擎的要求。
2.隐藏技术实现,提高网站的移植性。
3.满足美感的要求(个人感觉这个用处太牵强)。
1.2项目部署
1.首先在http://tuckey.org/urlrewrite/下载urlrewirtefilter,现在有2.6.0和3.2.0两个版本,这里我选择的是前面一个稳定版本。
2.解压所下载的文件,把urlrewrite-2.6.0.jar复制到项目的WebRoot/WEB-INF/lib/目录下,然后编译。
3.把urlrewrite.xml复制到项目的WebRoot/WEB-INF/目录下
4.在web.xml文件中加入以下:
1 <!-- 动态地址静态化 -->
2 <filter>
3 <filter-name>UrlRewriteFilter</filter-name>
4 <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
5 <init-param>
6 <param-name>logLevel</param-name>
7 <param-value>WARN</param-value>
8 </init-param>
9 </filter>
10 <filter-mapping>
11 <filter-name>UrlRewriteFilter</filter-name>
12 <url-pattern>/*</url-pattern>
13 </filter-mapping> 
5.需要配置urlrewrite.xml文件来实现url静态化,下面将详细说明

1.3 如何静态化
到这里相关的配置已经完成,下面看如何把动态地址静态化:

(1)普通url静态化
例如:要把http://localhost/prjtest/user/list.jsp转换成http://localhost/prjtest/user/list.html
这种是最简单的,当一个servlet跳转到list.jsp页面列出user列表时,在urlrewrite.xml中这样配置:
1 <rule>
2 <from>^/user/list.html</from>
3 <to>/user/list.jsp</to>
4 </rule> 
当请求/user/list.html这个页面时,实际上相当于请求/user/list.jsp页面
在servlet的跳转要这样写:
response.sendRedirect("./user/list.html");
(2)带参数的url静态化
例如:要把http://localhost/prjtest/user/view.jsp?cid=1&cname=admin转换成
http://localhost/prjtest/user/view/1_admin.html
在urlrewrite.xml中这样配置:
1 <rule>
2 <from>^/user/view/([0-9]+)_([a-z]+).html$</from>
3 <to>/user/view.jsp?cid=$1&cname=$2</to>
4 </rule>
当请求/user/view/1_admin.html这个页面时,实际上相当于请求/user/list.jsp?cid=1&cname=admin页面,在servlet的跳转要这样写(cid,cname为变量):
response.sendRedirect("./user/view/"+ cid +"_"+ cname +".html");
注意:配置文件中用"&"来代替"&"。
一个通用的正则表达式:[a-zA-Z0-9]+
1.4 小结
使用URLRewirte可以方便的进行地址伪静态化,配置规则也相对比较方便。不过在项目设计的时候需要制定地址匹配规则,以使在开发的过程中直接利用该规则进行编码。如果是对已有的项目进行地址伪静态化比较麻烦,需要对所有的页面、跳转进行修改,工作量较大,同时也容易忽略一些URL。
一句话,其实它并没有达到静态化要求,只是相当于将地址进行了改写。

经过上面的一些步骤我们基本就实现了在Struts2中进行url的重写!

本文来自: 114JAVA技术网(www.114java.com) 详细出处参考:http://www.114java.com/javakaiyuankuangjia/struts2_0/201005/1275.html

Struts2进行url重写的更多相关文章

  1. Nginx 反向代理、负载均衡、页面缓存、URL重写及读写分离详解

    转载:http://freeloda.blog.51cto.com/2033581/1288553 大纲 一.前言 二.环境准备 三.安装与配置Nginx 四.Nginx之反向代理 五.Nginx之负 ...

  2. 用.htaccess文件实现URL重写

    注:第一部分来自 http://www.cnblogs.com/wangkongming/archive/2012/11/13/2768251.html     这位博主的个人网站简洁   还有诗歌  ...

  3. ASP.NET Core中使用URL重写

    ASP.NET Core 1.1 Preview 1 中新增了 URL Rewriting middleware ,终于可以进行 URL 重写了,实际使用体验一下. 首先要将 ASP.NET Core ...

  4. 微软的坑:Url重写竟然会引起IIS内核模式缓存不工作

    万万没有想到!当初为了解决使用负载均衡时记录客户端IP地址的问题,在IIS URL Rewrite Module中增加了一条URL重写规则(详见迁入阿里云后遇到的Request.UserHostAdd ...

  5. 【url重写】

    一.原理void Application_BeginRequest(object sender, EventArgs e)    {  //url重写        HttpApplication a ...

  6. asp.net mvc 中 一种简单的 URL 重写

    asp.net mvc 中 一种简单的 URL 重写 Intro 在项目中想增加一个公告的功能,但是又不想直接用默认带的那种路由,感觉好low逼,想弄成那种伪静态化的路由 (别问我为什么不直接静态化, ...

  7. UrlRewritingNet伪静态的使用方法与解决方案(URL重写)

    在建站初期时,我们往往需要考虑的是使用真静态还是伪静态,这对于往后的站点配置,延展性都会产生深远的影响. 我使用伪静态的唯一目的:SEO优化.毋容置疑,伪静态在对于Spider是非常有利的,因此,我更 ...

  8. nginx的URL重写应用实例

    1,NGINx的URL重写 NGINX 的URL重写模块用的比较多,主要使用的命令有if rewrite set break 2 if命令 语法如下"" 语法:if(conditi ...

  9. springMVC学习之url重写:urlrewrite with tuckey UrlRewriteFilter

    在开发网站时地址栏的一些信息是我们不希望让客户看到,所以在开发时候就会涉及到url重写的问题. 下面介绍一种常用的url地址重写的方法. 1.利用maven下载相关jar文件,pom文件配置如下: & ...

随机推荐

  1. 基于Bootstrap的DropDownList的JQuery组件的完善版

    在前文 创建基于Bootstrap的下拉菜单的DropDownList的JQuery插件 中,实现了DropDownList的JQuery组件,但是留有遗憾.就是当下拉菜单出现滚动条的时候,滚动条会覆 ...

  2. JAVA爬虫挖取CSDN博客文章

    开门见山,看看这个教程的主要任务,就去csdn博客,挖取技术文章,我以<第一行代码–安卓>的作者为例,将他在csdn发表的额博客信息都挖取出来.因为郭神是我在大学期间比较崇拜的对象之一.他 ...

  3. [tem]高精度2

    从1开始 ; ; struct big{ int size,d[L]; big():size(a){memset(d,,sizeof(int)*L);} }; void jia(big &a, ...

  4. Interceptor

    拦截器是可以控制权限,当用户需要查看查看某些功能的时候,需要判断是不是登录了,如果没有登录的,就可拦截的过程.. 首先,我们都知道struts.xml 中有action 节点, 这个节点表示你想要访问 ...

  5. MSDN论坛被垃圾信息刷爆了!!!

    https://social.msdn.microsoft.com/Forums/zh-CN/caab1275-103e-470e-8888-ca39d1c48364/linehx2888?forum ...

  6. Maven系列一pom.xml 配置详解

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  7. Android中关于Volley的使用(五)从RequestQueue开始来深入认识Volley

    在前面的几篇文章中,我们学习了如何用Volley去网络加载JSON数据,如何利用ImageRequest和NetworkImageView去网络加载数据,而关于Volley的使用,我们都是从下面一行代 ...

  8. 非智能手机通信录备份并还原至Android智能手机方法

    随着智能手机早已深入普通用户的生活,2-3线城市的用户也逐渐从使用非智能机换成使用智能机.最近便遇见了这样一个转移通讯录的需求.之前使用的手机型号是BBK K201,通信录中绝大部分保存在了手机中,最 ...

  9. C# 根据正则表达式来判断输入的是不是数字

    最近在做输入判断的时候出现了一个需要判断输入合法性的问题,就是判断输入的是不是数字,判断方法是根据正则表达式来判断,具体方法如下: private bool IsRightNum(string str ...

  10. VS2013 抛出 stackoverflow exception 的追踪

    本公司使用VWG.Caslte ActiveRecord.CSLA.net .Quantz.net 等组件做为公司的开发基础,自2007年以来,一直工作正常,但最近(2015.12月)以来,打开MDA ...