基于Struts框架的伪静态技术实现

2012-04-29 00:44:03包乌格德勒李娟
中国高新技术企业 2012年4期

包乌格德勒 李娟

摘要:静态网页技术和动态网页技术都有各自的优缺点,随着互联网的不断发展,结合它们优点的伪静态技术应运而生。文章通过介绍Struts框架的运行原理,研究了基于Struts框架的伪静态技术,并给出了基于Struts框架实现伪静态技术的方法。

关键词:伪静态; Struts; Action Servlet; Action

中图分类号:TP393 文献标识码:A 文章编号:1009-2374(2012)06-0118-02

早期的网站都采用静态网页技术,网页的内容更新都是由人工编辑修改的,浪费很多人力资源。静态页面的URL大多以.htm和.html结尾。随着互联网信息量的不断壮大,网站开发人员为了减轻网站服务器的负荷和提高网站安全性,各网站都不约而同地采用了动态网页技术。动态页面一般指服务器端脚本程序与HTML文件相混合的页面,它可以访问数据库中的内容,动态页面的内容随着数据库内容的变化而自动改变,不需要人工编辑修改。当用户访问动态网页时,Web服务器会根据用户所访问页面的URL,执行相应页面的程序代码,把程序执行结果转换成静态页面反馈给用户。比较常用的动态网页技术有:ASP、ASP.NET、JSP、PHP等。

动态网页技术有提高网站开发速度、占用空间少等优点,但是它的资源占用比静态网页高,而且对搜索引擎不友好。静态网页虽然占用空间大,但是它的访问速度更快,资源占用更少,特别是对搜索引擎友好,更容易被搜索引擎收录。鉴于静态和动态网页技术的优点和缺点,又出现了伪静态技术,它是在保留动态网页优点的基础上,使页面URL静态化,即使用静态URL来访问动态网页,使URL不带动态参数(没有问号),骗过收录的爬虫程序。本文研究基于Struts框架实现伪静态技术的方法。

一、Struts框架

JSP是Java Web应用开发的核心技术,与Struts框架结合在一起,可以快速高效地开发出Java Web应用程序。Struts通过ActionServlet实现Model2架构,是Struts框架的核心,是中央控制器,所有的用户请求都先由ActionServlet来处理,然后由ActionServlet把请求转发给Struts的一个Action。Struts框架只允许在一个Web应用中配置一个ActionServlet类,在应用的生命周期内,仅创建ActionServlet类的一个实例,该实例负责用户的所有请求。

ActionServlet在web.xml(Web应用配置文件)中的配置如下:

action

org.apache.struts.action.ActionServlet

config

/WEB-INF/struts-config.xml

action

*.do

一般情况下,ActionServlet只负责处理所有以.do结尾的URL,所以配置为*.do。

二、基于Struts框架实现伪静态技术

(一)Struts实现伪静态的两种配置方法

静态网页一般以.html结尾,而ActionServlet却只会处理以.do结尾的请求,所以想要通过Struts框架实现伪静态技术,就必须配置ActionServlet也可以处理.html结尾的请求。其实在Web应用中配置Struts时,可以让Struts同时处理多种形式的URL,通过在web.xml添加多个元素来

实现。

伪静态技术可以通过两种形式的配置方法来实现:一个是以扩展名形式,另一个是以路径形式。

1.扩展名形式。

能够同时处理.html和.do结尾请求的ActionServlet的配置如下:

action

*.html

action

*.do

元素中配置了要处理的伪静态页面的扩展名“.html”,配置成功后ActionServlet就可以处理.html结尾的URL,此时用户实际访问的并不是静态网页,而是Struts的ActionServlet和Action运行的结果。

2.路径形式。

可以在元素中设置一个以/开始的URL,如/public/*,表示以public开始的所有URL都由Struts来处理,此时的URL可以由任何扩展名来结尾,包括.htm、.html等静态URL。配置如下所示:

action

/public/*

action

*.do

元素中配置了要处理的伪静态页面的路径“/public/*”。

(二)在Struts中配置伪静态URL的Action映射

当Struts处理用户请求时,会把请求转发给一个Action类,在Struts的配置文件struts-config.xml中需要设置用户请求路径和Action的映射关系,需要为伪静态URL映射一个Action类。不同形式的伪静态配置方法,将会有不同的结果。

如果以扩展名*.html形式配置了伪静态,在struts-config.xml中映射如下的Action:

此时HTMLAction类可处理用户请求路径为abc.html和abc.do的请求。

如果以路径/public/*形式配置了伪静态,在struts-config.xml中映射如下的Action:

此时HTMLAction类可处理用户请求路径如/public/任意字符串.html的请求,但是在路径“/public/”后不能再出现/字符,即只能处理public直接路径中的用户请求,不能处理public的子路径中的用户请求。

如果想要处理public的所有路径中的请求,包括子路径,就必须配置如下的Action映射:

此时HTMLAction类可处理用户请求路径如/public/任意字符串.html的请求,但是与上面不同的是,可以处理public的子路径中的用户请求,即可以处理以public开始的任意请求路径。推荐使用本方法实现伪静态技术。

三、结语

本文分析了通过Struts框架实现伪静态技术的方法,介绍了两种形式的配置方法。可以发现,以路径形式配置伪静态,且设置Action的path为“/**.html”,可以简化伪静态的配置,具有很好的应

用性。

参考文献

[1]周志坚.动态网页静态化的实现[J].无锡商业职业技术学院学报,2007,7(3).

[2]刘斌.精通Java Web整合开发:JSP+AJAX+Struts+Hibernate [M].北京:电子工业出版社,2007.

作者简介:包乌格德勒(1979-),男(蒙古族),内蒙古兴安盟人,呼和浩特民族学院计算机科学与技术系讲师,研究方向:电子商务、软件工程。

(责任编辑:赵秀娟)