limuma

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

一、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的对比

posted on 2018-03-06 12:15  limuma  阅读(165)  评论(0编辑  收藏  举报