urlrewrite实现伪静态化

阅读更多

产生背景

静态网页与动态网页比较:

静态网页:

优点: A 对搜索引擎友好,被收录的质量高; B 、访问速度快; C 、资源( cpu 等)占用少。

缺点: A 、对于大型门户,或者社区来说,不断的修改将会产生大量 I/O ,会导致磁盘出现碎片甚至出现磁盘坏道。相当恐怖一个隐患。用户信息一旦没有了就没戏玩了。 B 、储存空间占用会多一些。

动态网页:

优点:相对于静态,它的劣势也就是动态的优势所在——占用空间少,对硬盘友好。

缺点: A 、对搜索引擎不友好。搜索引擎会不收录带问号的网址 ? 因为搜索引擎怕由于问号而进入死循环。 B 、高并发时资源占用较多。

二、伪静态作用

1 、提高安全性,可以有效的避免一些参数名、 ID 等完全暴露在用户面前,如果用户随便乱输的话,不符合规则的话直接会返回个 404 或错误页面,这比直接返回 500 或一大堆服务器错误信息要好的多

2 、美化 URL ,去除了那些比如 *.do 之类的后缀名、长长的参数串等,可以自己组织精简更能反映访问模块内容的 URL

3 、更有利于搜索引擎的收入,通过对 URL 的一些优化,可以使搜索引擎更好的识别与收录网站的信息

三、 Java 伪静态实现方式

Java 上主要使用 urlRewrite ,下载地址 http://www.tuckey.org/urlrewrite/ ,从单词字面意义上可以发现就是对 URL 进行重写,用户得到的全部都是经过处理后的 URL 地址。其具体实现步骤如下:

1、 下载 urlrewrite jar 包,并复制到项目中去;

2、 web.xml 中配置过滤器

 	
	
		UrlRewriteFilter
		
			org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
		
		
			logLevel
			WARN
		
		
		
			confPath
			/WEB-INF/classes/urlrewrite.xml
		
	
	 
	
		UrlRewriteFilter
		/*
	

 

3 、编写 urlrewrite.xml 伪静态化的规则文件,这个文件我们可以从下载网址上下载下来,然后进行修改,这里以 Struts2 Action 跳转为例:




     
     
    
    	^/([a-zA-Z]*)\/([a-zA-Z]*)\/([a-zA-Z]*)_((?:[a-zA-Z]+)|(?:[0-9]+)).html$
		/$1!$2.action?$3=$4
		
    
    
    
     
    	^/([a-zA-Z]*)\/([a-zA-Z]*)\/([a-zA-Z]*)_((?:[a-zA-Z]+)|(?:[0-9]+))\/([a-zA-Z]*)_((?:[a-zA-Z]+)|(?:[0-9]+)).html$
		/$1!$2.action?$3=$4&$5=$6
    
    
    
    
    
		^/([a-zA-Z]*)\/([a-zA-Z]*)!([a-zA-Z]*).action\?([a-zA-Z]*)=((?:[a-zA-Z]+)|(?:[0-9]+))$
		/$1/$2/$3/$4_$5.html
	
		
	
	
  	
    
		^/([a-zA-Z]*)\/([a-zA-Z]*)!([a-zA-Z]*).action\?([a-zA-Z]*)=((?:[a-zA-Z]+)|(?:[0-9]+))&([a-zA-Z]*)=((?:[a-zA-Z]+)|(?:[0-9]+))$
		/$1/$2/$3/$4_$5/$6_$7.html
	


 

说明:

1) outbound-rule ,先说这个是因为在开发编写时,一般先写这部分然后再先 rule 的, outbound-rule 是将页面上的超链接选项地址转化为伪静态地址,这里需要注意的是页面中的超链接需要经过 response.encodeUrl(url) 转化,或采用 标签进行转化

2) outbound-rule 中的 from 表示页面上的地址, to 表示在网页上显示出来的伪静态地址;

3) outbound-rule 中的 form to 需要加上项目名称,而 rule 不需要的;

4) rule 处理伪静态地址, form 包含通过正则表达式对请求进行匹配, to 即为实际的请求地址;

5) 、因为这里用到正则,所以需要注意转义: &=>& ?=>/?

6) $1,$2 代表与你配置正规表达式 /(\w+)/(\w+)/ 相对应的参数。 默认的是 type="forward" 。另一个常用的规则就是连接外部的网站。就要用到。

7) ^: 匹配字符串的开始, $ :匹配字符串的结束;

8) ([a-zA-Z]*)\/([a-zA-Z]*) 中的“ \ ”表示转义;

其实上面的我们可以看出就是在设定一些规则(在编写正则的时候需要细心,编写正则时,可以在 http://www.rubular.com/ 上进行验证),这和 Rest 风格的编程很类似,设计的规则越好,其展示出来的链接地址越直观,简洁。

 

 

4、 修改 jsp 页面上的地址(需要添加 jstl 相关的 jar jstl.jar standard.jar ):

一个参数的:

	
			
  • My Upload
  •  

    两个参数的:

    		   
    	    
    	    
    		Edit
    

     

     

     

     

     

     

     

     

     

    • jstl.jar (20.2 KB)
    • 下载次数: 6
    • standard.jar (384 KB)
    • 下载次数: 6
    • urlrewrite-3.1.0.jar (143.3 KB)
    • 下载次数: 7

    你可能感兴趣的:(java,urlrewrite,伪静态)