码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2 核心基础总结

时间:2016-05-16 14:39:00      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:java

学习参考资料:

        主:

        一个号称从事软件开发超过16年的老外的网站

        Apache官网上的Struts2

         

        辅:

        一本《深入浅出Struts2》

        一本《Struts2技术内幕》

        

        注:笔者会不断修改完善,因为刚开始记笔记,时间比较紧

        

        

笔记方法:问题——答案式;


学习策略:先以运行相关具体内容为主,再进行抽象理论描述

        

        



**第一问:Struts 2是什么?**


   1、Struts2运行框架和核心组件


    Struts 2角度:Struts 2运行的框架结构图

技术分享


     Struts 2的五大核心组件分别是:

     Actions

     Interceptors

     Value Stack/OGNL

     Results/Results Types

     View Technologies

     

     

    MVC角度:Struts2实现MVC的比较具体的运行结构图:

    技术分享

    PS:第一张图对Request生命周期的描述才是完整的!

    

    

    

    Action介绍

    关键词:映射  数据类型转换  Result

    Action是Struts2框架的核心,每一个URL都会被映射到一个具体的Action(URL是从V层,如一个登录界面发过来的,Action是M层,所以这种映射就是实现V层和M层的映射),这个具体的Action提供了服务来自客户端的Request的必要的处理逻辑(即处理方法,如execute)。


    Action提供了另外两个重要的功能:数据类型转换和决定哪一个视图作为响应返回给客户端。

    数据类型转换是指:来自Request的数据类型,转换成响应的那个视图的数据类型,也就是判断是JSP类型还是其他的Result Types。

    决定哪一个视图作为响应返回给客户端就是:Result是什么。和URL有映射关系的那个Action中有一个execute方法,方法里有一个选择条件语句——用以判断返回的视图是哪一个,execute方法执行完后会返回一个result。这个Result对应于struts.xml文件中的result元素,这个元素的值就就是要返回给客户端的视图。注意:Action中的方法有一个返回的结果(result),配置文件struts.xml有一个result标签。

    PS:这三个要点很集中。但需要把它们细分出来。

    

    

    

    Interceptors介绍:

    拦截器从概念上讲,就像Servlet过滤器或者JDK里的代理类(设计模式里有一个模式叫代理模式)。

    Interceptor可以独立于Action实现交叉功能。用Interceptor可以实现:

    Action调用前提供预处理逻辑;

    Action调用后提供后处理逻辑;

    捕捉异常从而实现交替处理。

    

    Struts2提供的许多特点都是由拦截器实现的:比如异常处理,文件上传,生命周期回收,验证器。Struts2的许多功能都基于拦截器,所以一个Action分配有7、8个拦截器是很常见的。

    Struts2提供了一系列配置好了的拆箱即可使用的拦截器,以下是其中一部分:

    alias

    checkbox

    conversionError

    creatSession

    debuggin

    execAndWait

    exception

    fileUpload

    ……

    

    拦截器的使用:只需将拦截器配置在struts.xml文件中的action元素下。

    

    

    

    Result Types介绍

    在Struts MVC框架中,struts.xml文件中的Result标签代表着V层。动作负责执行业务逻辑,之后便是使用Result标签展示V。Result标签是Action标签的子标签,对应着的是Action类有返回的result。

    result标签通常带有一些导航规则。比如用户登录有三种结果,1.登陆成功;2.登录失败——用户名或密码不正确;;3.账号锁定。这种情况下,Action的方法就会有三种可能的字符串输出,result有三种对应的值——也就是三种V,来实现响应。

    Result中我们不一定要用JSP类型的文件作为响应发送给客户端。MVC范式的目的是实现层与层之间的分离和高度可配置的。Result标签的默认Type是dipatcher,用来分发JSP页面,当然你也可以用其他的标记语言来作为result type。

    


    

     Value Stack值栈介绍:

     值栈,是一些对象构成的集合,它按照以下顺序保存了以下对象:

     1、临时对象。页面执行期间会有很多临时的对象。比如通过JSP标签循环的集合的当前迭代值。

     2、模型对象。如果你在Struts2中使用模型对象Model Objects,action出现在值栈之前模型对象就会被放置在这里。

     3、Action对象。就是正在被执行的当前的action对象。

     4、指定的对象。比如#application,#session,#request,#attr和与servlet scope相应的#parameters。

 

     如第二张图所示:可以通过提供给JSP、Velocity、FreeMarker的标签来set值栈。而Action可以通过get方法来获取值栈对象。值栈提供了一些方法来操作值栈对象。


     OGNL对象图形导航语言介绍:

     这种强大的表达语言用于引用和操作值栈里的数据。它还可以帮助数据传输类型转换

     OGNL和JSP的EL很相似。OGNL基于上下文有一个根或者一个默认对象的思想。根对象的属性可以通过#这个标记符号来引用。


     struts2为OGNL的使用建立了一张ActionContext图,这张ActionContext图包括以下部分:

     application:application范围内的变量

     session: session范围内的对象

     root/value stack: 所有的action对象的变量都存储在这里

     request: request范围内地变量

     parameters:request参数

     attributes:属性存储在page、request、session和application范围内。


     理解action对象始终在value stack中这一点是很重要的。所以,如果你的action对象有属性x、y,那么它们就准备好可以被你使用了。

    ActionContext里的对象可以通过#标记符号来访问,而值栈中的对象可以直接访问。

    OGNL同样支持处理集合——Map,Set,List。

本文出自 “11411196” 博客,请务必保留此出处http://11421196.blog.51cto.com/11411196/1773883

Struts2 核心基础总结

标签:java

原文地址:http://11421196.blog.51cto.com/11411196/1773883

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!