zoukankan      html  css  js  c++  java
  • 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的对比

  • 相关阅读:
    【leetcode】1295. Find Numbers with Even Number of Digits
    【leetcode】427. Construct Quad Tree
    【leetcode】1240. Tiling a Rectangle with the Fewest Squares
    【leetcode】1292. Maximum Side Length of a Square with Sum Less than or Equal to Threshold
    【leetcode】1291. Sequential Digits
    【leetcode】1290. Convert Binary Number in a Linked List to Integer
    【leetcode】1269. Number of Ways to Stay in the Same Place After Some Steps
    【leetcode】1289. Minimum Falling Path Sum II
    【leetcode】1288. Remove Covered Intervals
    【leetcode】1287. Element Appearing More Than 25% In Sorted Array
  • 原文地址:https://www.cnblogs.com/limuma/p/8513686.html
Copyright © 2011-2022 走看看