Struts复习

 

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

        二、这个请求通过一系列的过滤器(Filter)(这些过滤器中有一个叫作ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其余框架的集成颇有帮助,例如:SiteMesh、Plugin);java

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

        四、若是ActionMapper决定须要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;json

        五、ActionProxy经过Configuration Manager询问框架的配置文件,找到须要调用的Action类;浏览器

        六、ActionProxy建立一个ActionInvocation的实例。安全

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

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

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

        • 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的配置中引用

相关文章
相关标签/搜索