zoukankan      html  css  js  c++  java
  • 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的动作。假设找不到,就会在默认命名空间中查找这个动作。


  • 相关阅读:
    大数据Hadoop第二周——配置新的节点DataNode及ip地址
    vue环境搭建详细步骤
    苹果电脑Mac系统如何下载安装谷歌Chrome浏览器
    点云的基本特征和描述
    ModuleNotFoundError: No module named 'rospkg'
    ROS的多传感器时间同步机制Time Synchronizer
    Spring Cloud 2020 版本重大变革,更好的命名方式!
    Spring MVC 接收请求参数所有方式总结!
    阿里为什么不用 Zookeeper 做服务发现?
    微服务之间最佳调用方式是什么?
  • 原文地址:https://www.cnblogs.com/yangykaifa/p/7283656.html
Copyright © 2011-2022 走看看