快精灵印艺坊 您身边的文印专家
广州名片 深圳名片 会员卡 贵宾卡 印刷 设计教程
产品展示 在线订购 会员中心 产品模板 设计指南 在线编辑
 首页 名片设计   CorelDRAW   Illustrator   AuotoCAD   Painter   其他软件   Photoshop   Fireworks   Flash  

 » 彩色名片
 » PVC卡
 » 彩色磁性卡
 » 彩页/画册
 » 个性印务
 » 彩色不干胶
 » 明信片
   » 明信片
   » 彩色书签
   » 门挂
 » 其他产品与服务
   » 创业锦囊
   » 办公用品
     » 信封、信纸
     » 便签纸、斜面纸砖
     » 无碳复印纸
   » 海报
   » 大篇幅印刷
     » KT板
     » 海报
     » 横幅

在JSP-SERVLET开发中导入事件驱动技术

JSP-SERVLET为WEB应用程序开发者提供了一个优秀的平台。但是,现在海内大多数的基于JSP-SERVLET的开发都处在最基础的状态,代码重用率低,开发效率低,无法适应大型、复杂的WEB开发要求。
事件驱动是处理复杂事物的优秀技术。
本文仅从在JSP-SERVLET开发中,导入事件驱动技术角度向大家提供参考。
希望能够对大家有一点帮助。

首先,要实现事件驱动,必须在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传递给相应的方式,处理完成后指定相应的画面并发回客户端。
返回类别: 教程
上一教程: JDBC3.0研究报告(节选)
下一教程: JSP构架--2种方法

您可以阅读与"在JSP-SERVLET开发中导入事件驱动技术"相关的教程:
· 一个开发人员眼中的JSP技术(上)
· 三种Web开发主流技术的评价之JSP
· JSP高级技术如何开发动态网站(附完整网上商店)
· 在JSP开发中使用JDOM解析临时存放数据的XML文件
· 一个开发人员眼中的JSP技术
    微笑服务 优质保证 索取样品