`

深入Struts1.1(中)

阅读更多

ActionServlet

我们首先来了解MVC中的控制器。在Struts 1.1中缺省采用ActionServlet类来充当控制器。当然如果ActionServlet不能满足你的需求,你也可以通过继承它来实现自己的类。这可以在/WEB-INF/web.xml中来具体指定。

要掌握ActionServlet,就必须了解它所扮演的角色。首先,ActionServlet表示MVC结构中的控制器部分,它需要完成控制器所需的前端控制及转发请求等职责。其次,ActionServlet被实现为一个专门处理HTTP请求的Servlet,它同时具有servlet的特点。在Struts 1.1中它主要完成以下功能:

  • 接收客户端请求
  • 根据客户端的URI将请求映射到一个相应的Action类
  • 从请求中获取数据填充Form Bean(如果需要)
  • 调用Action类的execute()方法获取数据或者执行业务逻辑
  • 选择正确的视图响应客户

 

此外,ActionServlet还负责初始化和清除应用配置信息的任务。ActionServlet的初始化工作在init方法中完成,它可以分为两个部分:初始化ActionServlet自身的一些信息以及每个模块的配置信息。前者主要通过initInternal、initOther和initServlet三个方法来完成。

我们可以在/WEB-INF/web.xml中指定具体的控制器以及初始参数,由于版本的变化以及Struts 1.1中模块概念的引进,一些初始参数被废弃或者移入到/WEB-INF/struts-config.xml中定义。下面列出所有被废弃的参数,相应地在web.xml文件中也不鼓励再使用。

  • application
  • bufferSize
  • content
  • debug
  • factory
  • formBean
  • forward
  • locale
  • mapping
  • maxFileSize
  • multipartClass
  • nocache
  • null
  • tempDir

ActionServlet根据不同的模块来初始化ModuleConfig类,并在其中以XXXconfig集合的方式保存该模块的各种配置信息,比如ActionConfig,FormBeanConfig等。

初始化工作完成之后,ActionServlet准备接收客户请求。针对每个请求,方法process(HttpServletRequest request, HttpServletResponse response)将被调用。该方法指定具体的模块,然后调用该模块的RequestProcessor的process方法。

protected void process(HttpServletRequest request, 
  HttpServletResponse response) 
  throws IOException, ServletException {

 RequestUtils.selectModule(request, getServletContext());        
 getRequestProcessor(getModuleConfig(request)).process(request, response);
}

RequestProcessor包含了Struts控制器的所有处理逻辑,它调用不同的processXXX方法来完成不同的处理。下表列出其中几个主要的方法:

 

方法 功能
processPath 获取客户端的请求路径
processMapping 利用路径来获得相应的ActionMapping
processActionForm 初始化ActionForm(如果需要)并存入正确的scope中
processActionCreate 初始化Action
processActionPerform 调用Action的execute方法
processForwardConfig 处理Action返回的ActionForward

ActionForm

对于ActionForm你可以从以下几个方面来理解它:

  1. ActionForm表示HTTP窗体中的数据,可以将其看作是模型和视图的中介,它负责保存视图中的数据供模型或者视图使用。Struts 1.1文档中把它比作HTTP和Action之间的防火墙,这体现了ActionForm具有的过滤保护的作用,只有通过ActionForm验证的数据才能够发送到Action处理。
  2. ActionForm是与一个或多个ActionConfig关联的JavaBean,在相应的action的execute方法被调用之前,ActionForm会自动利用请求参数来填充自己(初始化属性)。
  3. ActionForm是一个抽象类,你必须通过继承来实现自己的类。

 

ActionForm首先利用属性的getter和setter方法来实现初始化,初始化完毕后,ActionForm的validate方法被调用,你可以在其中来检查请求参数的正确性和有效性,并且可以将错误信息以ActionErrors的形式返回到输入窗体。否则,ActionForm将被作为参数传给action的execute方法以供使用。

ActionForm bean的生命周期可以设置为session(缺省)和request,当设置为session时,记得在reset方法中将所有的属性重新设置为初始值。

由于ActionForm对应于HTTP窗体,所以随着页面的增多,你的ActionForm将会急速增加。而且可能同一类型页面字段将会在不同的ActionForm中出现,并且在每个ActionForm中都存在相同的验证代码。为了解决这个问题,你可以为整个应用实现一个ActionForm或者至少一个模块对应于一个ActionForm。

但是,聚合的代价就是复用性很差,而且难维护。针对这个问题,在Struts 1.1中提出了DynaActionForm的概念。

DynaActionForm类

DynaActionForm的目的就是减少ActionForm的数目,利用它你不必创建一个个具体的ActionForm类,而是在配置文件中配置出所需的虚拟ActionForm。例如,在下表中通过指定<form-bean>的type为"org.apache.struts.action.DynaActionForm"来创建一个动态的ActionForm--loginForm。

<form-beans>
 <form-bean name="loginForm" type="org.apache.struts.action.DynaActionForm">  
  <form-property name="actionClass" type="java.lang.String"/>
  <form-property name="username" type="java.lang.String"/>
  <form-property name="password" type="java.lang.String"/> 
 </form-bean> 
</form-beans>

动态的ActionForm的使用方法跟普通的ActionForm相同,但是要注意一点。普通的ActionForm对象需要为每个属性提供getter和setter方法,以上面的例子而言,我们需要提供getUsername() 和 setUsername()方法取得和设置username属性,同样地有一对方法用于取得和设置password属性和actionClass属性。

如果使用DynaActionForm,它将属性保存在一个HashMap类对象中,同时提供相应的get(name) 和 set(name)方法,其中参数name是要访问的属性名。例如要访问DynaActionForm中username的值,可以采用类似的代码:

String username = (String)form.get("username");

由于值存放于一个HashMap对象,所以要记得对get()方法返回的Object对象做强制性类型转换。正是由于这点区别,如果你在Action中非常频繁地使用ActionForm对象,建议还是使用普通的ActionForm对象。

分享到:
评论

相关推荐

    struts1.1源代码

    在深入理解 Struts 1.1 源代码之前,我们需要对 MVC 设计模式有所了解。 1. MVC 设计模式: MVC 将应用程序分为三个主要组件:模型(Model)、视图(View)和控制器(Controller)。模型负责处理业务逻辑,视图...

    深入Struts 1.1

    论Struts 1.1框架的关键特性及其...通过深入理解Struts 1.1的组件和工作原理,开发者可以更好地构建可扩展、可维护的大型企业级应用。在实际开发中,正确地使用Struts 1.1的各种特性,能够显著提升开发效率和应用质量。

    Struts 1.1 API.zip

    2. **Action类**:在Struts 1.1中,Action类是处理HTTP请求的核心组件。开发者需要创建自定义的Action类,这些类继承自`org.apache.struts.action.Action`,并重写`execute`方法来执行特定的业务逻辑。 3. **...

    struts1.1_EJB小例子

    这个"struts1.1_EJB小例子"很可能是演示如何在Struts 1.1框架下集成和使用EJB。具体实现可能包括创建一个Action,该Action通过调用EJB来处理业务逻辑,然后返回结果给客户端。通过分析源码,我们可以学习到如何在Web...

    struts1.1+ejb模拟项目

    在Struts1.1中,ActionServlet作为核心控制器,处理HTTP请求,并根据配置的Action Mapping将请求转发到相应的Action。Action类负责业务逻辑,而视图通常由JSP页面呈现。 EJB是Java EE(Java Platform, Enterprise ...

    Struts 1.1 API 英文版

    通过阅读Struts 1.1 API的英文版,开发者能够深入理解框架的工作原理,有效地利用其功能,提高开发效率。尽管现在Struts已经发展到2.x版本,但1.1版的API对于学习MVC框架的基本思想和历史背景仍然具有很高的参考价值...

    struts1.1 api

    在本文中,我们将深入探讨Struts 1.1 API的主要组件、功能以及如何利用它们来构建高效的Web应用程序。 首先,Struts的核心组件包括Action、ActionForm、ActionServlet和配置文件。Action是处理用户请求的业务逻辑...

    jakarta-struts-1.1.zip_jakarta-Struts-1_jakarta-struts 1_jakarta

    在"jakarta-struts-1.1.zip"这个压缩包中,包含了Jakarta Struts 1.1版本的核心组件和相关资源。 `struts-documentation.war`文件是一个预打包的Web应用,通常用于部署到Servlet容器,如Tomcat或Jetty。这个WAR文件...

    struts1.1api

    "重要说明.txt"可能包含了使用Struts 1.1 API时需要注意的事项和最佳实践,而"阅读器及更多E书下载.url"则可能是指向其他相关开发资源的链接,帮助开发者深入学习和理解Struts框架。 了解和掌握这些核心概念,...

    Commons Validator 1.3与Struts 1.1混合使用时的问题处理

    解决这些问题通常需要对Struts和Validator的工作原理有深入理解,以及熟悉XML配置和异常处理。通过仔细阅读官方文档,查阅相关论坛和博客,如给出的链接,可以找到更多解决问题的线索和示例代码。 在实际操作中,...

    ssh helps Struts1.1.chm Hibernate.chm Spring.chm

    Struts1.1版本在当时是非常流行的一个版本,它帮助开发者更好地组织和控制应用程序的流程,使得业务逻辑与展示层分离,提高代码的可维护性和可重用性。这个CHM文件可能会涵盖Struts的核心概念,如ActionForm、Action...

    深入Struts1.1

    本文就将带你走进Struts1.1去深入地了解这些功能。说明:希望本文的读者能有一定的Struts使用基础。Model2Struts是基于Model2之上的,而Model2是经典的MVC(模型-视图-控制器)模型的Web应用变体,这个改变主要是...

    精通Struts1.1

    《精通Struts1.1》是一本专注于Java Web开发领域中的经典著作,主要围绕着Struts 1.1框架展开,旨在帮助读者深入理解和熟练应用这个基于Model-View-Controller(MVC)设计模式的开源框架。Struts是Apache软件基金会...

    Repo1:Struts1.1 检查目的存储库

    在Struts1.1中,ActionServlet进行了优化,提高了性能。 2. **配置文件**:`struts-config.xml`是Struts1.1的主要配置文件,包含了Action、Form Bean、DataSource等定义,用于告诉框架如何处理请求和展示响应。 3....

    struts2.3.1.1

    在Struts2.3.1.1中,开发者可以期待一些特定的改进和新特性,例如性能优化、bug修复以及对Java新版本的支持。 `struts-2.3.1.1-docs.zip` 文件包含的是该版本的官方文档,包括用户指南、API参考、开发者文档等。...

    Struts2.2.1.1源码

    Struts2.2.1.1源码是一个重要的开源框架,它是Apache...总之,Struts2.2.1.1源码是一份宝贵的教育资源,对于Java Web开发者来说,深入研究不仅可以提高技术水平,也有助于在实际项目中更好地运用和优化Struts2框架。

    struts1源代码

    深入学习Struts1的源代码,可以让我们更好地理解MVC模式在实际应用中的实现,了解控制层、模型层和视图层如何协作。同时,也能帮助我们了解Web应用程序的生命周期,以及如何通过配置文件来定制框架的行为。这对于...

    struts1_1api

    通过深入学习和理解Struts 1.1 API,开发者能够有效地构建和管理复杂的Web应用程序,提高开发效率,同时利用框架提供的功能来增强应用的可扩展性和可维护性。查阅CHM文档,可以帮助开发者快速定位并了解每个类、接口...

Global site tag (gtag.js) - Google Analytics