URL 重写使用步骤

1 下载 ja r:
官方地址: http://tuckey.org/urlrewrite/ 

下载 urlrewritefilter-4.0.3.jar,加入到工程 lib 目录下

2 配置 web.xml:

<!-- 加到任何servlet映射的顶部,不然可能有些路径不能被过滤到
		http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/3.2/index.html
     	-->
<filter>
	<filter-name>UrlRewriteFilter</filter-name>
	<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
	<!--
		设备文件重加载间隔 (0默示随时加载, -1默示不重加载, 默认-1)
	-->
	<init-param>
		<param-name>confReloadCheckInterval</param-name>
		<param-value>60</param-value>
	</init-param>
	<!-- 自定义配置文件的路径,是相对context的路径,(默认位置 /WEB-INF/urlrewrite.xml)-->
	<init-param>
		<param-name>confPath</param-name>
		<param-value>/WEB-INF/urlrewrite.xml</param-value>
	</init-param>
	<!--
		设置日志级别(将被记录到日志中)
		可以为: TRACE, DEBUG, INFO (default), WARN, ERROR, FATAL, log4j,
		commons, slf4j,
		比如 sysout:DEBUG(设置到控制台调试输出级别)
		(默认级别 WARN) -->
	init-param>
		<param-name>logLevel</param-name>
		<param-value>DEBUG</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>UrlRewriteFilter</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
	<filter-name>struts2</filter-name>
	<filter-class>
	org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
	</filter-class>
</filter>
<filter-mapping>
	<filter-name>struts2</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
	<dispatcher>FORWARD </dispatcher>
	<dispatcher>INCLUDE</dispatcher>
</filter-mapping>

3 配置 urlrewrite.xml:(添加 urlrewrite.xml 到工程的 WEB-INF 目录下。):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE urlrewrite
PUBLIC "-//tuckey.org//DTD UrlRewrite 4.0//EN"
"http://www.tuckey.org/res/dtds/urlrewrite4.0.dtd">
<urlrewrite>
	
	<rule>
		<!--
			http://localhost:8080/ssh_test/user/findAllUser.html
			=>
			http://localhost:8080/ssh_test/user/findAllUser.action
		-->
		<from>^/([A-Za-z0-9]+)/([A-Za-z0-9]+)\.html</from>
		<to>/$1/$2.action</to>
	</rule>
	<outbound-rule>
		<!--
			http://localhost:8080/ssh_test/user/findAllUser.action
			=>
			http://localhost:8080/ssh_test/user/findAllUser.html
		-->
		<from>/([A-Za-z0-9]+)/([A-Za-z0-9]+)\.action$</from>
		<to>/$1/$2.html</to>
	</outbound-rule>
	<rule>
		<!--
			http://localhost:8080/ssh_test/user/updateUser/id-14.html
			=>
			http://localhost:8080/ssh_test/user/updateUser.action?id=13
		-->
		<from>^/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)-([A-Za-z0-9]+)\.html$</from>
		<to>/$1/$2.action?$3=$4</to>
	</rule>
	<rule>
		<!--
			http://localhost:8080/ssh_test/user/updateUser.action?id=3
			=>
			http://localhost:8080/ssh_test/user/updateUser/id-3.html
		-->
		<from>^/([A-Za-z0-9]+)/([A-Za-z0-9]+)/([A-Za-z0-9]+)-([A-Za-z0-9]+)\.html$</from>
		<to>/$1/$2.action?$3=$4</to>
	</rule>
	
</urlrewrite>

注:rule 是 url 重写规则,from 是显示出来的地址,to 是映射的实际地址。示例:<a
href="http://localhost:8080/douwanplay/user/testUrlRewrite.htm"> Go </a>,表示实
际请求为 user!testUrlRewrite.do
$1 是重写参数,它的值与 from 中的正则表达式是一一对应,可以为多个,()里是匹配的正
则表达式, 在正则表达式^指定字符的串开始,$为指定结束(form 一个括号--对应 to 的
一个$参数)
outbound-rule 是反重写配置,即实际动态连接经其映射之后在页面显示为静态连接模
式。示例:<a href="<c:url value="/user!testUrlRewrite.do" />">NO</a>,实际页面
显示为 user/testUrlRewrite.htm。参数配置同 rule, <c:url /> 为 <%@ taglib
prefix="c" uri="http:// Java .sun.com/jsp/jstl/core" %>
1、配 struts2 拦截器的时候需要加:
<dispatcher>REQUEST</dispatcher> //不加这个页面不能使用 struts2 标签
<dispatcher>FORWARD</dispatcher> //转发必须
<dispatcher>INCLUDE</dispatcher>
2、配置 web.xml 的时候,rewrite 一定要在 strtus2 的上面。



小结:
urlrewrite 是个过虑器,它将会过虑用户的所有请求,符合规则的便对其进行重定向。
rule 结点中 from 的规则默认使用的是正则表达式来匹配的,
当用户访问服务器时的 URL 会与该配置相比较,如果符合规则就会按照下面 to 结点中的配
置对其进行跳转,其默认是 forward 跳转。
简单分析一下上面的正则表达式“^/vweb/view/index-([0-9]+)” : “” 匹配输入字符
串的开始位置 “ [Math Processing Error] ”匹配输入字符串的结束位置
“\”转义字符,表示后面的“-”不具有特殊含义,只是一个简单的字符串。
“([0-9]+)”:
“[0-9]”:由 0 到 9 中任何数据组成的字符串
“+”匹配 1 或多个正好在它之前的那个字符。



猜你喜欢

转载自blog.csdn.net/baidu_35975930/article/details/70739792