在JSP-Servlet研发中导入事件驱动技术
发布时间:2023-05-19 15:15:22 所属栏目:教程 来源:
导读:jsp-servlet为web应用程序开发者提供了一个优秀的平台。但是,现在国内大多数的基于jsp-servlet的开发都处在最基础的状态,代码重用率低,开发效率低,无法适应大型、复杂的要求。
首先,要实现事件驱动,必须在
首先,要实现事件驱动,必须在
jsp-servlet为web应用程序开发者提供了一个优秀的平台。但是,现在国内大多数的基于jsp-servlet的开发都处在最基础的状态,代码重用率低,开发效率低,无法适应大型、复杂的要求。 首先,要实现事件驱动,必须在jsp-servlet开发中采用mvc技术。 m=model(模型) v=view(视图) c=control(控制) 视图(v)定义了用户界面。模型(m)定义了抽象类和逻辑。控制(c)则负责根据视图发生的事件调用模型的逻辑完成业务处理。 一般 model(模型)由普通的java类来实现。 view(视图)由jsp来实现。 control(控制)由servlet来实现。 视图和模型是紧密关联,又相互独立的。 模型是视图的抽象,必须包含一定的逻辑来处理视图所表现的对象的事件。 同时对于相同的逻辑,视图可以以各种方式表现。 例如,在中, [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传递给相应的方法,处理完成后指定相应的画面并发回客户端。 (编辑:聊城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐