最简单的是基于各种WEB服务器中的URL重写转向(Rewrite)模块的URL转换:
这样几乎可以不修改程序的实现将 news.jsp?id=234 这样的链接映射成 news/234.html,从外面看上去和静态链接一样。resin服务器上可以通过webinfo的web.xml来设置:URL REWRITE功能之强大足够写上一本书。
当我需要将将news.jsp?id=234的映射成news/234.html时,只需设置web-inf所在目录下面的web.xml:
并且增加以下语句
<filter filter-name='rewrite'
filter-class='com.caucho.filters.RewriteFilter'>
<init>
<rewrite pattern="/(\d+)\.html" target="/\news.jsp\?id=$1"/>
//<rewrite pattern="/value_(.+)\.html" target="/\news.jsp\?t=$1"/> 这句是作为另外的参数设置的
</init>
</filter>
<filter-mapping url-pattern='/*' filter-name='rewrite'/>
其他方法大家可以自己去摸索,rewrite的功能非常强大。
这样设置后就可以通过1234.htm这样的链接访问原来的动态页面了。
通过URL REWRITE还有一些好处:
隐藏后台实现:这在后台应用平台的迁移时非常有用:当从jsp迁移到asp平台时,对于前台用户来说,根本感受不到后台应用的变化;
简化数据校验:因为像(\d+)这样的参数,可以有效的控制数字的格式甚至位数;
比如我们需要将应用从news.jsp?id=234迁移成news.php?query=234时,前台的表现可以一直保持为 news/234.html。从实现应用和前台表现的分离:保持了URL的稳定性,而使用mod_rewrite甚至可以把请求转发到其他后台服务器上。