网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.Apache目录服务器中存储Java对象.
.探索J2ME:对记录进行排序.
.从XML到Java代码的数据绑定之一.
.JAVA入门教程:第四章.
.Java集合的缺点:类型未知.
.在Java applet中如何实现一个模式.
.网友杂谈各种app Server.
.Java网络编程之URI、URL研究专题.
.Eclipse快速上手指南(1).
.Notifier类实现Event/Listener更.
.Java认证宝典v1.0之SCJD篇.
.用软引用阻止内存泄漏.
.诺基亚亲密接触Eclipse 深化开源.
.Spring 中文开发手册.
.编程应用实例:Java通过JNI与Del.
.用SQLJ开发数据库(2).
.检查Comparator接口的契约义务.
.一起来学Java吧.
.reverse 方法.
.轻量级的代码生成方案选择.

Struts框架之构建Controller组件

发表日期:2008-1-5



  一、概述

  在Struts 架构中,Controller主要是ActionServlet,但是对于业务逻辑的操作则主要由Action、ActionMapping、ActionForward这几个组件协调完成。其中,Action扮演了真正的业务逻辑的实现者,而ActionMapping和ActionForward则指定了不同业务逻辑或流程的运行方向。

  应用程序的 Controller 部分集中于从客户端接收请求(典型情况下是一个运行浏览器的用户),决定执行什么商业逻辑功能,然后将产生下一步用户界面的责任委派给一个适当的View组件。在Struts中,controller的基本组件是一个 ActionServlet 类的servlet。这个servlet通过定义一组映射(由Java接口 ActionMapping 描述)来配置。每个映射定义一个与所请求的URI相匹配的路径和一个 Action 类(一个实现 Action 接口的类)完整的类名,这个类负责执行预期的商业逻辑,然后将控制分派给适当的View组件来创建响应。

  Struts也支持使用包含有运行框架所必需的标准属性之外的附加属性的 ActionMapping 类的能力。这答应我们保存特定于我们的应用程序的附加信息,同时仍可利用框架其余的特性。另外,Struts答应我们定义控制将重定向到的逻辑名,这样一个行为方法可以请求"主菜单"页面,而不需要知道相应的jsp页面的实际名字是什么。这个功能极大地帮助我们分离控制逻辑(下一步做什么)和显示逻辑(相应的页面的名称是什么)。下图1是Struts的controller组件示意图:

Struts框架之构建Controller组件(图一)
  二、创建Controller组件

  Struts包括一个实现映射一个请求URI到一个行为类的主要功能的servlet。因此我们的与Controller有关的主要责任是:

  为每一个可能接收的逻辑请求写一个 Action 类(也就是,一个 Action 接口的实现);写一个定义类名和与每个可能的映射相关的其它信息的 ActionMapping 类(也就是,一个 ActionMapping 接口的实现);写行为映射配置文件(用XML)用来配置controller servlet。

  为应用程序更新web应用程序展开描述符文件(用XML)用来包括必需的Struts组件,我们给应用程序添加适当的Struts组件。

  1、Action 实现

  Action 接口定义一个单一的必须由一个 Action 类实现的方法,就象下面这样:

public ActionForward perform(ActionServlet servlet,
ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException;
  一个 Action 类的目标是处理这个请求,然后返回一个标识JSP页面的 ActionForward 对象,控制应该重定向这个JSP页面以生成相应的响应。Struts 架构为应用系统中的每一个Action类只创建一个实例。因为所有的用户都使用这一个实例,所以你必须确定你的Action 类运行在一个多线程的环境中。下图2显示了一个execute()方法如何被访问:

Struts框架之构建Controller组件(图二)
图2 Action实例的execute()方法

  注重,客户自己继续的Action子类,必须重写execute()方法,因为Action类在默认情况下是返回null的。

  在 Model 2 设计模式中,一个典型的 Action 类将在它的 perform() 方法中实现下面的逻辑:

  验证用户session的当前状态(例如,检查用户已经成功地注册)。假如 Action 类发现没有注册存在,请求应该重定向到显示用户名和口令用于注册的JSP页面。应该这样做是因为用户可能试图从"中间"(也就是,从一个书签)进入我们的应用程序,或者因为session已经超时并且servlet容器创建了一个新的session。假如验证还没有发生(由于使用一个实现 ValidatingActionForm 接口的form bean),验证这个 form bean 的属性是必须的。假如发现一个问题,当作一个请求属性保存合适的出错信息要害字,然后将控制重定向回输入表单这样错误可以被纠正。

  执行要求的处理来处理这个请求(例如在数据库里保存一行)。这可以用嵌入 Action 类本身的代码来完成,但是通常应该调用一个商业逻辑bean的一个合适的方法来执行。更新将用来创建下一个用户界面页面的服务器端对象(典型情况下是request范围或session范围beans,定义我们需要在多长时间内保持这些项目可获得)。返回一个标识生成响应的JSP页面的适当的 ActionForward 对象,基于新近更新的beans。典型情况下,我们将通过接收到的 ActionMapping 对象(假如我们使用一个局部于与这个映射上的逻辑名)或者在controller servlet 本身(假如我们使用一个全局于应用程序的逻辑名)上调用 findForward() 得到一个对这样一个对象的引用。

  当为 Action 类编程时要记住的设计要点包括以下这些:

  controller servlet仅仅创建一个我们的 Action 类的实例,用于所有的请求。这样我们需要编写我们的 Action 类使其能够在一个多线程环境中正确运行,就象我们必须安全地编写一个servlet的 service() 方法一样。

  帮助线程安全编程的最重要的原则就是在我们的 Action 类中仅仅使用局部变量而不是实例变量。局部变量创建于一个分配给每个请求线程的栈中,所以没有必要担心会共享它们。

  尽管不应该,代表我们的系统中Model部分的的beans仍有可能抛出违例。我们应该在我们的 perform() 方法的逻辑中捕捉所有这样的违例,并且通过执行以下语句将它们记录在应用程序的日志文件中(包括相应的栈跟踪信息):


上一篇:表现层框架Struts/Tapestry/JSF架构比较 人气:600
下一篇:Java新手入门的30个基本概念 人气:664
浏览全部Java的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐