UrlRewrite就是我们通常说的地址重写,用户得到的全部都是经过处理后的URL地址。
为了访问方便,防止用户在url后乱加参数等安全原因,有时候需要对网站的访问路径进行伪装,如把
http://localhost:8080/datasystem/portal/toIndex.do 伪装成 http://localhost:8080/datasystem/index.html
(1)提高安全性
可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多。
(2)美化URL
去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL
(3)利于搜索引擎的收入
通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息
1、下载jar
普通web项目
官方地址:http://tuckey.org/urlrewrite/
下载链接:http://central.maven.org/maven2/org/tuckey/urlrewritefilter/4.0.3/urlrewritefilter-4.0.3.jar
下载urlrewritefilter-4.0.3.jar,加入到工程lib目录下。
maven项目 添加下面这段代码到你的pom.xml中就行
org.tuckey
urlrewritefilter
4.0.3
2、配置web.xml
UrlRewriteFilter
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
UrlRewriteFilter
/*
REQUEST
FORWARD
3、配置urlrewrite.xml (新建一个urlrewrite.xml 到工程的WEB-INF目录下)。
/index.html
/portal/toIndex.do
forward和redirect都可以用,但forward访问完后还是不会显示真实访问地址,个人感觉好一些
示例:
1、使用正则表达式匹配(rule 的默认匹配方式是正则表达式)
^/demo/(\w+).html$ //客户端访问的地址:http://127.0.0.1:8080/Struts/demo/hello.html
/Struts/$1 //实际访问的地址:http://127.0.0.1:8080/Struts/hello
解析:
rule 是urlrewrite下的子节点,是urlrewrite的主要规则节点,在它里面包含from 和to两个子节点,from表示请求的URL,to表示将转到的真实的URL。
^/news/([0-9]+).html$
/news/news.jsp?newsId=$1
^/demo1/(\w+)/(\w+).html$
/Struts/$1.action?age=$2
但一般情况下,这些静态地址都不是我们手动输入到地址栏的,而是存在于网页中,由用户点击访问的,而且很多情况下标签中的地址都会用动态地址如.jsp、.php等,这种情况下,就需要使用
^/news/([0-9]+).html$
/news/news.jsp?newsId=$1
^/WebTest/news/news.jsp\?newsId=([0-9]+)$
/WebTest/news/$1.html
你会发现
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
首页
上面对”新闻1”链接的配置就是如此,jsp通过获取news的值,给用户展现的就是一个静态地址了,相当于比直接访问静态页面多走了两步,urlrewrite.xml中具体执行顺序如下
a标签的href 链接指向
标签
中的地址,继而通过各种转向,最终执行到真正的动态地址。
中需要转义哦!比如“?”需要转义成“\?”,“&”需要转义成“& ;”……
该博客转载自:
作者:Benett-Chen
链接:https://blog.csdn.net/sky_100/article/details/53410013
如果有遇到不懂或者有问题时,可以扫描下方二维码,欢迎进群交流与分享,希望能够跟大家交流学习!