首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 笔记本电脑 | 北大青鸟 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
中国IT实验室Linux频道
中国IT教育
Google
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> J2EE >> Servlet/Jsp >> 正文

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


  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传递给相应的方法,处理完成后指定相应的画面并发回客户端。
【责编:admin】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·Oracle外键及外键约束修改行为
 ·开源软件测试工具学习专题
 ·JSP Web开发 入门基础到高手进阶教程
 ·JavaFX—是Java桌面的新希望么?
 ·安全至上 .NET开发安全策略
 ·测试用例设计之道-测试用例学习专题
 ·面向Java开发人员的Scala指南
 ·Java设计模式之实例详解
 ·Oracle数据库11g 面向DBA和开发人员的重要新特性
 ·桌面应用软件编程 J2SE技术详解
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航