• Struts2


    一、Struts2的介绍

      概念:Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。Struts 2是Struts的下一代产品,是在 struts 1和WebWork的技术基础上进行了合并的全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与ServletAPI完全脱离开,所以Struts 2可以理解为WebWork的更新产品。虽然从Struts 1到Struts 2有着太大的变化,但是相对于WebWork,Struts 2的变化很小。(来自百度百科)

      简单点说,Struts2代替了之前介绍的servlet,来处理来自客户端的请求和访问,属于一个用于前端处理的框架:以前web层是servlet+jsp,现在是由Struts+jsp组合处理前端请求,并显示页面;

      业务层(service);dao层(目前学的有:mybatis、hibernate),而spring作为存放和管理对象的容器,贯穿于web、service和dao层;

    1、历史介绍:

      1和2版本无较大的联系,技术上没有联系,Struts1是建立在servlet上的,因此是线程不安全的,因为servlet是线程不安全的;而Struts2是基于拦截器的,实现功能的核心是拦截器,Struts2的核心是webwork框架,与Struts1联系不大:

      首先,Struts1支持的表现层技术单一,

      其次,Struts1与Servlet API的严重耦合,使应用难于测试。

      最后,Struts1代码严重依赖于Struts1 API,属于侵入性框架。Struts1代码严重依赖于Struts1 API,属于侵入性框架

    2、它的特点

      优点:自动封装参数;

         防止重复提交;

           参数校验;

         结果的处理(转发|重定向);

         国际化;

         显示等待页面;

         struts2具有更加先进的架构以及思想(1、拦截器封装了很多功能;2、可插拔式设计的拦截器;3、aop思想);

    3、步骤

      a、导包;

      b、书写Action类(HelloAction,不需要像servlet一样还要继承其他的servlet);

      c、在src(resource)下配置Struts.xml主配置文件,在web.xml文件里配置Struts核心过滤器filter,让Struts来处理整个项目的请求;

    4、程序或者代码大体上的流程

      以一次请求的过程为例,表面上的流程:

          

      深层次的底层流程:

      

    以上的具体过程是:

      过滤器过滤访问本项目的所有请求,然后会调用ActionMapper类,该类专门负责分析这次请求的信息(比如要访问哪个命名空间,以及该命名空间下的哪个action类),并返回一个ActionMapping对象(封装了请求信息)给过滤器,由过滤器转交给ActionProxy类(起调度作用),然后调用Configuration Manager去读取主配置文件,分析项目中都有哪些信息(包中的命名空间,action),并返回给ActionProxy,和ActionMapping中的请求信息比对,执行相对应的action,在执行之前,会经过一个集合(拦截器集合,默认经过20个拦截器),每一个拦截器都封装了对应的功能(比如封装参数等),并且是可插拔式的设计,可以有开发者自定义使用,这些action和拦截器集合都会交由Action Invocation来处理;

    5、主配置文件详解

      

    6、配置常量、默认值

    7、动态方法调用

    8、action类的创建方式(常用的是方式三)

      方式一:创建一个类,可以是pojo类,不继承任何父类,不实现任何接口,直接创建,比如class HelloAction,使得Struts2的代码侵入性低;

      方式二:实现一个接口Action,里面提供了execute()方法,和一些预置的字符串常量值,供参考,提供一个规范使用,不是强制要实现该方法;

      方式三:继承一个类:ActionSupport,它帮我们实现了Validateable、ValidationAware、TextProvider、LocaleProvider。如果我们用到这些接口的实现时,就不需要自己实现了。

    9、结果的处理(4种):转发(type="dispatcher")、重定向(type="redirect")、转发到action(type="chain")、重定向到action(type="redirectAction"),最后一个比较常用

    10、Struts2获得servletAPI的方式:如:ActionContext.getContext().getSession().;ActionContext是一个Map,里边装了很多map(域)

    11、如何在action中获得参数:

      a、属性驱动方法。在action类里边定义私有的成员变量(比如表格里的name,password,gender,age),然后提供各自的公有get/set方法;但是这种方式获得的参数都是零散的,不具有封装性,而且显得比较凌乱;

      b、对象驱动法。在action类里定义一个对象User  user,同样提供get、set方法,但是,表单里的标签属性name要写成  name="user.name",name="user.age"等。

      c、模型驱动。

      

      

      d、集合类型的数据封装 

      

    12、MVC设计思想和javaee三层架构的不同

      MVC指的是:model(业务模型,数据模型层,与数据库交互);view(视图);controller(控制层);

      javaee三层(0实际是四层)架构:客户端,web层(servlet和jsp),service,dao层;

      

      

    10、与servlet的对比

  • 相关阅读:
    爱迪生从事过300+个行业,并且硕果累累,诀窍不过以下3点……
    【转载】这些都是套路,但对标题党吸睛100%有用……
    【转载】有人出天价买他的一个文案标题,今天10min教会你……
    一张图看懂开源许可协议
    Git高级用法
    时频域,从傅里叶变换谈起
    【转载】数字图像处理
    摄影入门
    人像摄影
    C++语法
  • 原文地址:https://www.cnblogs.com/limuma/p/8513686.html
Copyright © 2020-2023  润新知