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实例:设置背景音乐与音效-设置场景实现
设置场景(Setting),Setting.h文件代码如下: #ifndef __Setting_SCENE_H__ #define __Setting_SCENE_H__ #include &quo ...
- java坑之无法创建线程
环境:linux 错误:java.lang.OutOfMemoryError: unable to create new native thread 原因:OS对线程是有限制 解决办法: 在Linux ...
- L010-oldboy-mysql-dba-lesson10
L010-oldboy-mysql-dba-lesson10 来自为知笔记(Wiz)
- myeclipse 8.5 破解
步骤: (1)新建一个java project项目 (2)在src目录下新建一个名为MyEclipseGen的Java文件(MyEclipseGen.java) (3)MyEclipseGen.jav ...
- css定义的权重
以下是权重的规则:标签的权重为1,class的权重为10,id的权重为100,以下例子是演示各种定义的权重值: /*权重为1*/ div{ } /*权重为10 ...
- DTCMS,手机网站访问跳转到DTCMS官网解决方法
mobile\js\base.js main\js\common.js 去掉location.href = 'http://m.dtcms.net'; 也可以设定手机访问跳转到指定域名
- 通用SQL存储过程分页以及asp.net后台调用
创建表格并添加300万数据 use Stored CREATE TABLE UserInfo( --创建表 id ,) PRIMARY KEY not null,--添加主键和标识列 UserName ...
- TextBox 绑定到DataTable某一列属性上
将TextBox绑定到DataTable某一列属性上 DataTable dt = GetDataTable() textBox1.DataBindings.Add("Text", ...
- Winform程序只允许运行一个程序实例
/// <summary> /// 应用程序的主入口点. /// </summary> [STAThread] static void Main() { Application ...
- 就要从SDG离职了
在知乎上看到有个提问,你为什么从盛大离职.我八月份在盛大游戏实习之间,下个星期准备辞职迎接新的挑战.本文也将提到我在盛大实习的经历以及离职的原因.当然,不会涉及很多SDG内部的管理以及技术上的秘密. ...