Urlrewrite
Urlrewrite
地址重写,用户得到的全部都是经过处理后的URL地址
过滤用户的所有请求,符合规则的便对其进行重定向
rule结点中from默认使用的正则表达式来匹配,若用户访问服务器时的URL符合规则就跳转至to结点中的配置,默认是forward跳转。
<rule>:自定义匹配规则
<note>:注释,解释标签
<from>:显示的地址,要用()把要匹配的内容括起来才能获取,不然java会抛出异常
<to type="">:匹配成功后的实际地址,可以为null,相当于未调用chain.doFilter,type有两个值,forward (转发,参数不丢失),redirect (重定向,地址栏显示的地址就是目标真实地址)
注意:
$1:匹配中的第一个正则表达式的字符串的值,$2,$3,$4....也是如此
如果要用&符号,需要用&代替
urlrewrite.xml是utf-8,note标签内的中文也一定是要utf-8.
UrlRewriteFilter 最好是配置在web.xml的前面filter上,不然有可能对有些url转变失去作用.
urlrewrite有仅只有一个,rule至少一个.
正则表达式^指定字符的串开始,$为指定结束,对于中文参数要使用(.*)作为参数转义.
“+”匹配1或多个正好在它之前的那个字符
如果使用<outbound-rule>要记得代码中的url都是编码过的;
contex 是非常重要的, 如果有一个应用的context 是”/myapp”,并且你的请求是”/myapp/somefolder/somepage.jsp”, 容器交给UrlRewriteFilter 的url会是”/somefolder/somepage.jsp”, 这可能难以理解,但是在你的<rule>和<condition>中不要包含context path, 它是容器负责处理的.
应用通配符,通配符匹配引擎可以替代正则表达式, 在<condition>和<rule>中设置match-type是wildcard用以开启支持通配符.(或者设置default-match-type)
例如:
/big/url/*匹配/big/url/abc.html但是不匹配/big/url/abc/dir/或/big/url/abc/
/big/url/**匹配/big/url/abc.html,/big/url/abc/dir/和/big/url/abc/
也可以和正则的替换一样, 每个*代表一个参数,在<set>和<to>中用$N的方式使用
优点
(1)提高安全性 :有效的避免一些参数名、ID等完全暴露在用户面前,若用户输入不符合规则会返回404或错误页面
(2)美化URL :去除如*.do之类的后缀名、长参数串等
使用步骤:
1、下载urlrewritefilter-4.0.3.jar,加入到工程lib目录下。
2、配置web.xml
<!-- 加到任何servlet映射的顶部,不然可能有些路径不能被过滤到--> <filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</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 3.1//EN" "http://tuckey.org/res/dtds/urlrewrite3.1.dtd"> <urlrewrite> <rule> <note> The rule means that requests to /test/status/ will be redirected to /rewrite-status the url will be rewritten. </note> <from>^/vweb/view/index\-([0-9]+)$</from> <to>/vweb/view/index.shtml?_vwebid=$1&type=show</to> </rule> </urlrewrite> 示例: <rule> <from>^/([a-z]+)/([a-z]+)/([a-z]+)$</from> <to>/$1.do?method=$2&uuid=$3</to> </rule>
在index.jsp中添加链接:<a href="process/show/index">跳转</a>
地址栏url:http://localhost/urlrewrite/process/show/index,
实际路径:http://localhost/urlrewrite/process.do?method=show&uuid=index