日期:2014-05-18  浏览次数:20592 次

JSP怎么重写URL
比如我现在浏览我的JSP页面要这样:http://www.abc.com/str/u.jsp?id=2001.

我怎么可以重写该URL成为.html的后缀,就像这样子:http://www.abc.com/str/20010304.html

------解决方案--------------------
一般说的url重写是实现会话跟踪的一种方式,(还有使用cookies)

你这里的这个问题使用字符串操作把最后的u.jsp?id=2001替换成20010304.html不就行了吗.

------解决方案--------------------
appfuse中使用了UrlRewrite.实现了url的重写,这样有什么用处呢?上网搜了一把,大体上有以下好处:

1、满足搜索引擎的要求
某些搜索引擎不能支持动态页面的抓取,大量的信息就不能被潜在用户搜索到。用UrlRewrite技术你可以把 http://server/news.asp?id=111 变成 http://server/news/111.htm 这样他们就会被搜索引擎收录了。google虽然可以抓取动态页面,但是google对动态页面的评分一般低于静态页面。所以,对大量信息发布的网站,把网站地址改变成静态的绝对是值得的。

2、隐藏技术实现,提高网站的移植性
每个页面都挂着鲜明的.asp/.jsp这种开发语言的标记,可以一眼让人看出你的网站使用什么语言做的。而且在改变网站的语言的时候,你需要改动大量的链接。而且,一个页面修改了扩展名,他的pagerank也会随之消失,从头开始。我们可以用UrlRewrite技术隐藏我们的实现细节,这样修改移植都很方便,而且完全不损失pagerank。

3、满足美感的要求
对于追求完美主义的网站设计师,即使是网页的地址也要看起来简洁明快。形如 http://server/news.asp?channel=3&id=111 的网页地址,肯定是上不了完美主义者的法眼的,用UrlRewrite技术,你可以把他变成 http://server/news/3/111.htm 。
在应用中怎样集成它呢?看看appfuse中的实现方式。
首先在web.xml中配置一个过滤器:

1 <filter>
2 <filter-name> rewriteFilter </filter-name>
3 <filter-class> org.tuckey.web.filters.urlrewrite.UrlRewriteFilter </filter-class>
4 <init-param>
5 <param-name> logLevel </param-name>
6 <param-value> commons </param-value>
7 </init-param>
8 </filter>
1 <filter-mapping>
2 <filter-name> rewriteFilter </filter-name>
3 <url-pattern> /**//* </url-pattern>
4 <!--dispatcher> REQUEST </dispatcher>
5 <dispatcher> FORWARD </dispatcher-->
6 </filter-mapping>
然后在WEB-INF目录下有一个配置文件urlrewrite.xml内容如下:

1 <?xml version= "1.0 " encoding= "utf-8 "?>
2 <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN "
3 "http://tuckey.org/res/dtds/urlrewrite3.0.dtd ">
4
5 <!-- https://urlrewrite.dev.java.net/manual/3.0 -->
6 <urlrewrite>
7 <rule>
8 <from> ^/user/(.*).html$ </from>
9 <to type= "forward "> /editUser.html\?username=$1 </to>
10 </rule>
11
12 <!-- Override default validation.js from WebWork -->
13 <rule>
14 <from> ^/webwork/css_xhtml/validation.js$ </from>
15 <to type= "forward "> /template/css_xhtml/validation.js </to>
16 </rule>
17 </urlrewrite>

在http://www.blogjava.net/liuwentao253/archive/2006/08/20/64600.html地址可以看到原帖