Struts2的深入理解与使用(一)
来源:互联网 发布:date php 格式化 编辑:程序博客网 时间:2024/06/07 20:32
要深入理解一门开发技术,我觉得要从哲学的角度去体会它:是什么?为什么?怎么用?
1.Strtus2是什么?
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的变化很小。
2.为什么(Struts的原理)?
一个请求在Struts2框架中的处理大概分为以下几个步骤(可查看源码:https://github.com/apache/struts):
1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助, 例如:SiteMesh Plugin)
3 接着FilterDispatcher(现已过时)被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action
4 如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy
5 ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类
6 ActionProxy创建一个ActionInvocation的实例。
7 ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8 一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper
3.怎么用(配置Struts2de 步骤)
> 1)配置web.xml 2)配置struts.xml文件 <package name="default" namespace="/" extends="struts-default"> <action name="hello" class="action.HelloAction" ><result name="input">hello.jsp</result> (返回字符串为input,就跳转到hello.jsp页面)<result name="success">hello.jsp</result></action><action name="houseAction" class="action.HouseAction"><result name="success">page/list.htm</result></action> </package></span>注意:配置文件里的“action name” 要与form表单里的“action name”保持一致,并且提交方式一定要设置为post,method="post"
3)创建Action类(相当于一个Servlet) ,一共有三种方式
1.实现Action接口,重写execute()方法
2.继承ActionSupport类,重写execute()方法(推荐使用)
3.写一个普通的,不带参数的execute()方法,例如
4)Action 接受参数的方法
1> 在 Action 中定义属性:
private String name;
并添加 setter/getter 方法 在页面中使用 <input type="" name="name" />
2> javaBean 方式定义 JavaBean :
1)创建User实体类User: name, password
2)在 Action 中定义属性:private User user;并添加 setter/getter 方法,
3)在页面中使用:<input type="' name="user.name" />
5)在只写一个Action,内部有N个方法的前提下,如何调用Action方法呢?
1> 在配置中指定方法名:<action name="userAction" class="action.UserAction" method="login">(推荐使用)
2> 动态方法调用:
配置:<action name="userAction" class="action.UserAction">
调用时,地址:userAction!add
3> 通配符方式
配置:<action name="*_Action_*" class="action.{1}Action" method="{2}">
调用时:地址:House_Action_add 将会由 HouseAction 中的 add() 处理。
***2,3的缺点,配置不清晰,另外,result 需要单独配置
- Struts2的深入理解与使用(一)
- Struts2 的深入理解与使用(二)---配置文件详解(一)
- struts2与springMVC深入对比(一)
- 深入理解Canvas类的使用(一)
- 深入理解矩阵与渲染(一)
- 深入struts2(一)
- 深入理解Struts2的配置文件
- 深入理解struts2的namespace
- 深入理解struts2的namespace
- struts2的深入学习(一)
- git的深入理解与使用
- GIT的深入理解与使用
- 练习OGNL 与 Struts2的使用(一)
- 深入理解struts2的值栈(转)
- 深入理解Struts2的ognl标签
- 深入理解Linux网络技术内幕——设备的注册与初始化(一)
- 数据结构与算法分析(一) —— 深入理解递归算法的调用过程
- 深入理解Spark 2.1 Core (一):RDD的原理与源码分析
- lesson1 计算机科学篇之CPU与二进制
- 写作的力道——北漂18年(番外篇一)
- Gradle安装与简单使用
- 继承、封装
- Enable ADB integration' to be enabled.
- Struts2的深入理解与使用(一)
- 机器学习(周志华)习题解答1.4: 两个算法到底孰优孰劣?没有免费午餐定理
- 4-12 二叉搜索树的操作集
- JavaScript趣题:成双成对的括弧
- 背景属性、文本属性、表格属性、边框属性
- 4-6 带头结点的链式表操作集
- 4-7 在一个数组中实现两个堆栈 (20分)
- 程序猿之路--Android基础
- 4-8 求二叉树高度 (20分)