所谓网站的伪静态其实也不是什么高深名词,就是将*.asp,*.aspx,*.jsp,*.php这种动态URL页面伪装成静态的HTML页面。因为网上大部分搜索引擎都会优先考虑收录静态的HTML页面,而不是这种动态的*.asp,*.aspx,*.jsp,*.php,但是我们不可能把动态的页面硬改成*.html,因为一些代码还是要在服务器上面跑,实际上,绝大部分网站都是动态的,互联网上的大部分网站都会考虑使用伪静态技术。在Javaee里面,可以利用urlRewrite这个小插件去实现。
一、基本目标
如下图,把网络工程中的所有jsp页面伪装成html页面,当然,原来的jsp页面还是存在的。就是你在地址栏输入1.html相当于访问1.jsp。
二、制作过程
最终完成的网络工程目录结构图如下:
1、新建一个网络工程,从网上搜索到urlrewritefilter-4.0.3.jar,在lib文件夹下面,这东西版本大于3.0即可,现在的最新版是urlrewritefilter-4.0.3.jar,以前的用得最多的版本是3.2.0但功能上没有任何区别。这东西的官网由于放在googlecode上面,所以无法访问,但没有关系,这东西一搜就一大把,肯定能够找到。
2、先在工程目录的根目录新建一个1.jsp。在上面乱写一些东西做伪装,挂羊头卖狗肉,说这是1.html,但实际是一个1.jsp。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>1.html</title> </head> <body> 1.html </body> </html>3、之后新建web.xml,或者在web.xml里面加入如下的片段,如下的片段放在web.xml的任意一个位置都没有问题,但一定要放在所有的Servlet映射之前,否则可能会出现这样那样的问题,这里注意,我们现在是要把所有*.jsp的后缀映射成*.html,而不是在没有后缀Servlet后面加上一个.html,Servlet在网站中一般作为控制器,不允许别人随便访问,用户也基本看不到Servlet的处理过程。这段代码无须理解什么意思,复制粘贴就可以了。
<?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"> <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> <dispatcher>REQUEST</dispatcher> <dispatcher>FORWARD</dispatcher> </filter-mapping> </web-app>3、这样就配置好urlRewrite了,然后在于WEB-INF下面,也就是与web.xml同一个目录,新建一个映射urlrewrite.xml,这个文件是支持正则表达式的,对于正则表达式理解突破天际的天际可以自由发挥。不过一般记住如何把所有*.jsp的后缀映射成*.html的写法就可以了。代码如下所示:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> <urlrewrite decode-using="UTF-8"> <rule> <!-- 用户在地址栏输入*.html全部通过forward指令跳转到*.jsp --> <from>/(\w*).html</from> <to type="forward">/$1.jsp</to> </rule> </urlrewrite>你也可以在下面多加几条规则,也就是多放几个rule节点<rule></rule>,把自己的网站伪装成*.aspx,*.jsp,*.php三版齐发,上面的$1表示替代本规则的第一个正则式(/w*),例如:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN" "http://tuckey.org/res/dtds/urlrewrite3.2.dtd"> <urlrewrite decode-using="UTF-8"> <rule> <!-- 用户在地址栏输入*.html全部通过forward指令跳转到*.jsp --> <from>/(\w*).html</from> <to type="forward">/$1.jsp</to> </rule> <rule> <!-- 用户在地址栏输入*.aspx全部通过forward指令跳转到*.jsp --> <from>/(\w*).aspx</from> <to type="forward">/$1.jsp</to> </rule> <rule> <!-- 用户在地址栏输入*.php全部通过forward指令跳转到*.jsp --> <from>/(\w*).php</from> <to type="forward">/$1.jsp</to> </rule> </urlrewrite>
运行效果如下:
然而,实际上整个工程目录就只有一个.jsp,但是这样除了装逼之外没有任何用处,人家把1.jsp改成1.html好歹是为了搜索引擎更容易收录。你学习怎么用asp.net,jsp,php写同一个网站,三修乃才是正途,这是邪门歪道!