设为首页 收藏本站
查看: 384|回复: 0

[经验分享] Url Rewrite 代替apache实现jsp页面伪静态化

[复制链接]

尚未签到

发表于 2017-1-11 07:50:43 | 显示全部楼层 |阅读模式
Url Rewrite Filter 是一个基于java的url rewirte开源项目,功能类似Apache中的rewrite模块。其实,Url Rewrite让apache来负责才是最好的选择,因为mod_rewrite已经很成熟了,功能或者效率上都更好用,apache已足以使urlrewrite的功能透明了,对于多个应用使用起来更方便。这篇文章介绍的urlrewrite filter只是给那些不打算使用apache的应用提供了另外一种选择。
  一、主要功能
  a) 实现url地址的伪静态化
  例如可以把http://localhost:8080/myindex.do?method=listIndex&user=ezplus的请求重定向或转发到http://localhost:8080/blog/ezplus,这样做就避免了url中出现?&之类的符号,而且页面伪静态化之后也增加了被搜索引擎找到的概率。
  b) 根据配置文件自动转化页面上的连接
  在写页面的时候程序员不用关心在页面中出现的url地址将被如何伪静态化,例如,程序员还是可以在写页面的时候使用http://localhost:8080/myindex.do?method=listIndex&user=ezplus,通过在urlrewrite.xml中配置<outbound-rule></outbound-rule>,既可以实现页面url地址自动转化为伪静态化后的地址,用户在查看页面源码的时候原http://localhost:8080/blog/ezplus将被自动替换为http://localhost:8080/blog/ezplus
  二、安装使用
1.下载地址:http://tuckey.org/urlrewrite/#download
  下载的文件(Binary的)结构简单:urlrewrite.xml和lib文件夹下的一个.jar

2.jar文件放入项目的lib库中,urlrewrite.xml和web.xml放在一块。修改web.xml,添加以下配置:
<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>


  我觉得/*这样的通配,并不符合我的预期,我只想对部分路径进行URL的重写,/*可能会造成我想象不到的或者是许微不足道的性能浪费.我把它改成了我需要的:
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/member/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/article/*</url-pattern>
</filter-mapping>
等...

  3.urlrewriter.xml的配置
  先提一下urlrewriter.xml中原有的几个例子:
<rule>
     <from>/some/old/page.html</from>
     <to type="redirect">/very/new/page.html</to>
</rule>

/**从一个文件到另一个文件的转发   如果不使用正则表达式,这样的配置真是把简单的问题复杂化了**/
<rule>
      <from>/some/olddir/(.*)</from>
      <to type="redirect">/very/newdir/$1</to>
</rule>

/**重定向到一个目录 我觉得实际应用中可能用得不多**/
<rule>
       <from>/products/([0-9]+)</from>
       <to>/products/index.jsp?product_id=$1</to>
</rule>

/**这种是最常用的,通过正则对请求路径进行匹配,并把分组作为参数 ,实际转到到<to>的路径。<to type="redirect">和<to type="forword">有什么区别呢?<to type="redirect">是链接到外部的网站,<to type="forword">是链接到站内的实际地址。**/

  说明一下,如果你在Filter配置中使用了所有路径通配符<url-pattern>/*</url-pattern>
  在配置urlrewriter.xml中的<from>时,随便怎么写路径无所谓,但若象我一样使用了
<url-pattern>/memeber/*</url-pattern>,那么在<from>标签中也要写上/memeber/(你的正则分组)
以便在访问与<from>匹配的路径时,Filter能够执行

  最后一点,不得不说,举个例子
<rule>
   <from>/member/(.*)</from>
   <to>/html/member.do?username=$1</to>
</rule>

<rule>
   <from>/article/(.*)</from>
   <to>
/html/article.do?articleid=$1</to>
</rule>
<rule>
   <from>/member/article/(.*)</from>
   <to>
/html/another/article.do?articleid=$1</to>
</rule>

  当你访问http://localhost/member/article/1111 会显示哪一个页面呢?
  结果应该不是意想中的/html/another/article.do?articleid=1111.
  我想大概是因为<from>中的路径,相当于filter中的
<url-pattern>


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-326696-1-1.html 上篇帖子: Apache Thrift入门2-Java代码实现例子 下篇帖子: apache tomcat 均衡负载配置-ajp方式实现
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表