Struts复习

Posted yeason

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的配置中引用技术分享图片

以上是关于Struts复习的主要内容,如果未能解决你的问题,请参考以下文章

Struts2复习之标签

Struts2复习之Struts2拦截器

Struts2知识复习之三

12-30 Struts2复习

Struts2知识复习之四

超全面 struts2 复习总结笔记