• 『转』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>

  • 相关阅读:
    IE兼容只读模式
    关于css实现单行、多行省略标记
    table表格字母无法换行
    IE浏览器兼容background-size
    IE兼容rgba()透明度
    修改输入框placeholder的默认样式
    Swarm+Docker+Portainer(集群,图形化)
    Docker的centos镜像内无法使用systemctl命令的解决办法
    Docker 制作Nginx镜像
    Xtrabackup 全量备份脚本
  • 原文地址:https://www.cnblogs.com/minideas/p/1945251.html
Copyright © 2020-2023  润新知