jsp的url去掉.jsp的后缀——urlrewrite的使用

来源:互联网 发布:江南大学软件下载 编辑:程序博客网 时间:2024/06/18 18:10

最近面试被问到问题:用jsp做的网站网页的后缀都有.jsp的后缀,有没有什么办法能够消除掉这个后缀。回来研究了发现用urlrewrite可以达到目的。

http://tuckey.org/urlrewrite/

这个是适用于java web application的urlrewrite的网站,网站上写的相当清楚了。我就对应于消除掉.jsp后缀这个特定的任务记录一下。

该网站给出了urlrewrite.xml的示例配置。http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/urlrewrite.xml其中可以看到,最简单的urlrewrite就是

<rule>            <from>/some/old/page.html</from>            <to>/very/new/page.html</to></rule>

from标签内就是浏览器请求的url,to就是发给容器的url。
根据官方给出的文档http://urlrewritefilter.googlecode.com/svn/trunk/src/doc/manual/4.0/index.html
<from> element


You must always have exactly one from for each rule or outbound-rule. Value can be a regular expression in the Perl5 style. Note, from url's are relative to the context.


<to> element


Value can be a regular replacement expression in the Perl5 style.


这里能够使用正则表达式来指定特定的url。那么最先想到的方法就是

<rule>    <from>/(.*)</from>    <to>/$1.jsp</to></rule>

这样能够把根目录上所有的文件都添加上.jsp的后缀。但是运行却是后台不停报错。修改为

<rule>    <from>/(.*)</from>    <to type="redirect">%{context-path}/$1.jsp</to></rule>
发现浏览器报错:

此网页包含重定向循环

浏览器的地址栏url后缀为.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp.jsp,既是不停地给url添加.jsp后缀。这里的原因就是因为对于.*,以.jsp结尾的url也符合。所以以.jsp结尾的url也会被添加.jsp后缀。导致死循环不停添加。forward方式(<to>元素的默认方式)服务器端不停报错也是因为不停地服务器端跳转的原因。

那么只要<from>里的正则表达式修改为不以jsp结尾的就行。

<rule>     <from>/((?!(.*?jsp$)).*)</from>     <to>/$1.jsp</to></rule>
ok.

    

原创粉丝点击