开题:相信玩过apache php的朋友都知道php怎么实现伪静态页面的访问,那么问题来了,JAVAWEB应用怎么实现相同的功能呢?
什么是伪静态?
举个例子,当你访问http://www.yxweb.cc/demo/5.html
这个地址的时候,如果服务端使用的伪静态,你访问的页面就不一定是demo目录下的5.html文件了哦。它可能访问的实际地址是http://www.yxweb.cc/demo!list?id=5
这样的实际地址可能对搜索引擎就不和谐了。
怎么实现呢?
首先我们思考一下,javaweb应用,用户访问我们服务端的地址封装到request中,那么我们知道有forward和redirect可以实现访问转移,我们想利用filter过滤用户访问来实现访问地址的转移,如果我们使用forward来转移地址,用户是不知道的,从而实现了上文我们谈到的伪静态的实现。
使用urlwriter
理解了思想,实现它我们可以借助urlwriter了。
第一步:下载urlrewrite-2.6.0.现在最新版本是3.1的。(http://tuckey.org/urlrewrite/dist/urlrewritefilter-2.6.zip
http://urlrewritefilter.googlecode.com/files/urlrewritefilter-3.1.0.zip把urlrewrite-2.6.0.jar拷到classpath下。
第二步:在WEB-INF目录下建一个urlrewrite.xml文件。
第三步:在web.xml中初始化。加上下面的代码:
<!-- Set 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>
最后我要简单的讲一下常用的两个配置规则.以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成urlRewrite.xml,这样即使你加上
<init-param>
<param-name>confPath</param-name>
<param-value>/WEB-INF/urlRewrite.xml</param-value>
</init-param>
在启动的服务器的时候还是会报错的,因为源码中必须是全小写的(urlrewrite.xml)且只能放到WEB-INF下面。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 2.6//EN"
"[url]http://tuckey.org/res/dtds/urlrewrite2.6.dtd[/url]">
<urlrewrite>
<rule>
<from>^/(\w+)/(\w+)/page_(\d+)\.html$</from>
<to type="forward">/$1.htm?category=$2&page=$3</to>
</rule>
<rule>
<from>^/rss/yahoo\.html$</from>
<to type="redirect"> [url]http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/W3CSSiteFeed[/url]
</to>
</rule>
</urlrewrite>
所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。
写上你自己定义的访问地址,就是实际的访问地址。比如我们实际的访问地址是:http://yxweb.cc/entity.htm?category=user&page=2.而我们想把它重写为[url]http://yxweb.cc/entity/uesr/page_2.html。这样看起来比我们实际的要好看的多。我们就应该这样的写:
^/(\w+)/(\w+)/page_(\d+).html
/
1.htm?category=2&page=3
简单的介绍一下常用的正规表示式:
代码 说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
匹配字符串的结束
常用的&要用 &来表示。1,$2代表与你配置正规表达式/(\w+)/(\w+)/相对应的参数。
默认的是 type=”forward”.
另一个常用的规则就是连接外部的网站。就要用到。
<to type="redirect">
<rule>
<from>^/rss/yahoo\.html$</from>
<to type="redirect"> [url]http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/MySiteFeed[/url]
</to>
</rule>`这里写代码片`
结束
你知道了么?