一个关于jsp开发分页技术的疑惑
不说多的,直接讲重点;首先,我已会网页分页技术,但是方法是通过一个servlet来处理结果,只是通过每次传参数不一样。举例:<a href="do_query.jsp?page=1">第一页</a> <a href="do_query.jsp?page=<%=p-1%>">上一页</a>具体代码不发了,大概的意思就是点其他页的超链接时,仅仅只时把计算好的page值传给同样的jsp页面继续运算。。这个我也是从其他人哪里学会的。我的问题是:像优酷的网站,它的分页是这样子的(比如第一第二页,页面的地址栏为):http://...../page/1.html和http://...../page/2.html。。姑且不论它的html尾缀是不是映射的,但是至少它没传参数吧?我就是疑惑它是怎么搞的,总不至于手动添加,有几页就在硬盘上事先存好几个网页吧?很好奇内部运行机制,懂的朋友望帮忙解惑下,谢谢
------最佳解决方案--------------------使用java伪静态可以
现在UrlRewriter技术有两个技术平台 的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。
首先让我们了解它的工作原理,说白了它就是一个简 单的过滤器(Filter) ,看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect().
下面我们就快速 的为你的网站搭建Url重写技术。
第一步:下载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"
"http://tuckey.org/res/dtds/urlrewrite2.6.dtd">
<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"> http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/W3CSSiteFeed
</to>
</rule>
</urlrewrite>
所 有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。
<rule>
<from></from>
<to type="forward></to>
</rule>
<from></from> 写上你自己定义的访问地址,<to type="forward></to>就是实际的访问地址。
比如我们实际的访问地址是:http://yousite.com /entity.htm ?category=user&page=2.
而我们想把它重写为http://yousite.com/entity/uesr /page_2.html。这样看起来比我们实际的要好看的多。我们就应该这样的写:
<rule>
<from>^/(/w+)/(/w+)/page_(/d+)/.html$</from>
<to type="forward">/$1.htm?category=$2&page=$3</to>
</rule>
简 单的介绍一下常用的正规表示式:
代码
说明
.
匹配除换行符以 外的任意字符
/w
匹配字母或数字或下划线或汉字
/s
匹配任意的空白符
/d
匹 配数字
/b
匹配单词的开始或结束
^
匹配字符串的开始
$
匹 配字符串的结束
常用的&要用 &来表示。$1,$2代表与你配置正规表达式/(/w+)/(/w+)/相对应的参数。<to type="forward">默认的是 type="forward".
另一个常用的规则就是连接外部的网站。就要用到。<to type="redirect">
<rule>
<from>^/rss/yahoo/.html$</from>
<to type="redirect"> http://add.my.yahoo.com/rss? url=http://feed.feedsky.com/MySiteFeed
</to>
</ru