Struts2核心原理分析

介绍

 Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器 (Controller) 来建立模型与视图的数据交互。

核心功能 

(1)允许 POJO(Plain Old Java Objects)对象 作为 Action

(2)Action 的 execute 方法不再与 Servlet API 耦合,更易测试

(3)支持更多视图技术(JSP、FreeMarker、Velocity)

(4)基于 Spring AOP 思想的拦截器机制,更易扩展

(5)更强大、更易用输入校验功能

核心原理

Struts2 会根据每个执行 HTTP 请求的线程来创建对应的 ActionContext,即一个线程有一个唯一的 ActionContext。同时也创建一个 OgnlValueStack 值栈实例,OgnlValueStack 会贯穿整个 Action 的生命周期,当 HTTP 请求到 tomcat 时被 struts 拦截然后进入值栈中,此时 Action(图中的 A)中的对象将被实例化,然后经过 Action 的处理后由 result 返回。

如果在 action 的处理中时往 jsp 内置对象中存值的话,在请求返回后,jsp 内置对象中的值将会被同步到 ActionContext 中,同样的如果将数据存入值栈或者 ActionContext 的话,在请求之后数据会被同步到 jsp 内置对象中。需要注意的是,如果 Struts2 中 result 的请求跳转是客户端跳转,那么在返回结果之后 actioncontext 和值栈里的值会被清空。(此时 action 不会让 jsp 同步数据,因为 actioncontext 和值栈的值要被清空,actioncontext 让 jsp 同步数值应该在返回结果后)。如果是服务端跳转,返回结果,然后 actioncontex 和值栈的值不会被清空,然后把 actioncontext 和值栈里的值同步到 jsp 内置对象中。

客户端跳转在 jsp 页面可以通过 struts2 标签或者 OGNL 表达式获取 actioncontext 环境中的值,而 客户端跳转取不到值。默认情况下为客户段跳转。

如果要使用客户端跳转携带数据到新页面:

	<result type="redirect">/user_success.jsp?t=${type}</result>
	<!-- 只有客户端跳转的时候才需要这种方式 -->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值