background image

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