伪静态转发Url Rewrite 3.2.0中文操作手册

2018-04-16 14:47:20 浏览数 (1)

手册

由于历史原因,旧版系统采用的struts2框架。基于Action命名以及菜单规范的问题,故临时采用了额Url Rewrite相关功能实现。

本文档基本3.2.0版本。原文请参阅:http://tuckey.org/urlrewrite/manual/3.2/index.html

timg.jpg

部署

下载zip并将解压,把urlrewrite.xml放到项目WEB-INF目录下。 把下面的代码添加到WEB-INF/web.xml中:

代码语言:javascript复制
<!-- 伪静态转发 -->
    <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>
        <init-param>    
            <description>是否可以重新载入</description>    
            <param-name>confReloadCheckEnabled</param-name>    
            <param-value>true</param-value>    
        </init-param>     
        <init-param>
           <description>设置配置文件重新加载的间隔时间,以秒计。必须是一个合法的整数(0表示每次修改都检查,-1表示不做重新加载检查)</description>
           <param-name>confReloadCheckInterval</param-name>
           <param-value>0</param-value>
         </init-param> 
    </filter>  
    <filter-mapping>  
        <filter-name>UrlRewriteFilter</filter-name>  
        <url-pattern>/*</url-pattern>
        <dispatcher>REQUEST</dispatcher>  
        <dispatcher>FORWARD</dispatcher>   
    </filter-mapping> 

注:设置logLevel为log4j或者commons将导致日志构建时调用log4j或commons-loggin类库。因此,需要把相关jar引入到classpath中。

过滤器参数

代码语言:javascript复制
<?xml version="1.0" encoding="UTF-8"?>

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
    </filter-class>

    <!-- 设置配置文件重新加载的间隔时间,以秒计,必须是一个合法的整数(0表示每次修改都检查,-1表示不做重新加载检查,默认为-1) -->
    <!-- 源码中默认值为0 -->
    <init-param>
        <param-name>confReloadCheckInterval</param-name>
        <param-value>60</param-value>
    </init-param>

    <!-- 如果需要求给配置文件的路径,可以通过confPath参数,路径相对于上下文跟目录(默认为/WEB-INF/urlrewrite.xml) -->
    <init-param>
        <param-name>confPath</param-name>
        <param-value>/WEB-INF/urlrewrite.xml</param-value>
    </init-param>

    <!-- 设置日志级别,可选值为 TRACE, DEBUG, INFO(默认), WARN, ERROR, FATAL; 日志系统可选 log4j, 
        commons, slf4j; -->
    <init-param>
        <param-name>logLevel</param-name>
        <param-value>DEBUG</param-value>
    </init-param>

    <!-- 你可以修改urlrewrite状态数据的目录,以便它不与你已部署的应用相冲突(注:默认为/rewrite-status) ,注:必须以/开头 -->
    <init-param>
        <param-name>statusPath</param-name>
        <param-value>/status</param-value>
    </init-param>

    <!-- 可以禁用状态页面,可选值为true/false,(默认为true) -->
    <init-param>
        <param-name>statusEnabled</param-name>
        <param-value>true</param-value>
    </init-param>

    <!-- 你可能想允许其他的host也可以看到状态页,可以用statusEnabledOnHosts参数来配置,值为,隔开的host列表,可使用*号通配符(默认为"localhost, 
        local, 127.0.0.1") -->
    <init-param>
        <param-name>statusEnabledOnHosts</param-name>
        <param-value>localhost, dev.*.myco.com, *.uat.mycom.com
        </param-value>
    </init-param>

    <!-- 默认false. 使用mod_rewrite风格的配置文件(若设置为true,则confPath没有被指定时会会设置为/WEB-INF/.htaccess) -->
    <init-param>
        <param-name>modRewriteConf</param-name>
        <param-value>false</param-value>
    </init-param>

    <!-- 从参数modRewriteConfText中加载mod_rewrite风格的配置信息,注:如果调协这了个参数,其他的默认参数将被忽略 
    <init-param>
        <param-name>modRewriteConfText</param-name>
        <param-value>
            RewriteRule ^/~([^/] )/?(.*) /u/$1/$2 [R] 
            RewriteRule ^/([uge])/([^/] )$ /$1/$2/ [R]
        </param-value>
    </init-param>
    -->

    <!-- 默认为false, 允许通过访问下面的url设置使用哪个配置文件/rewrite-status/?conf=/WEB-INF/urlrewrite2.xml。仅为测试方便而设计 
    <init-param>
        <param-name>allowConfSwapViaHttp</param-name>
        <param-value>false</param-value>
    </init-param>
    -->

</filter>

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

配置文件

代码语言:javascript复制
<?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">
<urlrewrite>
    <!-- 资源推送部分 -->
    <rule>
        <from>^/resource/resource_list.html</from>
        <to>/resource/resource_list.jsp?type=0</to>
    </rule>
    <!--默认是正则匹配  match-type="wildcard" 通配符匹匹配  -->
    <rule match-type="wildcard">
        <!-- 预支付 -->
        <from>/pay/prepay/*</from>
        <to>/pay_prepay.action?studentId=$1</to>
    </rule>
</urlrewrite>

urlrewrite.xml 这个配置文件一定只能放在 WEB-INF 下。

所谓重写,就一定会有规则的匹配,这里用到了正则表达式,方便起见,我只用了[A-Za-z0-9] ,简单的解释一下:

A-Z:匹配 A 到 Z 中的任意一个字符,说一句废话,同理可得,

a-z:匹配 a 到 z 中的任意一个字符

0-9:匹配 0 到 9 的任意一个字符

:至少出现一次,即,一次或一次以上

合起来 [A-Za-z0-9] 的意思就是:匹配一个任意的英文字母和数字组合的字符串

rule:自定义匹配规则

note:注释,解释标签

from:定义具体的匹配规则

to:匹配成功后的目标地址

type:type的值有两个,一个是 forward (转发,参数不丢失),一个是 redirect (重定向,地址栏显示的地址就是目标真实地址)

$1:匹配中的第一个正则表达式的字符串的值,$2,$3,$4....也是如此

& amp; :是 & 的实体名,代表的就是 &。

源码

截取过滤器部分源码,便于大家理解。 org.tuckey.web.filters.urlrewrite.UrlRewriteFilter:

代码语言:javascript复制
public class UrlRewriteFilter implements Filter {
    private static Log log = Log.getLog(UrlRewriteFilter.class);
    public static final String VERSION = "3.2.0";
    public static final String DEFAULT_WEB_CONF_PATH = "/WEB-INF/urlrewrite.xml";
    private UrlRewriter urlRewriter;
    private boolean confReloadCheckEnabled;
    private int confReloadCheckInterval;
    private boolean allowConfSwapViaHttp;
    private long confLastLoad;
    private Conf confLastLoaded;
    private long confReloadLastCheck;
    private boolean confLoadedFromFile;
    private String confPath;
    private boolean confReloadInProgress;
    private boolean statusEnabled;
    private String statusPath;
    private boolean modRewriteStyleConf;
    public static final String DEFAULT_MOD_REWRITE_STYLE_CONF_PATH = "/WEB-INF/.htaccess";
    private ServerNameMatcher statusServerNameMatcher;
    private static final String DEFAULT_STATUS_ENABLED_ON_HOSTS = "localhost, local, 127.0.0.1";
    private ServletContext context;

更多:http://www.gaofi.cn/article/detail/84

0 人点赞