`
zhigang52110
  • 浏览: 11217 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

struts2知识总结(转载)

阅读更多

1. 全局的逻辑控制器为一个过滤器,负责过滤所有的请求。该过滤器引用的API类为
     org.apache.struts2.disapatcher .FilterDispatcher
    
   2. MVC:页面请求(jsp)——>逻辑控制器(Filter)——>业务控制器(Action)——>业务逻辑组件——>业务处理/DAO
  
   3. struts2的配置文件放在classpath下。
  
4. struts2的类型转换
       a. 继承DefaultTypeConverter,
          覆盖父类的public Object convertValue(Map context, Object value, Class toType)方法
       b. 继承StrutsTypeConverter,
          覆盖父类的public Object convertFromString(Map context, String[] values, Class toClass)
          该方法负责转换从页面传递过来的数据。
          覆盖父类的public String convertToString(Map context, Object o)
          该方法负责将Action中处理好的数据转换成相应格式的字符串。
  
   5.struts2的数据验证
       a. 使用编码方式进行验证。业务控制器Action继承ActionSupport类,重写public void validate()方法。
          在该方法中进行数据验证。若Action中处理业务的方法为test,则可以编写public void validateTest()
          方法,来对test方法的数据进行验证。(系统在进行validateTest方法后,会接着执行validate方法,然后
          才执行相应的业务代码。)
          若严重出错,则可以调用addFieldError或者调用addActionError方法,增加相应的错误提示信息。
       b. 使用配置xml文件进行验证。验证文件的名字为:×××Action-validation.xml。验证的方式包含字段验证和非字段验证。
          其中字段验证表示对某个字段进行某些类型的验证。非字段验证表示用某个类型的验证来验证,某个字段。两种方式
          底层实现一样,只是表现方式不同,字段验证方式比较直观。
          验证的类型有一下几种:required,requiredstring,int,date,double,expression,fieldexpression
         email,url,visitor,conversion,stringLength,regex(正则表达式)。
          对验证类型可以指定shourt-circuit参数为true,来执行短路验证。
          如果Action中执行业务的方法为test,则可以通过编写×××Action-test-validation.xml方法来对test方法的数据进行
          验证。且执行完test方法的私有验证文件后,还会执行默认的验证文件×××Action-test-validation.xml的验证。
       c. struts2进行客户端的验证。首先需要使用struts2的标签库,且标签库的theme属性不能为simple,然后设置标签的
         validate属性为true。
          注意:struts2的客户端验证依赖于服务器的验证配置文件。
  
   6.struts2的拦截器。 struts2的拦截器是struts2的核心,其底层实现使用了Java的反射机制与动态代理。在struts2的配置文件中
      为一个Action引入了一个拦截器,则配置的默认拦截器不会被调用,需要手工配置到该Action中。
      实现struts2拦截器的方法:
        a. 实现Interceptor接口,并实现init,destrory以及intercept方法。
        b. 继承AbstractInterceptor类,覆盖intercept方法。
        c. 继承MethodFilterInterceptor类,覆盖intercept方法。该类可以对特定的方法进行拦截。
      拦截器栈可以包含拦截器和拦截器栈。
  
   7.文件的上传和下载
        a. 使用apache组织开发的commons-fileupload和commons-io包,并且按需要配置fileUpload拦截器和相应的上传参数,
            比如上传文件的类型,上传文件的大小。多文件的上传可以使用js代码来在页面修改上传文件的列表,在Action中
            则用三个列表分别来保存文件对象(file),文件名(fileName),以及文件类型(fileContentType)。
        b. 文件下载使用流进行读取:return ServletActionContext.getServletContext.getResourceAsStream("文件名")
            并将Action的结果返回类设定为stream,即流。按需要配置相应的参数。
  
   8.struts2的国际化。 struts2国际化的底层实现用到了Java基础类库中的Locale(地区)和ResourceBundle(消息资源)两个类。
     struts2的国际化主要用在一下几个地方:
        a.jsp页面 :使用struts2的标签时,指定标签的key属性(对应消息资源文件中的key)。
                    使用<s:text name="key">
                       <s:param></s:param>
                    </s:text>
                    标签取得消息资源信息。
                    还可以用<s:i18n name="basename"></s:i18n>标签来指定特定的消息资源文件。
        b.Action中 :调用getText(key)或者getText(key,args)方法取得消息资源文件中的消息资源。
        c.xml验证文件中 :指定message元素的key属性(对应消息资源文件中的key)。(怎么传参数?)
        d.类型转换过程中 :通过查看xwork包的源代码可以找到:ge.properties文件中可以找到如下的键值对:
                   xwork.default.invalid.fieldvalue=Invalid field value for field "{0}".
                   在消息资源文件中重新指定该键值对即可。
       另外在struts.properties中设定键值对struts.i18n.encoding=GBK ,可以解决中文乱码问题。
  
   9.struts2的异常处理 。在Action中,我们的业务逻辑处理方法都对抛出异常进行了声明。具体的异常对应具体的处理结果。
      在action配置中:
       
<action name="upload" class="uploadAction">
          <result name="exception"></result>
          <exception-mapping result="exception" exception="具体的异常类型"></exception-mapping>
      </action>

      还可以配置全局的异常处理:
     
<global-exception-mappings>
          <exception-mapping result="" exception=""></exception-mapping>
      </global-exception-mappings>

      
      
       
  
struts2的其他东西:
    1. 对于struts.xml中的package:
        a. 设置<package abstract="true"> 则表明该包中没有action的配置,只定义一个基础公共的组件。
        b. package的namespace可以将不同的请求路径分隔开 ,在多人合作项目中用到比较多。当接收到一个请求,
            若在当前的namespace中没有相应的请求地址,则会到默认的namespace中去寻找匹配的地址。
   
    2.模型驱动机制(ModelDriven) ,将一个Action中的各个参数封装成为一个JavaBean(类似struts1.x中的
      ActionForm)。需要实现ModelDriven<T>接口,并实现getModel方法。当一个Action实现ModenDriven接口后,
       该Action会被ModenDrivenInterceptor拦截,进行相应的参数设置。
   
   3.防止表单的重复提交 :在jsp的表单中设置<s:token name="***"></s:token>标签。并且在相应的Action
       中设置token拦截器和名为invalid.token的返回结果。相应出错信息的key为struts.message.invalid.token。
       配置该key,来实现国际化。
   
    4.struts2中Action与Servlet容器的耦合 。主要有三种方式:
         a. 实现ServletRequestAware或ServletResponseAware接口。并提供对request或者response熟悉的设置方法。
         b. 使用ActionContext(但不能获得response对象)。改方法方便单元测试。
         c. 使用ServletActionContext。ServletActionContext是ActionContext的子类。
       首选使用ActionContext,其次ServletActionContext。
   
    5.整合多个struts配置文件,在struts2的配置文件中使用include元素包含其他的配置文件 。用于多模块开发。
   
    6.可以在web.xml中对struts2的核心过滤器FilterDispatcher设置初始化参数(不推荐使用)。
   
    7.动态方法调用 (DynamicMethodInvocation).
         a. action配置中指定:<action name="×××" method="">
         b. 在客户端即页面指定:<s:form action="method!actionName">
         c. 使用通配符:<action name="*Login" class="com.action.LoginAction" method="{1}">,
            若Action的url为helloLogin,则调用LoginAction的hello来处理业务。此种方法简化了配置,但是
            使得程序不明了,不提倡使用该方法。
   
    8.struts2的结果类型 。在struts2-core包中,有几种struts2已经配置好的结果类型。
        其中默认的类型为dispatcher,此外还有:redirectAction,chain,freemaker,httpheader,redirect,
        redirectAction,stream,velocity,xslt,plainText。
   
    9.struts2与spring的整合 。导入struts2-spring-plugin包,在web.xml中设置spring的监听器,
       spring监听器对应的API类为:org.springframework.web.context.ContextLoaderListener。
       struts2-spring-plugin包为我们将struts2的对象工厂设置为spring的IoC容器,其代码为:
      
<struts>
      <bean type="com.opensymphony.xwork2.ObjectFactory" name="spring" class="org.apache.struts2.spring.StrutsSpringObjectFactory" />
     
      <!-- Make the Spring object factory the automatic default -->
      <constant name="struts.objectFactory" value="spring" />
  
      <package name="spring-default">
          <interceptors>
              <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>
              <interceptor name="sessionAutowiring" class="org.apache.struts2.spring.interceptor.SessionContextAutowiringInterceptor"/>
          </interceptors>
      </package>   
   </struts>
   很明显,将struts.objectFactory定位为org.apache.struts2.spring.StrutsSpringObjectFactory
   其余的工作就交给spring的IoC容器去做了。
   另外:当我们需要增加spring的配置文件时,需要在web.xml中设定contextConfigLocation 参数。代码如下:
   
<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>其他的spring配置文件名,用逗号隔开</param-value>
    </context-param>
   


   需要注意的一些地方
    1.存储fieldError的是一个LinkedHashMap<String,ArrayList>;而actionError则存储在一个ArrayList中。
      ActionSupport中的getFieldError方法返回的是一个新的集合。该集合是原fieldError集合的一个副本。
       在struts2的源代码中返回的是:new LinkedHashMap(internalGetFieldError),即一个新的集合对象。
       所以执行代码:this.getFieldErrors.put("username","ErrorMsg");不会影响原fieldError集合的数据。
      
    2.若一个Action注册了PreResultListner,则会在该Action返回的时候调用相应结果验证的逻辑代码。
   
    3.struts2-core包中的default.properties和struts-default.xml文件保存了一些struts2默认的配置。
       可以在自己的struts配置文件中对相应的配置进行覆盖或重新设值。比如修改请求的后缀名:在struts.properties
       中加入:
         struts.action.extension = do
       则将struts2请求的后缀名修改成了struts1中的do后缀名的形式。
   
    4.在配置文件中配置struts.multipart.saveDir来设定上传文件时的临时文件的存储位置。需要定期清理该路径下的文件。

分享到:
评论
2 楼 zhigang52110 2010-03-08  
peng3409 写道
很全面,分析的很好,多谢

觉得很不错,就拿来分享一下,希望对大家的学习有帮助!
1 楼 peng3409 2010-03-05  
很全面,分析的很好,多谢

相关推荐

    struts2 总结工程大全

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

    Struts2知识点总结

    以下是对Struts2知识点的详细总结: 1. **Struts2核心组件** - **FilterDispatcher**(或现在的`StrutsPrepareAndExecuteFilter`):这是Struts2的核心过滤器,它负责拦截请求,处理Action映射,并转发到相应的...

    struts知识点总结

    struts知识点总结struts知识点总结,觉得有需要的就拿去看看吧

    struts2学习总结

    struts2学习总结

    struts2知识总结

    Struts2是一个强大的Java EE Web框架,其设计目标是覆盖从开发到发布的全过程,包括维护阶段。该框架结合了Struts1和WebWork的优点,提供了一...学习和掌握Struts2的知识,对于Java EE开发者来说是提升技能的重要一步。

    struts2总结项目总结

    在本项目总结中,我们将深入探讨Struts2的核心特性、工作原理以及如何在实际项目中应用。 一、Struts2框架基础 1. 动态方法调用(Dynamic Method Invocation,DMI):Struts2允许通过URL直接调用Action类的方法,...

    Struts2知识点

    Struts2 知识点 Struts2 是一个基于 Java 语言的开源 Web 应用程序框架,由 Apache 软件基金会维护。Struts2 是 Struts1 的改进版本,提供了更加灵活和强大的功能。下面是 Struts2 的一些重要知识点: 1. Struts2 ...

    我的struts2的总结

    根据提供的文件信息,我们可以整理出关于Struts2框架的一些关键知识点。尽管原文中的信息较为零散且不完整,但还是可以从中提炼出一些有价值的内容。接下来,我们将详细探讨这些知识点。 ### Struts2简介 Struts2...

    struts2知识总结.txt

    根据提供的文件信息,我们可以将Struts2的相关知识点总结如下: ### Struts2框架概述 - **Struts2** 是一个基于MVC模式的开源Web应用框架,它与JSP、XML、JDK以及Tomcat等技术紧密关联。Struts2在Java Web开发中...

    struts2 学习重点笔记

    ### Struts2 学习重点知识点总结 #### 一、Struts2 概念与架构 **1.1 Struts2 简介** - **定义**:Struts2 是 Apache 组织提供的一个基于 MVC 架构模式的开源 Web 应用框架。 - **核心**:Struts2 的核心其实是 ...

    struts2 知识点

    ### Struts2知识点详解 #### 一、Struts2框架概览 Struts2是Apache组织推出的一个基于Java EE的Web应用框架,它遵循MVC(Model-View-Controller)设计模式,为开发者提供了构建可扩展、易于维护的Web应用程序的...

    struts2总结大全

    本总结将深入探讨Struts2的核心概念、关键功能和实用技术,以帮助开发者全面理解并熟练运用这一框架。 一、Servlet模板 在Struts2中,Servlet模板是一种处理请求和响应的方式。它通过拦截器链对请求进行处理,然后...

    struts2学习笔记总结

    本笔记将全面总结Struts2的核心概念、主要功能以及实际开发中的应用。 一、Struts2概述 Struts2是Apache软件基金会下的一个开源项目,它继承了Struts1的优点并解决了其存在的问题,如性能和灵活性。Struts2的核心是...

    struts2笔记重点总结

    里面包含了全面的struts2重点内容,讲解比较详细,希望对大家有帮助吧!

    Struts2课堂学习总结

    以下是关于Struts2的一些核心知识点的详细说明: 1. **环境搭建**:要搭建Struts2的开发环境,首先需要配置Tomcat服务器和JDK。接着,将必要的Struts2库文件(jar包)添加到项目的类路径中,通常这包括Struts2的...

    Struts2初步使用总结

    ### Struts2初步使用总结 #### 一、Struts2原理概述 **1.1 为什么要用Struts2** 在探讨为何使用Struts2之前,我们先简要回顾一下Struts2的一些基本特点: - **模块化设计**:Struts2采用模块化的架构设计,使得...

Global site tag (gtag.js) - Google Analytics