文章目录
基础介绍案例代码urlrewrite.xmluserinf.jsp验证结果注意事项参考文档案例来源:《轻量级Java EE企业应用实战(第4版)-Struts2+Spring4+Hibernate整合开发》,李刚编著
基础介绍
伪静态的作用:将*.jsp、*.php这种动态URL伪装成静态的HTML页面,便于搜索引擎收录。
实现思路:对于Java Web应用,可以通过Filter拦截所有发向*.html的请求,然后按某种规则将请求转发到实际的.jsp页面。本文使用UrlRewriteFilter模块实现伪静态功能,它是一个非常强大的工具,类似于Apache的mod_rewrite模块。
简单的说,整个过程分为3步:
1.将urlrewritefilter-4.0.3.jar放到WEB-INF/lib下,附jar包下载地址;
2.WEB-INF/web.xml添加如下配置,启用URL Rewrite模块:
<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></filter-mapping>
3.在WEB-INF目录下添加urlrewrite.xml文件,该文件用于自定义伪静态映射规则。
案例代码
环境:
操作系统centos 8openjdk version “1.8.0_272”apache-tomcat-8.5.59
在本例中,.html的请求会被URL Rewrite过滤,如果命中urlrewrite.xml设定的规则,会跳转到userinf.jsp页面,同时向该页面传递相关参数。userinf.jsp模拟了一个显示用户信息的页面。
urlrewrite.xml
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE urlrewrite PUBLIC "-////DTD UrlRewrite 4.0//EN""/res/dtds/urlrewrite4.0.dtd"><urlrewrite><rule><!-- 所有配置如下正则表达式的请求 --><from>^/userinf-(\w*).html$</from><!-- 将被forward到如下jsp页面,其中$1代表上面第一个正则表达式所匹配的字符串 --><to type="forward">/userinf.jsp?username=$1</to></rule><rule><from>/1.html</from><to type="forward">/userinf.jsp?username=zsx0728</to></rule></urlrewrite>
userinf.jsp
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %><%//获取请求参数String user = request.getParameter("username");%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title><%=user%>的个人信息</title></head><body><%//此处应该通过数据库读取该用户对应的信息//此处只是模拟,因此简单输出:out.println("现在时间是:" + new java.util.Date() + "<br/>");out.println("用户名:" + user);%></body></html>
验证结果
访问userinf-*.html,命中规则0,跳转到JSP页面,并将参数hehe传递至JSP页面。
访问1.html,命中规则1,跳转到JSP页面,并将参数zsx0728传递至JSP页面。
注意事项
1.注意各个文件和jar包的位置
2.启动tomcat之后可以在本地浏览器输入http://localhost:8080/urlwrite/rewrite-status 查询转发状态。
参考文档
[1]李刚.轻量级Java EE企业应用实战(第4版)-Struts2+Spring4+Hibernate整合开发[M].电子工业出版社:北京,:136.
[2]Paul Tuckey.UrlRewriteFilter[EB/OL]./urlrewrite/,-01-01.