<%@ page contentType="text/html; charset=gb2312"%> 在JSP-Servlet开发中导入事件驱动技术
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
在JSP-Servlet开发中导入事件驱动技术
     发布者: 发布时间:2007-06-28

JSP-SERVLET为WEB应用程序开发者提供了一个优秀的平台。但是,现在国内大多数的基于JSP-SERVLET的开发都处在最基础的状态,代码重用率低,开发效率低,无法适应大型、复杂的WEB开发要求。

首先,要实现事件驱动,必须在JSP-SERVLET开发中采用MVC技术。

M=Model(模型)

V=View(视图)

C=Control(控制)

视图(V)定义了用户界面。模型(M)定义了抽象类和逻辑。控制(C)则负责根据视图发生的事件调用模型的逻辑完成业务处理。

一般

Model(模型)由普通的java类来实现。

View(视图)由jsp来实现。

Control(控制)由servlet来实现。

视图和模型是紧密关联,又相互独立的。

模型是视图的抽象,必须包含一定的逻辑来处理视图所表现的对象的事件。

同时对于相同的逻辑,视图可以以各种方式表现。

例如,在web开发中,

[1] 对于一个代表“单选”抽象的SingleSelection类,在用户的浏览器上可以显示为Radio button, 也可以是单选下拉框,或者是其他任何的单选性质的控件。

[2] 对于一个代表“提交”抽象的Submition类,在用户的浏览器上可以显示为Submit button, 也可以是超链接、图片,甚至可以是可触发JavaScript的submit()方法的任何控件。

事件驱动对于MVC技术是极其重要的,主要由Control(控制)来实现。而JSP-SERVLET的实现本身就非常适合于编写事件驱动的程序。

众所周知,javax.servlet.http.HttpServlet类每次都调用

doPost(HttpServletRequest req, HttpServletResponse resp)

或者

doGet(HttpServletRequest req, HttpServletResponse resp)

方法来响应客户端的submit操作。

Servlet响应的事件就是客户端浏览器的submit操作。客户端浏览器的submit事件触发Servlet的特定事件处理方法,但是入口只有一个:javax.servlet.http.HttpServlet类的service(HttpServletRequest req, HttpServletResponse resp)方法。(具体到对于客户端的操作的响应,则可能是doPost(HttpServletRequest req, HttpServletResponse resp)或者是doGet(HttpServletRequest req, HttpServletResponse resp)方法。

所以可以重写这些方法来控制Servlet对submit事件的响应处理,调用不同的JSP,JAVA BEAN,甚至于EJB。

例:EventDrivenServlet继承javax.servlet.http.HttpServlet,并且重写doPost(HttpServletRequest req, HttpServletResponse resp)和doGet(HttpServletRequest req, HttpServletResponse resp)方法,令这2个方法都直接调用同一个方法,我们把这个方法命名为“act”??

void act(HttpServletRequest req, HttpServletResponse resp)

act方法应该根据req参数传入的信息,调用相应的类以及方法,最后将resp返回给客户端。

act方法进行的处理必须包括如下几点:

1) 解析req。

2) 根据上一步的解析结果初始化(或者更新)相应的类。

3) 调用相应的方法进行逻辑处理。

4) 将处理结果反映到resp里。

5) 根据逻辑处理结果指定下一个显示的页面

6) forward到下一个页面。

但是,act方法又是怎么知道该调用哪一个类的哪一个方法,该迁移到哪一个画面去的呢?

答案是传递给act方法一个消息??Message。

Message类是消息的抽象,应该定义成abstract的,可以是一个空类。从这个Message类派生出所有的具体的消息类。所有的消息类都必须从Message类继承。

前面讲过,画面上(JSP)的每一个可submit的控件在逻辑上都对应一个Submition,每一个Submition都和一个特定的消息类相关联。这样,只要我们在Control层能够截获这些消息类,并且解析这些消息类携带的信息,并将它们委派给相应的类的方法去处理,就可以实现事件驱动。

例:

画面上有一个“登录”按钮,它对应着一个Submition类,并且产生一个LoginMessage的消息。LoginMessage继承Message,并且加入了一个Hashtable成员变量,携带了用户名和密码的信息。

画面上还一个“变更密码”按钮,它对应着一个ChangePasswordSubmition类,并且产生一个ChangePasswordMessage的消息。ChangePasswordMessage继承Message,并且加入了一个Hashtable成员变量,携带了用户名和密码的信息。

当Servlet响应这个submit时,可以根据传来的消息的类型和携带的信息来委派处理。

具体实现时,我们应该重载EventDrivenServlet的act()方法,加入一个Message类的参数。

void act(HttpServletRequest req, HttpServletResponse resp,Message message)

如果message instanceof LoginMessage为true,那么就将message造型成LoginMessage,并且将LoginMessage传递给相应的方法,处理完成后指定相应的画面并发回客户端。

如果message instanceof ChangePasswordMessage为true, 那么就将message造型成ChangePasswordMessage,并且将ChangePasswordMessage传递给相应的方法,处理完成后指定相应的画面并发回客户端。(责任编辑:龚勋)

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
真正的Java学习从入门到精通
MySQL 一种比较经济的数据库
Java程序异常处理的特殊情况
NetBeans和JBoss 结合使用的入门指南
JVM(Java 虚拟机)的详细讲解
面向对象的逻辑思维方法
 
最近评论:
        
你曾悄悄的来过!
wow gold,wow gold,wow gold,ffxi gil max(5789)
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(6859)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(5943)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(6491)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号