• Struts2动作


    ActionContext

    每一个请求的处理都在一个独立的线程中。每一个线程都有一个ActionContext对象。它包括了ValueStack和HttpServletRequest的东西。


    Struts把全部的变量统一放在一个方便的地方。而不是将数据传来传去,这个东西就是ValueStack。它贯穿于整个处理流程,所以拦截器和视图层都能够操作ValueStack中的内容。一般通过OGNL间接操作,而不是直接操作。每一个请求都会创建一个新的Action,因此不会有多线程冲突的问题。


    动作

    动作的作用就是封装业务逻辑、传输数据、决定响应视图。


    动作能够看成是一个JavaBean。框架会将请求中的參数依照JavaBean规范填入到Action。之后在视图层能够读取Action中的数据。这就是传输数据的过程。为了简化问题,能够在Action中添加一个JavaBean类型的属性,这样视图层就能够将数据直接填到一个对象中,而不是填到动作中。另外能够让动作实现ModelDriven接口。这个接口的作用就是将全部的參数都定向到getModel这种方法中。

    getModel须要返回一个JavaBean。


    public class TestAction {
        private Student student;
    
        // 返回一个JavaBean对象,这样就能够让參数填入对象
        public Student getStudent() {
            return student;
        }
    }
    


    文件的上传。文件的上传是通过FileUploadInterceptor实现的。文件字段能够看成三个请求參数。假设表单中的字段名为XXX。那么Action会接收到三个參数:

    • XXX。

      File类型的数据,表示被上传的文件。

    • XXXContentType。文件的内容类型。
    • XXXFileName。文件储存在server上的文件名称。

    对于多个文件,仅仅要将File改成File数组、String改成String数组就可以。在一次请求结束之后,文件会被拦截器删除。


    框架对动作的父类没有不论什么要求,仅仅要实现execute方法就可以。

    可是这样不能直接使用框架自带的便捷方法。因此能够引入ActionSupport基类。它的作用有数据验证、错误消息本地化等。


    数据验证。DefaultWorkflowInterceptor会调用Action中的validate方法。开发人员能够复写这种方法来检查数据是否正确。假设发现错误。能够调用addFieldError(field,message)这种方法加入错误。框架检測到错误之后会跳转到input页面让用户又一次输入表单。ActionSupport还支持消息的本地化。首先要定义ActionName.properties,然后通过getText方法就能够获取。


    以下介绍包的概念。

    首先打个例如。将Struts中的动作比作Java中的类。

    我们知道Java类一般都会放在一个包中。

    Struts也会将动作放在包中。包的定义在struts.xml文件里,以下是一个包的演示样例:

    <package name="helloWorld" namespace="/my/path/helloWorld" extends="struts-default">
      <action name="Hello">
        <result>/my/hello.jsp</result>
      </action>
      <action name="World">
        <result>/my/world.jsp</result>
      </action>
    </package>
    


    默认namespace和根namespace的差别。

    默认namespace在定义的时候事实上是一个空的字符串(不指定namespace就可以)。而根空间在定义的时候是“/”。举个样例,有一个请求http://localhost/hello/world/nice.action,框架首先会在/hello/world这个空间中找一个名为nice的动作。假设找不到,就会在默认命名空间中查找这个动作。


  • 相关阅读:
    Rose 公司系统高可用性解决方案比较
    时序数据库有哪些特点? TimescaleDB时序数据库介绍
    EterneMirrorHA简介
    SpringBoot无法访问接口,报错:This application has no explicit mapping for /error, so you are seeing this as a fallback.
    druid对数据库密码进行加密解密
    Intellij Idea新建 SpringBoot 项目
    IDEA启动项目报错:Caused by: java.io.FileNotFoundException: class path resource [.properties] cannot be opened because it does not exist
    Dubbo添加过滤器(二)日志打印接口耗时
    SpringBoot2.X整合集成Dubbo
    shell 脚本执行带参数的hivesql
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7283656.html
Copyright © 2020-2023  润新知