Java UrlRewriter伪静态技术运用深入分析

通常我们为了更好的缓解服务器压力,和增强搜索引擎的友好面,都将文章内容生成静态页面。
但是有时为了能实时的显示一些信息,或者还想运用动态脚本解决一些问题,不能用静态的方式来展示网站内容,必须用到动态页面显示。

这样以来,就损失了对搜索引擎的友好面,怎么样在两者之间找个中间方法呢,如何增强你网站中地址的可读性和让搜索引擎快速的收录到你的站点?

这就需要你美化你的网页的地址,这就产生了伪静态技术,也就是我们常说的Url Rewriter重写技术。就是当我们访问一个页面时,地址栏中展示出来的是以“.html”为结尾的静态页面形式,而实际上我们访问的动态网页。这里就需要用到UrlRewriter技术。

大家熟悉的可能有很多服务器都提供Url重写的技术,以前我们用的最多的就是Apache,Jboss这样一些服务器自带的一些Url重写,但是他们的配置比较麻烦,性能又不是太好。现在我们有专一的开源框架来完成Url重写任务,今天我要介绍的就是UrlRewriteFilter,它使用起来比较简单。UrlRewriteFilter是一个用于改写URL的Web过滤器,类似于Apache的mod_rewrite。适用于任何Web应用服务器(如Resin,Orion,Tomcat等)。其典型应用就把动态URL静态化,便于搜索引擎爬虫抓取你的动态网页。
我们先简单的了解一下使用Url重写能给你网站带来哪些好处。

第一:有利于搜索引擎的抓取,因为现在大部分的搜索引擎对动态页面的抓取还比较弱,它们更喜欢抓取一些静态的页面。而我们现在的页面大部分的数据都是动态的显示的。这就需要我们把动态页面变成静态的页面,有利于搜索引擎的抓取。

第二:让用户更容易理解,很少有用户去关心你网站的页面的地址,但对一般的大中型网站增强可读性还是必须的。这样会让你的网站更加完美。

第三:隐藏技术的实现,我们可以通过Url重写可以实现技术的隐藏。不至于暴露你所采用的技术,给一些想攻击你网站的爱好者提供方便。

第四:可以很方便的重用,提高网站的移植性。如果我们后台方法改动的话,可以保证前台的页面部分不用改。这样就提高了网站的移植性。

它虽然有这么多的优点,但是也有一点缺点的,因为它是通过过滤器原理来实现的,就以为着又多了一道访问,会多少影响点访问速度的,这个可以忽略不计的。
现在UrlRewriter技术有两个技术平台的,一个就是在Java方向的,另一个就是.NET方向的。今天我们讲的是Java方向的应用。

首先让我们了解它的工作原理,说白了它就是一个简单的过滤器(Filter),看看源码你就会很快的明白,它就是通过我们在jsp中常用的两个方法实现的forward(),sendRedirect()。
下面我们就Url重写技术进行简单应用:
第一步:下载urlrewrite-3.2.0beta.jar包,并把urlrewrite-3.2.0beta.jar拷到classpath下。
第二步:在WEB-INF目录下建一个urlrewrite.xml配置文件。
第三步:在web.xml配置文件中初始化配置UrlRewriteFilter。在配置文件中加上下面的代码:


代码如下:

<!-- 在配置文件中设置 URL Rewrite-->
<FILTER></FILTER>
<FILTER-NAME></FILTER-NAME>UrlRewriteFilter
<FILTER-CLASS></FILTER-CLASS>
org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
<FILTER-MAPPING></FILTER-MAPPING>
<FILTER-NAME></FILTER-NAME>UrlRewriteFilter
<URL-PATTERN></URL-PATTERN>/*
<DISPATCHER></DISPATCHER>REQUEST
<DISPATCHER></DISPATCHER>FORWARD

最后我要简单的讲一下常用的两个配置规则,以下就是简单的urlrewrite.xml配置片段。不要习惯Java的命名法把它写成urlRewrite.xml,这样即使你加上


代码如下:

<INIT-PARAM></INIT-PARAM>
<PARAM-NAME></PARAM-NAME>confPath
<PARAM-VALUE></PARAM-VALUE>/WEB-INF/urlRewrite.xml
在启动的服务器的时候还是会报错的,因为源码中必须是全小写的(urlrewrite.xml)且只能放到WEB-INF下面。
<!--l version="1.0" encoding="utf-8-->
<URLREWRITE></URLREWRITE>
<!-- 显示主题帖 -->
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html$
<TO type="forward"></TO>/forum/list.action?id=$1
<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<TO type="forward"></TO>/forum/list.action?id=$1&page=$2

所有的规则配置都写在这里。第一个常用个规则就是站内的简单重写。
<rule>
<from></from>
<to type="forward></to>
</rule>
<from></from>
写上你自己定义的访问地址,通常采用正则表达式的写法;<to type="forward></to>就是实际的访问地址。比如我们实际的访问地址是: http://www.phome.asia/forum/list.action?id=16931&page=2而我们想把它重写为http://www.phome.asia/forum/thread/16931.html?page=2。这样看起来比我们实际的要好看的多。我们就应该这样的写:


代码如下:

<RULE></RULE>
<FROM></FROM>^/forum/thread/([0-9]+).html?page=([0-9]+)$
<TO type="forward"></TO>/forum/list.action?id=$1&page=$2

简单的介绍一下常用的正规表示式
代码说明
. 匹配除换行符以外的任意字符
\w 匹配字母或数字或下划线或汉字
\s 匹配任意的空白符
\d 匹配数字
\b 匹配单词的开始或结束
^ 匹配字符串的开始
$ 匹配字符串的结束
常用的&要用 &来表示。$1,$2代表与你配置正规表达式>/(\w+)/(\w+)/相对应的参数。<to type="forward">默认的是 type="forward"。
另一个常用的规则就是连接外部的网站。就要用到<to type="redirect">。


代码如下:

<RULE></RULE>
<FROM></FROM>^/rss/yahoo\.html$
<TO type="redirect"></TO> http://add.my.yahoo.com/rss? url= http://feed.feedsky.com/ MySiteFeed

(0)

相关推荐

  • JAVA Web实时消息后台服务器推送技术---GoEasy

    越来越多的项目需要用到实时消息的推送与接收,我这里推荐大家使用GoEasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送! 浏览器兼容性:GoEasy推送 支持websocket 和polling两种连接方式,从而可以支持IE6及其以上的所有版本,同时还支持其它浏览器诸如Firefox, Chrome, Safari等等. 支持不同的开发语言:GoEasy推送 提供了Restful API接口,无论你的后台程序用的是哪种语言都可以通过Restful API来实现后台实时推送.

  • 总结Java常用到的六个加密技术和代码

    加密,是以某种特殊的算法改变原有的信息数据,使得未授权的用户即使获得了已加密的信息,但因不知解密的方法,仍然无法了解信息的内容.大体上分为双向加密和单向加密,而双向加密又分为对称加密和非对称加密(有些资料将加密直接分为对称加密和非对称加密). 双向加密大体意思就是明文加密后形成密文,可以通过算法还原成明文.而单向加密只是对信息进行了摘要计算,不能通过算法生成明文,单向加密从严格意思上说不能算是加密的一种,应该算是摘要算法吧. 具体来说: 系统必须可用,非数学上不可译码. 系统不一定要保密,可以轻

  • Java中四种XML解析技术

    在平时工作中,难免会遇到把 XML 作为数据存储格式.面对目前种类繁多的解决方案,哪个最适合我们呢?在这篇文章中,我对这四种主流方案做一个不完全评测,仅仅针对遍历 XML 这块来测试,因为遍历 XML 是工作中使用最多的(至少我认为). 预 备 测试环境: AMD 毒龙1.4G OC 1.5G.256M DDR333.Windows2000 Server SP4.Sun JDK 1.4.1+Eclipse 2.1+Resin 2.1.8,在 Debug 模式下测试. XML 文件格式如下: <?

  • java的poi技术读取和导入Excel实例

    报表输出是Java应用开发中经常涉及的内容,而一般的报表往往缺乏通用性,不方便用户进行个性化编辑.Java程序由于其跨平台特性,不能直接操纵Excel.因此,本文探讨一下POI视线Java程序进行Excel的读取和导入. 项目结构: java_poi_excel 用到的Excel文件: xls XlsMain .java 类 //该类有main方法,主要负责运行程序,同时该类中也包含了用poi读取Excel(2003版) import java.io.FileInputStream; impor

  • 识别率很高的java文字识别技术

    java文字识别程序的关键是寻找一个可以调用的OCR引擎.tesseract-ocr就是一个这样的OCR引擎,在1985年到1995年由HP实验室开发,现在在Google.tesseract-ocr 3.0发布,支持中文.不过tesseract-ocr 3.0不是图形化界面的客户端,别人写的FreeOCR图形化客户端还不支持导入新的 3.0 traineddata.但这标志着,现在有自由的中文OCR软件了. java中使用tesseract-ocr3.01的步骤如下: 1.下载安装tessera

  • 你应该知道的21个Java核心技术

    写这篇文章的目的是想总结一下自己这么多年来使用java的一些心得体会,主要是和一些java基础知识点相关的,所以也希望能分享给刚刚入门的Java程序员和打算入Java开发这个行当的准新手们,希望可以给大家一些经验,能让大家更好学习和使用Java. 这次介绍的主要内容是和J2SE相关的部分,另外,会在以后再介绍些J2EE相关的.和Java中各个框架相关的内容. 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相

  • PHP、JAVA、.NET这三种技术的区别分析

    其实这三种编程技术各有优势,我们大概可以从语言.平台这二点来区分: 一.语言: PHP:PHP产生与1994年,其语法混合了C.Java.Perl 和他自创的一些编程语法:PHP是嵌入在HTML中执行的:它也是一种解释性语言.早期的PHP并非完全的面向对象编程语言,到了PHP4以后的版本才开始有了面向对象的概念. JAVA:JAVA产生与1995年,JAVA语言和JAVA平台统称为JAVA:它语法与C语言和C++语言很接近,并且JAVA是面向对象编程语言,JAVA是编译性语言,可以先将JAVA源

  • 分页技术原理与实现之Java+Oracle代码实现分页(二)

    紧接着上篇-分页技术原理与实现之分页的意义及方法(一) ,本篇继续分析分页技术.上篇讲的是分页技术的简单原理与介绍,这篇深入分析一下分页技术的代码实现. 上篇最后讲到了分页的最佳实现是在数据库层进行分页,而且不同的数据库有不同的分页实现,比如Oracle是用三层sql嵌套实现分页的.MySQL是用limit关键字实现的(上篇已讲到). 这篇以Java+Oracle为基础,讲解代码层的实现. 就如平时我们很在分页中看到的,分页的时候返回的不仅包括查询的结果集(List),而且还包括总的页数(pag

  • Java实现远程控制技术完整源代码分享

    Java实现远程控制技术 java自带的java.net.和java.awt.robot. 的混合可以用于实现通过网络对另一台计算机的远程控制,其中包括控制远程计算机鼠标的动作和键盘的输入,以及实时获得远程计算机屏幕的图像.本文将用简洁的语言和由浅入深的逻辑,教大家如何掌握这个技术. 首先先看一下效果图: 远程端计算机界面: 控制端计算机界面: 控制端输入: 远程端输入: 一下开始详细介绍远程控制的技术思路. 首先两台计算机通过java.net的Socket来进行连接. 一端先打开一个Serve

  • JAVA使用JDBC技术操作SqlServer数据库实例代码

    JDBC(Java Data Base Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成.JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序. JDBC并不能直接访问数据库,需要借助于数据库厂商提供的JDBC驱动程序. 数据库连接 如果要在Java访问数据库,首先要加载一个数据库驱动,数据库驱动只需要在第一次访问时加载一次.然后再每次访问

随机推荐