Chinaunix首页 | 论坛 | 博客
  • 博客访问: 29943762
  • 博文数量: 708
  • 博客积分: 12163
  • 博客等级: 上将
  • 技术积分: 8240
  • 用 户 组: 普通用户
  • 注册时间: 2007-12-04 20:59
文章分类

全部博文(708)

分类: Java

2010-07-19 00:19:34

转两篇关于URLRewrite的文章:
 
 最近小弟研究了一下struts2.1.6与URLrewrite的结合,纵观整个WEB项目而言,毫无疑问urlrewrite是对网址的重写,在SSH中也只有struts2.1.6与网址打交道了,struts2.1.6在MVC中主要作用还是承担的是Control的作用.当然还需要在WEB.xml里面配置一下映射路径.
urlrewrite最新的稳定是urlrewrite-2.6.0.jar,开源JAR包到下载.小弟提倡所有的JAR最好到官网去下,不要用IDE工具提供的(如Myeclipse,因为它提供的JAR有问题.struts1.2的JAR就有问题.一直到Myeclispe7也没有纠正这个问题,所以各个框架的官网上的才是最可信的.)
下面大致的说下它们是如何结合的.小弟的项目后台框架是struts2.1.6+Springs.5+Hibernate3.3,前台用到了Jquery,关于编码的问题,最好使用Spring2.5的过滤器,而且一定要放在最前面,这个在前面已经说过了,在这里不啰嗦.
1,基于urlrewrite和struts2.1.6它们截取网址的原理,在web.xml采用以下的配置:
 view plaincopy to clipboardprint?
  
      
        UrlRewriteFilter  
          
            org.tuckey.web.filters.urlrewrite.UrlRewriteFilter  
       
  
          
            logLevel  
            debug  
       
  
   
  
      
        UrlRewriteFilter  
        *.html  
   
 

 
  UrlRewriteFilter
  
   org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
  

  
   logLevel
   debug
  

 

 
  UrlRewriteFilter
  *.html
 
下面是struts2.1.6的配置(重要)
view plaincopy to clipboardprint?
 
     
        Struts2CleanUp 
         
            org.apache.struts2.dispatcher.ActionContextCleanUp  
       
 
         
   
 
     
        Struts2CleanUp 
        *.htm 
   
 
 
     
     
        struts2 
         
            org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter  
       
 
         
   
 
     
        struts2 
        *.htm 
        REQUEST   
        FORWARD   
   
 

 
  Struts2CleanUp
  
   org.apache.struts2.dispatcher.ActionContextCleanUp
  

  
 

 
  Struts2CleanUp
  *.htm
 
 
 
  struts2
  
   org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  

  
 

 
  struts2
  *.htm
  REQUEST
     FORWARD
 
2,urlrewrite还需要一个XML文件,名字urlrewrite.xml,它用来告诉哪些文件需要转重写成什么网址,它是基于正则来实现的.
这个文件可以到开源里面拷贝,把原来的删掉,加上自己的代码,(把DTD给留下).这个文件放在WEIN-INF和web.xml同级目录.
view plaincopy to clipboardprint?
 
     
        ^/list-([a-zA-Z0-9]*)-([0-9]*)-([0-9]*)-([0-9]*)-([0-9]*).html$ 
        /list.htm?goodsurl=$1&fangshi=$2&order=$3&pageSize=$4¤tPage=$5 
   
 

 
  ^/list-([a-zA-Z0-9]*)-([0-9]*)-([0-9]*)-([0-9]*)-([0-9]*).html$
  /list.htm?goodsurl=$1&fangshi=$2&order=$3&pageSize=$4¤tPage=$5
 
 
如上例子,from中的正则以^开头和$结尾这个是显示在地址栏里面的,这样严格一点.to是真正要访问的网址,它们是一一对应的,$1,表示的是第一个正则.
注意:网址中的&要用&进行转义,(在XML文件中出现这个字符的时候都要进行转义).

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/minjiaren/archive/2009/11/14/4806995.aspx
 
 
 
urlrewrite顾名思义,就是对URL进行重写,用户得到的全部都是经过处理后的URL地址,这样做我觉得好处有三:
一:提高安全性,可以有效的避免一些参数名、ID等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个404或错误页面,这比直接返回500或一大堆服务器错误信息要好的多
二:美化URL,去除了那些比如*.do之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的URL
三:更有利于搜索引擎的收入,通过对URL的一些优化,可以使搜索引擎更好的识别与收录网站的信息
使用urlrewrite的步骤如下:
首页,访问其官网:,我下载的是最新的目前还处于Beta版的urlrewritefilter-3.2.0,下载后将其中的urlrewrite-3.2.0.jar扔到需使用此功能项目的lib目录中去
其次,在web.xml中加入如下配置:
view plaincopy to clipboardprint?
 
        UrlRewriteFilter 
        org.tuckey.web.filters.urlrewrite.UrlRewriteFilter 
         
            logLevel 
            WARN 
       
 
   
 
     
        UrlRewriteFilter 
        /* 
        REQUEST 
        FORWARD 
   
 

        UrlRewriteFilter
        org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
       
            logLevel
            WARN
     

   

   
        UrlRewriteFilter
        /*
        REQUEST
        FORWARD
   
其实,urlrewrite其实就是个过虑器,它将会过虑用户的所有请求,符合规则的便对其进行重定向,具体的配置参数的使用方法见官方文档:
配置好web.xml后将下载的urlrewritefilter-3.2.0中的urlrewrite.xml配置文件放在WEB-INF目录下,这样在使用urlrewritefilter时它便自动到该目录下读取相关的配置了,我配置了个简单的,代码如下:
view plaincopy to clipboardprint?
 
    /zh_CN/NewsInfo/NEWS_([0-9]+) 
    /zh_CN/NewsInfo/view.do?method=view&id=$1 
 
      
 
    /zh_CN/NewsInfo.do\?method=view&id=([0-9]+)$ 
    /zh_CN/NewsInfo/NEWS_$1 
 

 /zh_CN/NewsInfo/NEWS_([0-9]+)
 /zh_CN/NewsInfo/view.do?method=view&id=$1

   

 /zh_CN/NewsInfo.do\?method=view&id=([0-9]+)$
 /zh_CN/NewsInfo/NEWS_$1
rule结点中form的规则默认使用的是正则表达式来匹配的,当用户访问服务器时的URL会与该配置相比较,如果符合规则就会按照下面to结点中的配置对其进行跳转,其默认是forward跳转,具体配置可见官网文档。
outbound-rule结点是服务器解析后的页面URL对外表现的形式,配置与上面的大体相同,如我一新闻链接代码在JSP中书写的形式如下:
view plaincopy to clipboardprint?
 
  • · ${cur.title}
  •  

  • · ${cur.title}
  • 经服务器解析后,最终显示在页面中的将变成:
    view plaincopy to clipboardprint?
  • · 新闻标题
  •  
  • · 新闻标题
  • 当用户点击此链接后urlrewrite便用通过rule的配置重跳转到真正的访问地址,这样便很好的隐藏了真实地址
    这其中有点是需要注意的,引用官网中的一段话:
    Using the example above JSP's with the code
    ">nyc
    will output
    nyc
    Or JSTL
    ">nyc
    will output
    nyc
    Note, If you are using JSTL (ie, 意思就是说需要转化的链接不能直接写在a标签中,需要写在c:url或其他服务器需要解析的变量中,这样才能对其重新显示
     
    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/opnmzxcvb/archive/2010/01/26/5253619.aspx
    阅读(2356) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~