UrlRewriteFilter 美化器的使用方法 伪静态化的解决方案(转)
一,URL美化器简介
UrlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。适用于任何Web应用服务器(如Resin,Orion,Tomcat等)。其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。
其主页:http://tuckey.org/urlrewrite/
二,开发步骤
1,添加urlrewrite-3.2.0.jar到工程中。
2,在web.xml中添加过滤器,如下所示:
<!-- urlRewriteFilter -->
<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>
在struts2的过滤器中添加<dispatcher>REQUEST</dispatcher>和<dispatcher>FORWARD</dispatcher>。
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.FilterDispatcher
</filter-class>
</filter> <filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>*.action</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
另外,urlrewriteFilter的过滤器最好在struts2之前。(网上有人这么说,不过我把它放后面,貌似也没有问题)
3,编写urlrewrite.xml文件。将文件放在WEB-INF文件夹下。(注意文件名一定要是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">
<!--
Configuration file for UrlRewriteFilter
http://tuckey.org/urlrewrite/
--> <urlrewrite> <rule>
<from>/noParams.html</from>
<to type="forward">noParams.action</to>
</rule> <rule>
<from>^/withParams/([a-zA-Z0-9]+).html$</from>
<to type="forward">withParams.action?name=$1</to>
</rule> <rule>
<from>^/withParams2/([a-zA-Z0-9]+).html$</from>
<to type="redirect">%{context-path}/withParams.action?name=$1</to>
</rule> </urlrewrite>
从上面的源码可以看出,<from>标签中的路径的格式就是我们要美化的样式。<to>标签中的实际是我们真实的请求。这里我们可以简单的认为,就是通过这个配置文件,将我们请求的美化后的伪静态html页面,映射成为真实的action请求。
从上面我们看到,<to>有两种type,分别为:forward和redirect。这和我们通常所说的forward和redirect跳转是一回事。
如果使用forward,则限定<to>中的请求必须和urlRewriteFilter在同一上下文环境中。而redirect则没有限制,可以跳转到任何其他的工程中。
另外,<from>标签中使用的是正则表达式,即^和$之间的内容。关于正则表达式,这里不再进行详细说明。
最后,from可以包含多个正则表达式,其对应的参数,在<to>中,可以用$1,$2等按照顺序进行接收。
三、常见问题:
1,使用URL美化器后,跳转页面报404错误。这里要注意的是,在struts2的过滤器中,如果没有配置<dispatcher>REQUEST</dispatcher>,redirect方式是不可用的。如果没有添加<dispatcher>FORWARD</dispatcher>,forward方式是不可用的。所以前面说明了,必须要在struts2中添加这两点。另外,网上也有人说要也添加<dispatcher>INCLUDE </dispatcher> 。但是目前还不知道这个是做什么用的。没有添加,也没有出现问题。
2,使用redirect方式,相比forward方式,性能较低。所以如果系统到处都要使用URL美化器,要慎重选择使用redirect。
3,如果使用forward方式,则要处理好路径方面的问题。因为如果经过美化,URL的路径中多了或者少了几个目录,其跳转后的页面中,使用相对路径的资源(例如图片),就会请求不到,原因就是路径是以当前的URL路径为基础进行计算位置的。
解决方法:1,在跳转的jsp页面中,资源的路径位置使用绝对路径。2,不要在不同目录之间使用forward做请求转发,保证当前路径不发生变化。3,改用redirect方式。
本文转载自:(原文)http://blog.163.com/wunan_23/blog/static/1955623202011926483993/
UrlRewriteFilter 美化器的使用方法 伪静态化的解决方案(转)的更多相关文章
- 【转】比较详细的Asp伪静态化方法及Asp静态化探讨
		目前,各大搜索引擎如google.百度.雅虎已经对动态页面诸如asp,php有着不错的支持了,只要动态页面后面的参数不要太长,如控制在3个参数内,页面内容做点优化,各大搜索对该类页面收录甚至不比静态h ... 
- IIS7伪静态化URL Rewrite模块
		原文 IIS7伪静态化URL Rewrite模块 在Win7安装了IIS7.5之后,搭建一些网站或者博客,但是IIS7.5本身没有URL Rewrite功能,也就是无法实现网址的伪静态化. 从网上找了 ... 
- PHP 页面静态化/纯静态化/伪静态化
		个人博客迁移至独立博客:https://blog.plcent.com/,欢迎大家访问 概念 PHP静态化分为:纯静态化 和 伪静态化:纯静态化又分为:局部静态化 和 完全静态化 纯静态化:是把PHP ... 
- java urlrewrite实现伪静态化
		1.示例 http://www.onlyfun.com/goods/company.jsp?companyId=455326 ==> http://www.onlyfun.com/company ... 
- PHP静态化(非伪静态化)
		什么是PHP静态化 PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同. 为什么要让网页静态化 ... 
- JSP页面静态化总结之一使用URLRewrite实现url地址伪静态化
		JSP页面静态化总结之一使用URLRewrite实现url地址伪静态化 1使用URLRewrite实现url地址伪静态化1.1URLRewirte的用处 1.满足搜索引擎的要求. 2.隐藏技术实现,提 ... 
- Jmeter正则表达式提取器的使用方法(转)
		下面简单介绍一下Jmeter正则表达式提取器的使用方法. 1.添加Jmeter正则表达式提取器:在具体的Request下添加Jmeter正则表达式提取器(Jmeter正则表达式在“后置处理器”下面) ... 
- (转)Java 的swing.GroupLayout布局管理器的使用方法和实例
		摘自http://www.cnblogs.com/lionden/archive/2012/12/11/grouplayout.html (转)Java 的swing.GroupLayout布局管理器 ... 
- PHP 404页面/如何设置404页面/URL静态化/URL伪静态化
		php中如何设置404页面及其他错误页面 首先在项目根目录下新建文件,文件名为" .htaccess " 在该文件中写入一下配置项: ErrorDocument 404 /404. ... 
随机推荐
- 第三十八篇、给UITabBar按钮的动画效果
			在很多情况下,我们也时常有这样的需求,就是在UITabBar切换的时候,添加一些动画效果 1.在UITabBar触发点击方法的时候捕获当前点击的item 2.使用coreAnimation设置动画效果 ... 
- AjaxFileUpload 在C#中应用
			一.前台页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head ru ... 
- WCF学习笔记 -- 如何用C#开发一个WebService
			假设所有工程的命名空间是demo. 新建一个C#的ClassLibrary(类库)工程. 在工程引用中加入System.ServiceModel引用. 定义接口,你可以删除自动生成的代码,或者直接修改 ... 
- 开发者需要知道的11条HTML5小常识
			#HTML5: The Missing Manual# 如果说HTML是一部电影,那HTML5就是一次大转折.HTML本来是不会活过21世纪的.官方Web标准组织W3C在1998年对HTML就已经撒手 ... 
- color 颜色代码 android  res/values/colors.xml
			<?xml version="1.0" encoding="utf-8"?> <resources> <color name=&q ... 
- <script type="text/html"></script>  js模版使用
			<div></div> <script type="text/html" id="javascript_template"> ... 
- 在windows服务器中,将MongoDB服务化。
			将mongodb在windows中服务化,就是将其注册成一个服务组件,并可以设置成,手动/自动 启动. 一般的我们都会在command窗口运行如下: d:\mongodb\bin>mongod ... 
- XZ压缩最新压缩率之王
			xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 之前xz使用一直很少,所以几乎没有什么提起. 我是在下载phpmyadmin的时候看到这种压缩格式的,phpm ... 
- Head of a Gang (map+邻接表+DFS)
			One way that the police finds the head of a gang is to check people's phone calls. If there is a pho ... 
- linux标准输入输出重定向
			command > filename 把标准输出重定向到一个文件,如果文件不存在则新建,如果存在则覆盖其内容.command >> filename 把标准输出重定向到一个文件中,如 ... 
