• Struts复习


    • Struts复习
      •   Struts流程
        • 1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求;

          2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh、Plugin);

          3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action(2.1.3开始核心控制器是StrutsPrepareAndExecuteFilter);

          4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;

          5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;

          6、ActionProxy创建一个ActionInvocation的实例。

          7、ActionInvocation实例(它应该对应到具体的Method<不确定>)使用命名模式(里面声明了一个接口,接口里面只有一个方法,使用到命名模式的主方法传入的“命令”就是这个接口参数,主方法直接调用接口里面的这个方法就行)来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。

          8、一旦Action执行完毕,ActionInvocation负责根据struts、xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper。

      •   Struts文件加载顺序
        1. 第一个加载的是default.properties文件 ,主要是声明了struts2框架的常量 
        2. 第二个加载的是一批配置文件

          • Strtus-default.xml,主要是声明了默认的拦截器等
          • Strtus-plugin.xml 插件的配置声明

          • 自己的Strutsxml
      •   package的namespace属性与.action标签的name属性联合使用来确定一个action 的访问路径
      • 当一个请求来时,如果查找不到指定的class及对应的method就会执行ActionSupport类中的execute方法。

      • 可以直接在strtus.xml文件中定义常量 (推荐)

      • Action访问(通配符)

      

      •   Action的创建方式三种 ActionSupport Action接口 POJO
      • 接收参数 
        • 模型驱动

          •   1.Action类要实现一个指定接口ModelDriven

            2.实例化模型对象(就是要new出来javaBean)

            3.重写getModel方法将实例化的模型返回。

        • 属性驱动

          直接在action类中提供与请求参数匹配属性,提供get/set方法

      •  Struts2中获取Servlet API,ServletActionContext获取
      • 如果从根中获取数据,不需要添加#号,如果不是从根中获取,需要#

      • struts2框架中我们使用ognl表达式的作用是从valueStack中获取数据

      • 想在jsp页面上使用ognl表达式,就需要结合struts2框架的标签,<s:property value=”表达式”>来使用

      • 我们使用valueStack的主要目的是为我将我们action中产生的数据携带到页面上,也就是说valueStack它就是一个容器,接口,。我们主要使用的是它的实现类com.opensymphony.xwork2.ognl.OgnlValueStack,struts2框架将valueStack保存在request中。

        当客户端向我们发送一个请求,服务器就会创始一个Action来处理请求,struts2中的action是一个多例,每一次请求都会有一个新的action对应。所以它不存在线程安全问题。

      • request---ActionContext----Action-----ValueStaci它们都对应着一次请求(一个线程).

      • 获取Valuestack
        •  

          第一种方式:可以直接通过request对象来获取.

           

        •     

          第二种方式:使用ActionContext来获取

      • ActionContext它是action上下文,strtus2框架它使用actionContext来保存Action在执行过程中所需要的一些对象,例如 session, application… 

        ActionContext的获取  是通过它的静态方法getContext()得到。

        Struts2会根据每一次的http请求来创建对应的ActionContext,它是与当前线程绑定的。

        每一次请求,就是一个线程,对应着一个request,每一次请求,会创建一个Action,每一个action对应一个ActionContext.每一次请求也对应着一个valueStack.

        request---ActionContext----Action-----ValueStaci它们都对应着一次请求(一个线程).

      •  向Valuestack中存储数据 valueStack.set("username","tom"); 获取<s:property value="username"/>
      •  

        问题:为什么el表达式可以从valueStack中获取数据?

        org.apache.struts2.dispatcher.StrutsRequestWrapper

        Struts2框架对request进行了增强,重写了getAttribute方法,如果在request域中查找不到数据,就会在valueStack中获取。

      •  要想在页面上展示集合信息可以使用<s:iterator>标签来完成
      •  拦截器
        •   所有的Interceptor都要实现一个接口

          com.opensymphony.xwork2.interceptor.Interceptor

        • 在配置文件中声明Interceptor

          我们也可以将多个interceptor封装成一个stack

        •    

          可以在Action的配置中引入自己的interceptor

          注意:当我们显示的引入了一个自定义的Interceptor,那么默认的defaultStack就不会在导入,需要手动导入

        •    
        •   
      • 文件上传
        •   

          表单提交方式method=post

          表单中必须有一个<input type=”file”>组件

          表单中必须设置enctype=”multipart/form-data”

        • 注意这里的servletContext就是application
        • 还需要配置文件上传大小
        • 多个文件
      •  FastJson
        •   对于User对象
        •    对于List<User>
        • 如果对Date类型进行格式化输出

        • 关于属性是否生成在json串中设置

      •  Jackson
        •   

           设置如期

        • 过滤属性

           

      •  返回数据
        •   
        • ServletActionContext.getResponse().getWriter().writer(json);
        • 前端-->var jsonObj = eval(data);
      •  Struts返回json数据
        •   
        • 将我们自己配置文件中的<package extends=”json-default”>

        • Action的返回视图<result name=”” type=”json”>配置了上面两步,那么struts2框架就会将valueStack中的栈顶元素转换成json响应到浏览器

        • 服务器端
      •  注解开发
        •   
      •  interceptor控制登录
        •  创建一个类来实现Interceptor接口或继承MethodFilterInterceptor
        •  struts.xml文件中声明(注意有一个interceptor以及interceptor-stack都需要声明)
        • action的配置中引用

  • 相关阅读:
    命令行
    作业三C++
    作业二
    0003---简单的a+b问题
    0002---五层小山
    0001---Hello world
    关于OJ的那些事
    CDQ分治学习笔记
    C++ IO的一些注意点
    Vscode配置C++环境
  • 原文地址:https://www.cnblogs.com/yeason/p/8260135.html
Copyright © 2020-2023  润新知