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

最近面试被问到问题:用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.

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值