JSP使用UrlRewriteFilter实现网站伪静态

对于以JSP为表现层开发的动态网站来说,用户访问的URL通常有如下形式:

xxx.jsp?param=value...

大部分搜索引擎都会优先考虑收录静态的HTML页面,而不是这种动态的*.jsp、*.php页面。但实际上绝大部分网站都是动态的,不可能全部是静态的HTML页面,因此互联网上的大部分网站都会考虑使用伪静态------就是将*.jsp、*.php这种动态的URL伪装成静态的HTML页面。

对于java web应用来说,要实现伪静态非常简单:可以通过Filter拦截所有发象*.html请求,然后按照某种规则将请求forward到实际的*.jsp页面即可。

UrlRewriteFilter开源项目为这种思路提供了实现,使用UrlRewriteFilter实现网站的伪静态也很简单。

登录官网:http://www.tuckey.org/urlrewrite  站点下载UrlRewriteFilter最新版本,我这里用的是UrlRewriteFilter-4.0.3.

在web.xml配置启用UrlRewriteFilter

?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <!-- 配置Url Rewrite的Filter -->
	<filter>
		<filter-name>UrlRewriteFilter</filter-name>
		<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
	</filter>
	<!-- 配置Url Rewrite的Filter拦截所有请求 -->
	<filter-mapping>
		<filter-name>UrlRewriteFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>

在WEB_INF增加urlrewrite.xml文件,该文件定义了伪静态映射规则,这份伪静态规则是基于正则表达式的。

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
	"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
	<rule>
		<!-- 所有配置如下正则表达式的请求 -->
		<from>/userinf-(\w*).html</from>
		<!-- 将被forward到如下JSP页面,其中$1代表
			上面第一个正则表达式所匹配的字符串 -->
		<to type="forward">/userinf.jsp?username=$1</to>
	</rule>
</urlrewrite>

userinf.jsp页面

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%
//获取请求参数
String user = request.getParameter("username");
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
	<title> <%=user%>的个人信息 </title>
</head>
<body>
<%
//此处应该通过数据库读取该用户对应的信息
//此处只是模拟,因此简单输出:
out.println("现在时间是:" + new java.util.Date() + "<br/>");
out.println("用户名:" + user);
%>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值