`
zhongzhihua
  • 浏览: 312428 次
  • 来自: ...
社区版块
存档分类
最新评论

Struts2变动和零配置说明

阅读更多

MVC框架最主要的两个功能是页面对象参数与Action Model的转换页面流转控制 ,我们考察框架时也多从这两点入手。

   Struts2模式上的变动:
   一、Action 从singleton bean 改为了per request的prototype bean。之前Struts1为了线程安全,action里面没有任何成员变量,在一个处理函数里输入输出都靠request,response参数搞定。
   二、将很多处理透明的分解到了Interceptor Chain中,

   因此,Struts2中Action在MVC里的位置,从Controller转为了Model(有属性、有行为且不依赖Request/Response的POJO),而Controller的角色则由Struts2亲自担当。

   Struts2实际上的简化:

   1.输入输出:

  • FormBean与Action合一,直接读写成员变量,不再需要FormBean或LazyBean,不再需要从request读写数据,每个函数不再需要长长的Request/Response参数。
  • 实用的Prepareable接口和ModelDriven接口,比在在update时先从数据库载入拥有10个属性的对象,然后从页面绑定其中5个属性,整个过程很完美。

2.配置文件:

  • Zero-Config与Code-Bind,基于约定与annotation实现零配置文件。
  • 支持配置的继承与扩展, 可以预设通用的配置。

3.2 零配置文件

    Zero Config能根据web.xml中配置的actionPackages自动扫描所有Action类,并猜测其NameSpace.
    再利用CodeBehind猜测Result指向的jsp,实现了struts.xml的零配置(其实也不是完全没有struts.xml,而是指struts.xml的内容不会随action的增加而膨胀)
    如果有特殊的结果指向(如redirect类型的结果),在Action处用@Result配置。
    如有package级的配置(如使用非默认的Interceptor栈),仍在struts.xml中定义package,用@ParentPackage指定。
    不过,目前ZeroConfig的Annotation较少,只有@Result、@ParentPackage,@NameSpace(java的package名不符合约定规则时使用),还有exception-Mapping之类的配置没有包含。

   1.ZeroConfig

   在Web.xml 中设置ActionPackages ,则 Struts2会自动扫描这些Package下的Class,Class名含Action或扩展子ActionSupport的类都将被载入。

   其中actionPackages的设置很有学问,比如 org.springside.miniweb.web, 则org.springside.miniweb.web.user.RoleAction ,访问路径就会被自动的猜测为 /user/role.action

   如果package名不符合这个规则,就需要自行设定NameSpace了,可以用Namespace annotation。又或者用ParentPackage annotation指定package,再在struts.xml中定义package的namespace.

<filter>
  <filter-name>struts2</filter-name>
  <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
  <init-param>
   <param-name>actionPackages</param-name>
   <param-value>org.springside.examples.miniweb.web</param-value>
  </init-param>
 </filter>

   在Action类中,用Annotation 对特殊的RELOAD返回值进行了注释,其余的results就交给code-behind去猜了。

@Results({
@Result(name=CRUDActionSupport.RELOAD, value="/role"
, type=ServletActionRedirectResult.class)
})
public
 class RoleAction

2.CodeBehind

指定JSP的默认目录在/WEB-INF/jsp 下,原因就是希望保护jsp不能被直接打开,安全模块只要保护Action的地址即可

<constant name="struts.codebehind.pathPrefix"
 value="/WEB-INF/jsp/"
 />

1. 可以用 /user/login.action的URL 打开 /WEB-INF/jsp/user/login.jsp ,而LoginAction无需实际编写。
2. 对于UserAction返回return SUCCESS,默认访问/WEB-INF/jsp/user/user.jsp 或 user-success.jsp. 返回 "input" ,默认访问/WEB-INF/jsp/user/user-input.jsp

3.3 参数绑定-- ModelDriven, Prepareable

   无论是将Action中的变量渲染页面中,或者从request中将内容回传到Action中变量的过程,统称参数绑定。

   1. 最原始的Struts2会直接赋值Action中的变量。 如hello.action?id=1,会将action中的id属性赋值。
   2. 如果参数较多,而且都属于同一个对象的,可以将所有属性都放入一个对象中,比如hello.action?user.id 会为action中的User对象的id属性赋值。
   3. ModelDriven接口,如果不想写太多"user."前缀,如${user.id},可以实现ModelDriven接口的getModel函数, 返回user对象。则Struts2碰到{id}时,就会尝试调用getModel() 获得user对象再获取其id属性。
   4. Prepareable接口,还有一种情况Hibernate常用的情况,一个对象可能有很多属性(比如有10个属性),但页面上可能只显示5个属性的输 入框。如果按上面的方法,先new一个User类,然后从页面上赋值。保存此对象时就会将不在页面上修改的5个属性清空了。这时就需要两次的 binding,一开始user变量为空,只绑定了action的id属性,然后在prepare()函数中查出有完整10个属性的对象,然后二次绑定时 再将页面的那5个属性复制到user对象中。
      prepare()函数有两种作用,一种专门为了二次binding,一种是作为公共的数据准备函数。但是,一个action内有多个method,不是 每一个method都需要执行prepare,比如list()方法,如果这种method较多,或者会造成冲突时,还有另外一种方式来定义二次 binding函数。比如prepareSave() 函数,就会默认的在执行save()前执行,此时,专门实现prePareMethodName() 方法再调度一个内部的prepare函数,而将prepare()函数留空。

3.4 Theme设定

   虽然没有用多少Struts2的taglib,但Struts2的Theme设计还是不错的,在<s:actionMessage>中,我们就需要更改输出的格式,不以列表形式显示。

   1.在classpath的/template目录中新增自己的theme目录,如/template/mytheme,从struts2的默认simple theme中复制出actionmessage.ftl进行修改。

   2.在jsp中使用新的theme <s:actionmessage theme="mytheme"/>

   如果需要默认都使用新的theme:

   1.在classpath:/template/mytheme 中放置theme.properties,里面放一句parent = xhtml,即所有未重新实现的ftl,都使用xhtml默认的模板。

   2.修改struts.xml,增加<constant name= "struts.ui. theme " value= "mytheme" />

3.5 没有使用的功能

  • 页面显示用的UItaglib基本没有用,关于Dojo的taglib封装更加是废的。
  • 也没有用它的validate功能,直接用JQuery的validate就算,如果需要服务端校验,在服务层完成。
分享到:
评论

相关推荐

    简述STRUTS2_Convention零配置

    STRUTS2 Convention 零配置是Struts2框架中的一种高级特性,旨在简化应用程序的配置,让开发者能够更快地构建MVC应用。从Struts2.1版本开始,推荐使用Convention插件替代Codebehind插件,因为它更加自动化,几乎无需...

    Struts2零配置

    Struts2零配置是Struts2框架的一种简化配置方式,旨在减少XML配置文件的使用,提高开发效率。在传统的Struts2应用中,开发者需要在多个XML文件中配置Action、结果页面、拦截器等,而“零配置”则是对这种繁琐配置的...

    struts2 零配置

    "Struts2 零配置"是Struts2的一种特性,允许开发者在不编写大量XML配置文件的情况下,快速搭建和运行应用程序。这主要得益于Struts2的插件机制和注解支持。 首先,Struts2的零配置主要依赖于以下两个核心概念: 1....

    STRUTS2:零配置插件CodeBehind

    ### STRUTS2:零配置插件CodeBehind详解 #### 一、概述 Struts2框架作为Java Web开发中的一款重要工具,在简化Web应用程序开发方面提供了丰富的功能与灵活性。随着框架的发展,Struts2社区不断推出新的插件和技术...

    struts2所有包和配置文件

    这个压缩包“struts2所有包和配置文件”包含了Struts2框架运行所需的核心组件和配置文件。 首先,让我们详细了解一下`web.xml`。这是每个Java Web应用的标准部署描述符,用于配置应用程序的基本设置,比如Servlet、...

    struts2零配置

    Struts2是一款强大的Java web应用程序框架,它极大地简化了MVC(模型-视图-控制器)架构的应用开发。"Struts2零配置"是Struts2...通过巧妙地利用注解和默认配置,Struts2零配置为Java web应用开发带来了极大的便利。

    Struts2零配置+FreeMarker用户管理系统(UMS)

    这个名为"Struts2零配置+FreeMarker用户管理系统(UMS)"的项目,旨在通过注解的方式展示如何在不编写XML配置文件的情况下,利用Struts2和FreeMarker创建一个用户管理系统。 首先,我们来了解一下Struts2框架。Struts...

    struts2 Https 配置

    Struts2是一个非常流行的Java Web框架,用于构建和维护可扩展、模块化且易于管理的企业级应用程序。在当今网络安全日益重要的环境下,使用HTTPS协议来确保数据传输的安全性变得至关重要。Struts2支持HTTPS配置,可以...

    struts2初始使用环境配置

    在开始使用Struts2之前,我们需要先进行环境配置。以下将详细介绍Struts2的初始使用环境配置步骤。 首先,确保你已经安装了Java Development Kit (JDK)。JDK是开发Java应用的基础,你需要至少JDK 1.6或以上版本来...

    struts2231零配置

    在Struts2的版本2.3.1中,引入了一种称为“零配置”的特性,它极大地简化了应用程序的配置过程,使得开发者可以更快地进行开发而无需编写大量的XML配置文件。 "Struts2231零配置"意味着开发者可以不再需要像以前...

    struts2采用convention-plugin实现零配置

    然而,随着版本的更新,Struts2引入了一个名为Convention Plugin的新特性,旨在简化配置过程,实现所谓的“零配置”开发。 **什么是Struts2 Convention Plugin?** Convention Plugin是Struts2的一个插件,它基于...

    struts2的属性配置

    以下是关于Struts2属性配置的详细说明: 1. **struts.xml配置**: Struts2的核心配置文件是`struts.xml`,通常位于类路径(classes根目录下)。这个文件包含了Action配置、拦截器堆栈、常量定义等关键信息。例如,...

    struts2 使用注解现在零配置不需要在使用struts.xml配置文件,可以直接跑

    在Struts2中,注解的引入使得开发者可以摆脱繁琐的`struts.xml`配置文件,实现“零配置”运行。 首先,让我们了解什么是注解(Annotation)。注解是Java提供的一种元数据机制,允许在源代码中嵌入信息,这些信息...

    Struts2 与Freemarker 的配置方法

    以下是关于Struts2与Freemarker配置的详细步骤和相关知识点: 1. **Freemarker简介**: - Freemarker 是一个基于模板的语言,主要用于生成HTML或其他格式的文本输出。它的核心是模板文件,开发者可以使用...

    Struts2包和配置文件

    在你提供的压缩包中,可能包含了Struts2框架的所有核心组件、依赖库和必要的配置文件,这些都是构建基于Struts2的应用所必需的。 首先,我们来看一下Struts2的核心组件: 1. **Action类**:这是业务逻辑的载体,...

    STRUTS2 Convention零配置

    ### STRUTS2 Convention零配置概述 Struts2框架自2.1版本开始引入了一种新的零配置方式——Convention插件。与之前的Codebehind插件不同,Convention插件更加彻底地摆脱了对配置文件的需求,包括struts.xml以及...

    Struts2源码和标签使用和配置

    在“Struts2源码和标签使用和配置”这个主题中,我们将深入探讨以下几个关键知识点: 1. **Struts2框架基础**:Struts2的核心是Action类,它是业务逻辑的载体。通过配置Action,我们可以指定HTTP请求与哪个方法进行...

Global site tag (gtag.js) - Google Analytics