粗略了解struts2
花了半天的时间再把struts2详细拟了一遍,之前用习惯了servlet加jsp,再看struts2的时候终于明白为什么大家都愿意学,以人类天生的惰性,要让他们愿意去学习一个新的东西,这东西一定可以让他们懒得更彻底;个人觉得,struts2就是通过拦截器、过滤器这些,对servlet进行了一系列的封装,其实本质都是一样的,而且封装过后可能很多东西实现得更加复杂一些,但是那些我们都不用管,反正封装好了之后,我们用着是方便简单多了(最大的体会便是在文件上传上了)。
首先来说,作为2.0版本,它肯定是要比1.0好很多了(好得太彻底,几乎没啥关系了),struts2中,action每处理一次请求就会生成一个实例,当然用完马上销毁,这样做的一大好处就是,保证了线程安全,而线程安全的一大好处在于,我们可以放放心心的定义使用属性了,使用了属性,在拦截器中,获取到action对象,通过反射就可以直接给属性赋值啦!!这样action里面只需要定义属性,添加它们的设定器、访问器,就可以完成jsp和action的值传递,相交起servlet的getParameter()要方便太多了,而且struts2还解决了中文乱码的问题。。。
struts2的工作原理也很简单,客户端发来http请求,先通过web.xml这个工程配置文件,要使用 struts2就需要在里面配置一个filter,作为一个struts2框架的入口,请求通过这个filter,发现这个工程用的是struts2的框架,那完成一系列初始化,整个跳到struts2的状态;
这个时候请求就该去ActionMapper,ActionMapper里面汇集了整个工程中所有action在struts.xml文件中配置的action元素的name属性,这些name属性是和url对应的,那请求过来在这一堆中找,如果没找到,那证明该工程内是没有它要找的那个action的,这个请求到这儿也就夭折了;
如果要是找到了,个人认为,此时算是对这个请求的正式处理开始了;ActionMapper将请求送到FilterDispatcher,然后通过一系列的过滤器,通过了就能来到ActionProxy处了,ActionProxy不能直接获取到你要的action啊,它又交代ConfigurationManager到struts.xml文件中去找到你要去的action,ConfigurationManager把结果告诉它,它再告诉给请求,这个时候ActionProxy的工作算是完成一半了,剩下一半是把请求送走,怎么送?第一步,创建一个ActionInvocation action调用的对象,第二步,把请求交给ActionInvocation,完成,到这里ActionProxy的工作彻底完成。
此时,请求经过一系列的拦截器,完了之后终于可以到action了,执行完成过后,根据return携带数据返回,再倒序经过那一系列的拦截器,将响应数据交给HttpServletResponse,完成响应。
过程其实很简单,但是这里面有几个很重要的东西。
第一个,action,,,action就是一个普通的java类,它可以不实现不继承任何东西,这样实现了与框架的完全解耦,同样的也不能用框架写好的一些方法了;
也可以通过实现Action接口 或者继承ActionSupport类, 绝大部分时候大家都是选择继承ActionSupport,方便用其写好的方法,但我在应用过程中绝大部分方法都是自己定义的,并没有使用它写好的方法,对我来说,差别不大, ActionSupport也实现了Action接口, 其实里面就定义了五个常量 一个execute方法
action在配置上面 除了name和url对应这一点之外,action被调用是 默认的执行的方法是execute,要调用其他方法可以在url后面加!方法名,也可以method设定
return元素的name属性值和return返回的字符串一致
第二个,拦截器,,,,拦截器和过滤器很像,不同的是拦截器只能拦截action,而过滤器可以过滤全部 struts2中拦截器完成了很大一部分的工作
struts中定义了很多拦截器,对应各种功能,也通过Interceptor-stack来组织一系列的拦截器,struts.xml中package继承struts-default时其实就引用了默认的拦截器栈,也可以自定义拦截器 对于拦截器 在interceptor元素中定义,在interceptor-ref元素中使用
第三个,ognl表达式,,这个表达式和el表达式其实也很像,但它可以操作动态操作集合这些
第四个,actionContext,,,action上下文 它也可以去得到request、session、application 但是这四者和HttpservletRequest、HttpSession、servletContext这些不同,它是“假的”,他们本质是map 是用servlet的几个作用域的副本封装的
第五个,标签,,,struts的标签感觉更精简了一些,但是html本身差别不是很大,不过struts2从2.0.11版开始不能使用el表达式了,用ognl代替
粗略了解struts2的更多相关文章
- 深入浅出Struts2+Spring+Hibernate框架
一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...
- Java框架Struts2
struts2的核心和工作原理 在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于we ...
- Struts2(一)入门及工作原理
Apache Struts 2 是一种流行的 Java模型 - 视图 - 控制器(MVC)框架,成功地结合了 WebWork和Struts1.x 两种 web 框架. Apache Struts2与S ...
- Struts2 原理
.Struts2原理 .Struts 1 原理 .Struts1 和webwork的关系 .HttpServletRequest Struts2原理
- Struts2体系结构图以及详解
Strut2的体系结构如图所示: 一个请求在Struts2框架中的处理大概分为以下几个步骤: 1.客户端初始化一个指向Servlet容器(例如Tomcat)的请求: 2.这个请求经过一系列的过滤器(F ...
- struts2的工作原理
在学习struts2就必须的了解一下它的工作原理: 首先来看一下这张图 这张工作原理图是官方提供的: 一个请求在Struts2框架中的处理大概分为以下几个步骤 1.客户端初始化一个指向Servlet容 ...
- struts2从认识到细化了解
目录 Struts2的介绍与执行流程 介绍: 执行流程: 运行环境搭建 基础示例 Action类的编写 介绍: 访问servlet API 补充: 配置文件 常见配置文件: 常量的配置: struts ...
- Struts2 核心流程
1.Struts2架构图 这是Struts2官方站点提供的Struts 2 的整体结构. 执行流程图 2.Struts2部分类介绍 这部分从Struts2参考文档中翻译就可以了. ActionM ...
- struts2的核心和工作原理 <转>
在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处? 设计目标 Struts设计的第一目标就是使MVC模式应用于web程序设计.在这儿MVC模式的好处就 ...
随机推荐
- 模具厂MES项目介绍
开发工具:Microsoft Visual Studio 2012 数据库: Oracle 开发语言:C#(4.0) 版本控制工具:TortoiseSVN 底层ORM框架:IBatisNet ...
- ASP通过ADODB读取Access数据库
<% On Error Resume Next set conn=server.createobject("adodb.connection") mypath=server. ...
- logistc regression练习(三)
% Exercise 4 -- Logistic Regression clear all; close all; clc x = load('E:\workstation\data\ex4x.dat ...
- Power of Four(Difficulty: Easy)
题目: Given an integer (signed 32 bits), write a function to check whether it is a power of 4. Example ...
- DateTime 详解
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...
- VS2010的项目配置
一直对VS的项目配置都是不怎么了解的,以前用过点,半年不用后,什么都忘记了... 下面这个是免于输入过长的引用头文件的,比如:#include “D:/C++/curl-7.37.0/libcurl/ ...
- Session Tracking Approaches
cookies url rewriting hidden field see also: http://www.informit.com/articles/article.aspx?p=29817&a ...
- 【Python】str类方法说明
#capitalize():字符串首字符大写 string = 'this is a string.'new_str = string.capitalize()print(new_str)#输出:Th ...
- 关于JAVA的数据转换总结
数据转换在编程里面是十分常用的,将平常可能用到的数据转换类型总结起来会在以后码代码的过程中有很大帮助. 在数据转换之前,需要明白的是基础数据类型的自动转换和强制转换.接下来就先从数据类型的容量讲起. ...
- C#检测本地网络状态
using System; using System.Runtime.InteropServices; public static class NetTool { [Flags] private en ...