`
jackroomage
  • 浏览: 1197102 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

urlrewrite实现伪静态化 Struts2

 
阅读更多

来源:

      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 中配置过滤器

Xml代码  收藏代码
  1. <!-- 伪静态过滤器注册 -->       
  2.     <filter>  
  3.         <filter-name>UrlRewriteFilter</filter-name>  
  4.         <filter-class>  
  5.             org.tuckey.web.filters.urlrewrite.UrlRewriteFilter  
  6.         </filter-class>  
  7.         <init-param>  
  8.             <param-name>logLevel</param-name>  
  9.             <param-value>WARN</param-value>  
  10.         </init-param>  
  11.         <!-- 这里配置urlrewrite.xml文件的地址,如果和web.xml同在WEB-INF下则不需配置此项 -->  
  12.         <init-param>  
  13.             <param-name>confPath</param-name>  
  14.             <param-value>/WEB-INF/classes/urlrewrite.xml</param-value>  
  15.         </init-param>  
  16.     </filter>  
  17.     <!-- 伪静态过滤器映射-->   
  18.     <filter-mapping>  
  19.         <filter-name>UrlRewriteFilter</filter-name>  
  20.         <url-pattern>/*</url-pattern>  
  21.     </filter-mapping>  

 

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

Xml代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.1//EN" "http://tuckey.org/res/dtds/urlrewrite3.1.dtd">  
  3. <urlrewrite>  
  4.      <!-- 1、匹配一个参数的 -->  
  5.      <rule>  
  6.     <!-- /FileShare/myUpload/myUploadList/pageNo/1.html -->  
  7.         <from>^/([a-zA-Z]*)\/([a-zA-Z]*)\/([a-zA-Z]*)_((?:[a-zA-Z]+)|(?:[0-9]+)).html$</from>  
  8.         <to>/$1!$2.action?$3=$4</to>  
  9.         <!--   
  10.          <from>^/myUpload/myUploadList/pageNo/((?:[a-zA-Z]+)|(?:[0-9]+)).html$</from>  
  11.          <to>/myUpload!myUploadList.action?pageNo=$1</to>  
  12.          -->  
  13.     </rule>  
  14.       
  15.     <!-- 2、匹配两个参数的 -->  
  16.      <rule>  
  17.         <from>^/([a-zA-Z]*)\/([a-zA-Z]*)\/([a-zA-Z]*)_((?:[a-zA-Z]+)|(?:[0-9]+))\/([a-zA-Z]*)_((?:[a-zA-Z]+)|(?:[0-9]+)).html$</from>  
  18.         <to>/$1!$2.action?$3=$4&amp;$5=$6</to>  
  19.     </rule>  
  20.       
  21.     <!-- ${applicationScope.basePath }/myUpload!myUploadList.action?pageNo=1 -->  
  22.     <!-- 1、匹配一个参数的 -->  
  23.     <outbound-rule>  
  24.         <from>^/([a-zA-Z]*)\/([a-zA-Z]*)!([a-zA-Z]*).action\?([a-zA-Z]*)=((?:[a-zA-Z]+)|(?:[0-9]+))$</from>  
  25.         <to>/$1/$2/$3/$4_$5.html</to>  
  26.       
  27.         <!--  
  28.         <from>^/FileShare/myUpload!myUploadList.action\?pageNo=([0-9]+)$</from>  
  29.         <to>/FileShare/myUpload/myUploadList/page/$1.html</to>  
  30.         -->  
  31.     </outbound-rule>  
  32.       
  33.     <!-- 2、匹配两个参数的 -->  
  34.     <outbound-rule>  
  35.         <from>^/([a-zA-Z]*)\/([a-zA-Z]*)!([a-zA-Z]*).action\?([a-zA-Z]*)=((?:[a-zA-Z]+)|(?:[0-9]+))&amp;([a-zA-Z]*)=((?:[a-zA-Z]+)|(?:[0-9]+))$</from>  
  36.         <to>/$1/$2/$3/$4_$5/$6_$7.html</to>  
  37.     </outbound-rule>  
  38.   
  39. </urlrewrite>  

 

说明:

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

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

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

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

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

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

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

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

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

 

 

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

一个参数的:

Jsp代码  收藏代码
  1. <c:url value="/myUpload!myUploadList.action?pageNo=1" var="myUpload"></c:url>  
  2.         <li>  
  3.             <a href='${myUpload }' target="main">My Upload</a>  
  4.         </li>  

 

两个参数的:

Jsp代码  收藏代码
  1. <s:set name="id" value="id"></s:set>     
  2.    <s:set name="pageNo" value="pagination.getPageNo()"></s:set>  
  3.    <c:url value='/modifyUpload!entryModify.action?uploadFileId=${id}&pageNo=${pageNo }' var="modifyFileUrl" ></c:url>  
  4. <a href='${modifyFileUrl }' target="main" >Edit</a> 
分享到:
评论

相关推荐

    struts2+spring3+hibernate4+urlrewrite

    本框架为struts2+spring3+hibernate4+urlrewrite(伪静态地址) Struts采用通配,web-inf下的urlrewrite.xml为伪静态配置文件,跳转到struts.xml进行对应

    Url Rewrite Filter实现页面伪静态化,简单实例及步骤

    UrlRewrite,在创建的时候,选择勾选“Add JSTL libraries to WEB-INF/lib folder ”(注:因为项目中会用到jstl 核心标签库),然后再把urlrewrite-2.6.0.jar导入到项目Bulid Path路径下,最后再加入struts框架。

    ssh2中的urlrewrite和Struts2的生成静态页面

    ssh2中的urlrewrite和Struts2的生成静态页面

    urlrewrite静态页面的使用例子

    一个很简单的使用urlrewrite实现静态页面的实现,只要把该文件解压后直接导入到eclipse里就行了,或者直接把WEB下的文件拷到TOMCAT的ROOT下去,即可运行。

    伪静态_URLRewrite实例解析

    伪静态_URLRewrite实例解析,啥都不说了,详细的全程解析,菜鸟都能看懂……

    hibernate3+struts2+spring2+freemarker 主流技术架构 实例

    包括: +----doc +-----jeecms基础概念.txt ...• 采用伪静态结合页面缓存技术,可自定义路径结构,无需urlrewrite • 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    jeecms-src.rar_com.jeec_freemarker_freemarker struts2_单点登录

    JEECMS是JavaEE版网站管理系统(Java Enterprise Edition Content...采用伪静态页面技术,可自定义路径结构,无需urlrewrite 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    jeecmsv2.3.2 内容管理系统 (hibernate3+struts2+spring2+freemarker)

    JEECMS是JavaEE版网站管理系统(Java Enterprise ...· 采用伪静态结合页面缓存技术,可自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    JEECMS3.0.4使用教程

    在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 采用伪静态页面技术,可自定义路径结构,无需urlrewrite 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录。

    jee cms学习文档

    · 采用伪静态页面缓存技术,管理方便,速度可与静态页面相媲美,用户自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    JEEcms目前国内的cms领跑者

    JEECSM是JavaEE版网站管理系统(Java Enterprise Edition ...·采用伪静态页面技术,可自定义路径结构,无需urlrewrite ·轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登陆!

    JEECMS v2.3.2 正式版用源码

    JEECMS是JavaEE版网站管理系统(Java Enterprise Edition Content...采用伪静态页面技术,可自定义路径结构,无需urlrewrite 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    jeecms3.0.4

    在设计上自身预先做了搜索引擎优化,增强对搜索引擎的友好性 ,采用伪静态页面技术,可自定义路径结构,无需urlrewrite ,轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录。

    jeecms-2.4.2(源码+安装包)

    JEECMS是国内Java版开源网站内容管理系统(java cms、jsp ...· 采用伪静态页面技术,可自定义路径结构,无需urlrewrite · 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录

    JEECMS v2.2 beta 贺岁版

    采用伪静态页面技术,可自定义路径结构,无需urlrewrite 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录 JEECMS v2.2 beta版对以下方面进行了更新: ·降低运行环境...

    JEECMS 2.3.1 Beta 系统程序

    采用伪静态页面技术,可自定义路径结构,无需urlrewrite 轻松建设大规模网站,可通过次级域名建立子站群,各子站后台管理权限分离,全站实现单点登录 JEECMS v2.3.1版于2009年3月23日发布,这是JEECMS自发布以来...

Global site tag (gtag.js) - Google Analytics