对于 Java Web来说,要实现伪静态非常简单:可以通过 Filter 拦截所有发向 *.html 请求,然后 按照某种规则,将请求 forward 到实际的 *.jsp 页面即可。
现有的 URL Rewrite 开源项目 为这种思路 提供了实现,使用 URL Rewrite 实现网站伪静态:
1、登录 http://www.tuckey.org/urlrewrite/ 站点,下载最新的版本;
2、下载 xxx-xxx-src.zip 文件,将文件解压缩,文件路径如下:
api:API文档
lib:编译和运行所需要的第三方类库
manual:存放了URL Rewrite 项目使用手册
src:存放了URL Rewrite 的源代码
webapp:示例应用
LICENSE.txt:杂项文档
3、在 web.xml 中配置启用 URL Rewrite Filter,在 web.xml 文件中,增加如下配置片段:
<span style="white-space:pre"> </span><filter>
<filter-name> UrlRewriteFilter </filter-name>
<filter-class> org.tuckey.web.filters.urlrewrite.UrlRewriteFilter </filter-class>
</filter>
<filter-mapping>
<filter-name> UrlRewriteFilter </filter-name>
<filter-pattern> /* </filter-pattern>
</filter-mapping>
拦截所有的用户请求
4、在 WEB-INF 路径下增加 urlrewrite.xml 文件,该文件定义了伪静态 映射规则,这份伪静态规则是基于正则表达式的。
<span style="white-space:pre"> </span><?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE urlrewrite PUBLIC ………………>
<urlrewrite>
<rule>
<form> /userinf-(\w*).html </form>
<to type="forward" >/userinf.jsp?username=$1 </to>
</rule>
</urlrewrite>
上面的规则文件 定义了一条简单的规则: 所有发向 /userinf-(\w*).html 的请求都将被 forward 到 userinf.jsp 页面,并将(\w*) 正则表达式所匹配的内容 作为username 的参数值。根据这个伪静态规则,我们应该为该应用提供一个 userinf.jsp 页面,显示用户信息;
<head>
<title><%= user %>个人信息</title>
</head>
<body>
<%
out.println(“现在时间是:” + new java.util.Date() + “ </br>”);
out.println("用户名: " + user);
%>
</body>
标题栏会出现 user 的值,,并且 系统因为使用了 URL Rewrite, 因此用户可以请求类似 userinf-xxx.html 页面;
例如:userinf-crazy.html
user 的值就会 被赋予 crazy。