`
Dragon^_^buckjump
  • 浏览: 3690 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

struts2总结

阅读更多
一.struts2与struts1对比?
    1.Struts1使用抽象类编程;而Struts2中可以是一个普通的POJO。也可实现接口,使可选和定制的服务成为可能。
    2.线程模式:
    Struts1 Action是单例模式并且必须是线程安全的;Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题.
    3.Servlet 依赖:
    Struts1 Action 依赖于Servlet API,因为Action中的execute方法参数包含了HttpServletRequest 和 HttpServletResponse,这使得程序不易于测试;Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试,有利于测试,并且实现TDD。Struts2 Action仍然可以访问初始的request和response。
    4.捕获输入:
    Struts1 强制使用ActionForm对象捕获输入,ActionFrom必须继承一个基类;Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求
    5.表达式语言:
    Struts1 整合了JSTL,因此使用JSTL EL表达式语言。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱;Struts2默认使用更强大和灵活的表达式语言OGNL("Object Graph Notation Language"),同时也支持JSTL,但是也支持一个.
    6.绑定值到页面(view):
    Struts 1使用标准JSP机制把对象绑定到页面中来访问。
    Struts 2使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
    ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)
    7.类型转换:
    Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的;Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
    8.校验:
    Struts 1支持在ActionForm的validate方法中手动校验。同一个类可以有不同的校验内容,但不能校验子对象;Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性
    9.Action执行的控制:
    Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期;Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
二.struts2的流程
    1)客户端发送请求
    2)请求经过一系列过滤器ActionContextCleanUp-->SiteMesh(自定义)-->FilterDispatcher
    3)FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action
    4)如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,
    5)ActionProxy通过Configuration Manager询问Struts配置文件(Struts.xml),找到需要调用的Action类。
    6)ActionProxy创建一个ActionInvocation的实例
    7)ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
   Action执行完毕,ActionInvocation创建Result并返回,可以使用拦截监听器result结果进行监听

三.Action 跟 Actionsupport 的区别
    ①Actionsupport类实现了action等很多的实用接口
    ②Actionsupport还定义了一个validate()方法
    ③ActionSupport提供了一系列默认方法。包括处理国际化信息、用户请求等方法,简化了Action的开发

四.Struts2 action中如何访问Servlet API
    从方式上来说:
1非IoC方式
1)直接通过ActionContext静态方法getContext()获取Action上下文对象,在获取得到对象Map集合,
2)直接通过ServletActionContext中的静态方法获取对象
2IoC方式
1)实现相关接口SessionAware, ServletRequestAware, ServletResponseAware重写setServletRequest、setSession、setServletResponse。获取是包含对象的Map集合
2)实现servletRequestAware重写setServletRequest,获取request,通过request获取其他对象

五.在JSP中如何输出Action的属性值
通过ActionContetext栈获取Action上下文,通过#号从actionContext栈中取值

六.Struts2程序国际化步骤
国际化分为:
action范围:只作用与当前Action,在Action所在的目录下建立 类名_国别码.properties
package范围:作用于当前整个包的Action。在当前包中建立 package_国别码.properties
全局范围:作用与整个系统中的Action。在src下建立ApplicationResource.properties
优先级:action范围---包范围国际化信息--->全局国际化信息
    步骤:
①在struts.xml中配置,引用资源文件。类、包范围不用引用
②建立想对应的资源文件
③在页面通过struts标签引用,表单控件属性name与资源key相等时自动引用,也可以通过属性key引用
    全局国际化的实现过程:
        Struts2的I18nInterceptor拦截器会拦截所有的Action,检测客户端请求是否存在名为request_locale的参数,若无,默认会用request的getLocale()方法得到默认locale;若有,则将参赛值转化为locale保存在WW_TRANS_I18N_LOCALE所命名的session中。通过这种方式实现一个选择页面所显示的语言环境的功能。
        页面通过<S:text>标签输出国际化信息,可以通过<s:param>标签传入参数

七.类型转换
    1 内建类型转换器
常规类型的转换
利用ognl的内建支持,直接把页面属性转换成action中的bean属性,页面控件名必须为actionName.属性名
利用ognl的内建支持,直接把页面属性转换成action中的集合属性,不需要转换器
    2 自定义
从实现的角度而言有基于ognl的转换和基于strut2转换
      ognl的转换   extends DefaultTypeConverter 重写convertValue方法
      基于struts2的转换  extends StrutsTypeConverter  编写convertFromString与convertToString方法
从范围来讲 有局部转换器和全局转换器:局部类型转换器只在本action内有效,全局类型转换器在所有action内有效
              如果是配置局部类型转换器,则在与Action类同包目录下建立Action类名-conversion.properties文件,里面配置。
    action中的bean属性名=包名.转换器类名
              如果是配置全局类型转换器,则在src目录下建立xwork-conversion.properties,里面配置
                包名.被转换的类名(action中的bean属性类名)=包名.转换器类名
     

七.Struts2数据检验流程
客户端提交form表单---->服务端对请求的表单数据执行类型转换---->类型转换错误,将错误信息保存到ActionContext中,在通过conversionError()负责将其转换成fieldError。不报错进行向下执行 ----> 执行validateXxx():针对指定方法进行编程验证 ----->  在执行validator()验证方法 -----> 判断是否包含fieldError,是则跳过Action的逻辑处理,直接返回input页面。否则调用Action的处理方法 ---->最终将返回数据呈现视图资源

     校验框架:
     每个Action类有一个校验文件,命名 Action类名-validation.xml,且与Action类同目录,当校验文件的取名为ActionClassName-validation.xml时,会对 action中的所有处理方法实施输入验证
     如果你只需要对action中的某个action方法实施校验,那么,校验文件的取名应为:ActionClassName-ActionName-validation.xml

     客户端校验:将<S:form>表单的的validate属性设置为true

     字段校验:校验谁,用什么方法
     非字段校验:用什么校验,校验谁

八.ognl 以及标签语法
     ognl是一种表达式语言。
     用途:①value stack值栈: ognl上下文 ,存放action的属性
           ②actionContext栈: action上下文,存放request、session、application等     Struts 2默认是ognl语言,支持以下几种表达式语言:OGNL、JSTL、Groovy、Velocity,其语言优点:
           1. 支持对象方法调用,如xxx.doSomeSpecial();
   2. 支持类静态的方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名 |  值名],例如:@java.lang.String@format('foo %s', 'bar')或@tutorial.MyConstant@APP_NAME
   3. 支持赋值操作和表达式串联,如price=100, discount=0.8, calculatePrice(),这个表达式会返回80;
           4. 访问OGNL上下文(OGNL context)和ActionContext;
   5. 操作集合对象。

    ognl的三个符号 # % $
        #:
        ①用于访问ActionContext栈中的Action上下文,相当于ActionContext.getContext()
        ②用于过滤和投影集合
        ③用于构建Map集合
        %:计算表达式   类似于js中的eval函数
           在标志的属性为字符串类型时,计算ognl的表达式的值
        $:①用于国际化资源文件中,引用OGNL表达式
           ②在struts2配置文件中,引用OGNL表达式


九.struts2的4个主题
simple:最底层的结构,主要用于构建有一个的静态变量。附加的功能或行为
xhtml:struts2的默认主题,是对simple主题的包装和扩展。在simple的基础上增加了如下功能
     ①针对HTML标签(如textfield和select标签)使用标准的两列表格布局
     ②每个HTML标签的Label,可以通过labelposition属性的设置label标签在html元素出现的位置
     ③自动输出校验错误信息
     ④输出js的客户端校验
css-xhtml:是对xhtml主题的扩展,加入了css样式控制
ajax:是对xhtml主题的扩展,加入了额外的ajax支持。ajax支持是以dojo和dwr为基础的。在xhtml的基础上增加了如下功能
1支持Ajax方式的客户端校验。
2支持远程表单的异步提交(最好和submit标签一起使用)。
3提供高级的div标签,允许实现局部更新部分HTML的功能。
4提供高级的a标签,允许动态加载并执行远端的javaScript代码。
5提供支持ajax的tabbedPanel。

十.拦截器:拦截器是AOP中的一种实现策略,用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操
分享到:
评论

相关推荐

    struts2 总结工程大全

    struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全struts2 总结工程大全...

    struts2总结大全

    servlet模板,JavaDoc视图的使用,局部类型转换器步骤 ,全局类型转换器 ---对所有的Action类有效,模型驱动,数据校验,struts2校验介绍,校验分类,包的总结,开发的核心类库

    Struts2轻松入门,Struts2总结

    Struts2轻松入门 Struts2总结 Struts2和Struts1.x对比学习

    struts2总结项目总结

    一些struts2的笔记、项目总结,挺实用

    java struts2 总结

    java struts2 总结 ,对struts2开发有详细的描述,包括过程,以及标签的应用,注意事项

    struts2 总结入门学习文档 教你如何搭建一个struts2环境

    struts2 总结入门学习文档 教你如何白手起家搭建Struts2开发环境、编写第一个struts2应用helloworld、属性介绍、接口、拦截器介绍、struts2标签等。93页

    struts2总结第一章

    Struts2第一章 一、 介绍: a) Struts2是以web work优秀的设计思想为核心,吸收了struts1的部分优点,建立了一个基于webwork和struts1的MVC框架。 二、 优点: a) 结构清晰,使开发者只关注业务逻辑实现即可。 b) ...

    jsp到struts2总结.docx

    jsp到struts2总结.docx

    struts2总结第二章

    Struts2总结第二章 一、 局部类型转换: a) 写Date类型转换类 b) 在要进行Date类型转换的类的同一包下,新建一个properties文件 i. 名称为Date类型的数据所在的类的名称-conversion.properties ii. 内容为 name:该...

    struts2学习笔记总结

    struts2学习笔记总结

    我的struts2的总结

    希望大家都在一起学习我是一个很唉学习的人希望你们也一样 不要太过劳累

    struts2总结1

    Struts2,servlet模板,反射、xml解析、过滤器,IoC方式

    Velocity语法以及整合struts2总结

    文档详细描述了Velocity整合struts2步骤,以及velocity的语法规范

    Struts2总结-2

    总结了ognl , 值栈,向值栈中放数据获取数据,拦截器,国际化资源的使用,校验器

    java高级+struts2总结

    IO流高级 设计模式 多线程 网络编程 struts2 注解 反射 MVC+Log4 资源文件 泛型 观察者模式 装饰模式

Global site tag (gtag.js) - Google Analytics