服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

使用actionhandler进行web应用编程

1


 

技术手册系列

使用actionhandler进行web应用编程


技术手册系列

使用actionhandler进行web应用编程

ã xie ke

 


目录


第一章actionhandler简介   2

目的  2

actionhandler的结构  2

第二章 actionhandler 的使用   5

第三章 actionhandler api 参考   7

class actionhandler 7

class generalhandlesvt 13

第四章 tomcat中配置actionhandler 16

下载  16

安装  16

示例和应用  16



 

第一章


 


第一章actionhandler简介

介绍actionhandler的目的、构成和实现

目的

web应用程序都包括客户端和服务器端,如下

 

客户端: 写一个form ,里面包括要处理的数据,formaction指向服务器端的某个servlet

 

服务器端:  写一个servlet,接受指定客户端的请求,取出传过来的客户数据,作相应处理,根据处理结果转到下一个页面

 

客户端,也就是jsp页面,主要是用于显示。主要的业务逻辑,以及流程控制,都在servlet里面。

在一个web应用中,客户的请求是非常多的,用户的每一次点击,几乎都对应了一此客户请求,我们可能会编写很多个servlet来处理这些不同的请求。但是很快就会发现,这些servlet所做的事情,有很多都是一样的,比如:权限控制,取客户端数据,页面转发...,另外还有很多类似的操作,比如分页查询,基本的增删改等等...,每次都写似曾相识的代码,这种感觉很不好,所以应该考虑extract出一个super class,让这个super class来做这些重复的工作,于是,我们就有了一个super servlet,新增加的每个servlet都继承它,虽然我们的servlet数量并未减少,而且仍然需要为不断增加的servlet修改web app的配置文件,但工作显然要轻松多了。

但是事情还没完,因为客户端请求非常的多,我们不可能为每个请求写一个servlet,所以一个servlet处理多个请求变得不可避免,我们会发现,在servletdopost方法中,会出现一个庞大的条件判断代码,我们分析客户端请求,并调用不同的代码来处理它,大家都知道,冗长的方法,还有许许多多的if,或者是很多个caseswitch都是程序员的噩梦,或许你可以说dopost方法可以分解成许多个小方法,是的,你可以这样做,但是同时你还需要做的是在这些小方法之间传递许许多多的参数,不光是requestresponse,你不能把它们作为实例变量来避免方法间的参数传递,因为服务器端会生成一个servlet的新线程来处理一新请求, 我们都知道,线程之间是共享实例变量的,当你的实例变量在请求之间共享时,一些让人摸不着头脑的错误便出现了。

以上叙述了web开发的关于servlet的种种不爽的事情,但servlet其实是无辜的,它设计成这样必有它的道理,而我们要做的是,把它重新包装一下,让它能更好的适合我们的web 应用开发,其实,我们要做的并不多,下面让actionhandler来解决这些问题。

 

actionhandler的结构

actionhandler的主要组成部分如下:

 

        通吃servlet   generalhandlesvt.java

 

这个servlet负责处理系统中一切请求,所以它叫统吃servlet,这样做一个附加的好处是我们的web application 配置文件永远都不需要改了,因为永远都不会有新的servlet加入了。

generalhandlersvt所做的事情非常简单:检查客户端传来的 reqtype参数(这个 reqtypeactionhandler里面的保留字,当然你也可以用其它的来代替它,不过一定要在系统开始开发之前确定), reqtype的值在客户端定义,格式是 aa.bb.cc.dd或者是 bb.cc.dd” ,其中cc 表示的是将处理这个请求的类,dd表示具体是cc类的哪个方法来处理请求,bb表示类的包名,aa表示bb外的包名(如果还有的话)   解析完 reqtype后,把请求分发给指定类的指定方法。

 

类似gui编程,每一个请求都被模拟成一个事件,reqtype 指明这个事件的接收器对象cc,以及处理这个时间的方法 dd .

 

也就是说,我们再不用理会那些dopost方法了(甚至不用理会 requestresponse对象)

 

        action处理父类对象 actionhandler.java

 

所有客户请求处理类的父类,

这是一个抽象类

每个actionhandler都隶属于一个模块(参见权限系统)

由于对于每个客户请求,generalhandlesvt都会生成一个新的actionhandler对象来处理,所以actionhandler的实例变量是安全的.

当一个新的actionhandler生成之后,它会调用run方法,

 

run方法首先从session中取出调用者_employee,判断这个调用者是否具有访问这个模块的权限(参见权限系统)

生成一个jdo对象(参见jdo手册),以备客户调用

 

从客户端取出数据,组装成bizobject对象(参见jdo手册),放在参数表里面,以备客户调用

 

根据客户的请求调用相应的方法 进行进一步处理

 

以上各步骤如果出错的话,相应的错误处理机制将对其进行处理,根据exception的类型(可控错误、可控提示、不可控异常),分别转到相应的处理页面,另外对jdo对象进行回滚(如果已经开始事务处理的话)

 

如果没有错误,jdo对象提交事务,关闭数据库连接,转页控制机制将转到相应的页面,并设置相应得页面提示信息

 

actionhandler还内置了许多工具方法:

 

可以取得当前使用者

判断当前使用者对某个功能是否有权限

设置分页size

设置排序字段

分页显示对某个数据对象的查询结果

显示某个bizobject数据对象

根据特定的sql分页列表显示

从参数表中取得某个bizobject

...

 

还有很多就不再一一赘述,具体参看api

其中许多功能如分页显示查询结果,需与客户端显示页面配合使用,客户端用jstl即可方便简洁地显示数据

 

子类继承actionhandler后,只需编写特定的请求处理方法,详情可见下面的示例

 


第二章


第二章 actionhandler