神奇的url重写-动态页面静态化(II)
接上一章的动态页面静态化。方法二、通过url重写。既动态页面与静态页面使用同样的url来实现。
例如:原请求为:href="tradesite.jspa?path=jtwl&id=1234"
重写后为:href="tradesite/jtwl/1234.htm"
通过这样的重写我们能保证动态页面与静态页面使用同样的url地址访问。这样在生成静态页的时候就不存在替换动态url链接的操作了。
实现步骤:
1.在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>trace</param-value></init-param></filter><filter-mapping><filter-name>UrlRewriteFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
没错就是一个过滤器而已。定义了使用哪个类来进行url重写、
当然要导入相应的url重写jar包:urlrewrite-3.0.4.jar
class:指明使用这个类的路径。
<param-name>logLevel</param-name>
<param-value>trace</param-value>
指明debug模式。
filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
表示对所有的url都进行重写。
还没有完。
这时候要建立url重写规则配置文件urlrewrite.xml。主要是通过正则表达式来匹配实际要访问的url去。
<?xml version="1.0" encoding="utf-8"?><!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN" "http://tuckey.org/res/dtds/urlrewrite3.0.dtd"><urlrewrite default-match-type="regex"><rule><from>^/more/(+)/(+)\.htm$</from><to>/secondpage.jspa?path=$1&amp;id=$2</to></rule><rule><from>^/difang/(+)/(+)\.htm$</from><to>/difangsite.jspa?path=$1&amp;locpid=$2</to></rule><rule><from>^/index\.htm$</from><to>/index.jspa</to></rule><rule><from>^/localservice/(+)\.htm$</from><to>/localservice.jspa?path=$1</to></rule><rule><from>^/toolclass/(+)/(+)\.htm$</from><to>/toolclassbytpid.jspa?path=$1&amp;tpid=$2</to></rule><rule><from>^/toolsite/(+)/(+)\.htm$</from><to>/toolsitebycid.jspa?path=$1&amp;tcid=$2</to></rule><rule><from>^/tradeservice/(+)\.htm$</from><to>/tradeservice.jspa?path=$1</to></rule><rule><from>^/trade/(+)/(+)\.htm$</from><to>/tradesite.jspa?path=$1&amp;tradepid=$2</to></rule><rule><from>^/(*)css/(.*\.css)$</from><to>/css/$2</to></rule><rule><from>^/(*)js/(.*\.js)$</from><to>/js/$2</to></rule><rule><from>^/(*)pic/(.*)$</from><to>/pic/$2</to></rule></urlrewrite>
配置文件的名称必须这样命名。因为在filter中已经规定了它会负责读取urlrewrite.xml然后进行请求。
通过这个配置文件也都能看得出只要页面中的链接能匹配到这里的配置规则、则会将它转译到新的url再次进行跳转。
它的神奇之处在于 能替换所有的url包括页面中需要引入的css、js、image等文件夹。
这样你在生成静态页时既不需要你重新修改页面链接。生成的文件目录名正好是你配置规则转译之前的目录结构。例如href="tradesite/jtwl/1234.htm"
生成后的目录即位:根目录/tradesite/jtwl/1234.htm/
在特殊需求下还会变为:根目录/tradesite/jtwl/1234/curr/时间毫秒值1293413755437.htm
这样在每次生成静态页时则不会覆盖原来的文件。而可以设定规则让用户每次访问到的为时间值最大的那个文件。
页:
[1]