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. ...
随机推荐
- Cocos2d-x中创建SQLite数据库
我们下边介绍如何通过SQLite3提供的API实现MyNotes数据库创建.创建数据库一般需要经过如下三个步骤.(1) 使用sqlite3_open函数打开数据库.(2) 使用sqlite3_exec ...
- Objective-C调用Swift
如果已经有了一个老的iOS应用,它是使用Objective-C编写的,而它的一些新功能需要采用Swift来编写,这时就可以从Objective-C调用Swift. Objective-C调用Swift ...
- 文件存储之-内存文件系统tmpfs
前言 我们都知道,对于单台服务器来说,除了 CPU ,内存就是我们存储数据最快的设备.如果可以把数据直接存储在内存中,对于性能的提升就不言而喻了.那么我们先来讲讲如何使用内存来存储文件. 首先,我们先 ...
- .NET架构师技能体系
.NET架构师应该掌握什么样的技术?其实这个问题很简单,去看看招聘.NET架构师的公司的职位要求就知道了.比如:http://www.cnblogs.com/guwei4037/p/5615471.h ...
- ARC forbids explicit message send of release
http://blog.sina.com.cn/s/blog_7b9d64af01019rqt.html
- Jquery 控件
1. Jeditable 2. Select2 3. superfish 4. Jquery file upload https://blueimp.github.io/jQuery-File-Upl ...
- nginx禁止访问某个后缀名的文件
猛然发现通过http://ip:端口号/路径/config.ini竟然能下载项目代码的配置文件,检查nginx配置,原来是没有加限制,立即加上,并记录如下: location ~* \.(ini|do ...
- MySql 服务端与客户端下载地址
mysql官网的注册,要上传户口,才能下载. 在网上搜了个下载地址. mysql-5.6.8-rc http://mysql.stu.edu.tw/Downloads/MySQL-5.6/mysql- ...
- Ubuntu系统启动时waiting for network
最近在使用Ubuntu时启动经常会遇到等待网络配置, 每次等待时间都很长,要几分钟,于是在网上看看其他大牛怎么解决该问题. 有些解决方法中有提到删除 网卡硬件信息文件/etc/udev/rules.d ...
- Entity Framework 学习笔记(一)安装
1.通过 VS2013 下载,这个没有限制,因为我用的vs是2013 Entity Framework包