最近公司以前的一个项目需要升级改版,其中的一个模块是使用 Struts2 做的不需要改动,但是需要将其从之前的项目里面剥离出来,看了看官网,发现所有的链接访问的静态地址,以为是 FreeMarker 实现的,仔细研究了会发现不是那么回事,原来是伪静态,程序使用了 urlrewriter 。其实 urlrewriter 的使用很简单,看看下面你就明白了。
urlrewriter 简介: url rewrite 将我们的动态网页地址转化为静态的地址,如 html 、 shtml ,还可以隐藏网页的真正路径,比如:有时候需要将 xxx.com/news/ type1/001.jsp 转化成显示路径为 xxx.com/news_type1_001.jsp 。
【第一步】下载 jar 包
在 http://tuckey.org/urlrewrite/#download 下载最新的 jar 文件,当前最新的是 Beat3.2 我下载的是 urlrewritefilter-2.6.zip 。 解压得到 urlrewrite-2.6.0.jar 和 urlrewrite.xml
【第二步】 新建 Web 项目 TestUrlRewrite ,
在 WebRoot 下新建 index.jsp ,修改其代码如下所示:
- <%@ page contentType= "text/html; charset=UTF-8" %>
-
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" >
-
- <html>
-
- <head>
-
- <title>测试TestUrlRewrite</title>
-
- </head>
-
- <body>
-
- <%
-
- String id = (String) request.getParameter("id" );
-
- out.println("<h3> the value is : " + id + " </h3> " );
-
- %>
-
- </body>
-
- </html>
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>测试TestUrlRewrite</title>
</head>
<body>
<%
String id = (String) request.getParameter("id");
out.println("<h3> the value is : " + id +" </h3> ");
%>
</body>
</html>
【第四步】发布程序
将程序发布到 Tomcat 中,然后在浏览器输入如下地址:
http://localhost:8080/TestUrlRewrite/index.jsp?username=niejingyu ,页面展示效果如图 1 所示:
【第五步】添加 urlrewrite 文件
将 urlrewrite-2.6.0.jar 复制到 WebRoot/WEB-INF/lib 下。
将 urlrewrite.xml 复制到 WebRoot/WEB-INF 下,其中 urlrewrite.xml 代码如下所示:
- <? 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 >
-
- < from > /(.*).html </ from >
-
- < to > index.jsp? id =$1 </ to >
-
- </ rule >
-
- </ urlrewrite >
<?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>
<from>/(.*).html</from>
<to>index.jsp?id=$1</to>
</rule>
</urlrewrite>
*.html 是一个正则表达式的串。如果你对这个不理解可以学习一下 java 中正则表达式的应用。
$1 也是一个正则表达式的语言匹配正则中的组捕获。
【第六步】修改 web.xml 文件
在 web.xml 增加如下内容:
- < 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 > DEBUG </ param-value >
-
- </ init-param >
-
- </ filter >
-
- < filter-mapping >
-
- < filter-name > UrlRewriteFilter </ filter-name >
-
- < url-pattern > /* </ url-pattern >
-
- </ filter-mapping >
<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>DEBUG</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
【第七步】 重启 tomcat
访问 http://localhost:8080/TestUrlRewrite/2.html ,页面效果如图所示:
在这里是匹配 /(.*).html ,将请求转发到 index.jsp?id=$1 。你还可以根据需要转到 xxx.action?id=$1