`

struts2拦截器小结(1)以及ValueStack和StackContext的一点细节

阅读更多
1.使用自定义拦截器来判断用户提交action时是否登录
public String intercept(ActionInvocation invocation) throws Exception {
		// TODO Auto-generated method stub
		//如果是登录或注册请求,跳过拦截器
		String actionName=invocation.getInvocationContext().getName();
		if (actionName.startsWith("login")||actionName.startsWith("regist")) {
            return invocation.invoke();
		} else {
			HttpSession sess = ServletActionContext.getRequest().getSession();
			String username = (String) sess.getAttribute("username");
			if (username == null || username.trim().equals("")) {
                ActionSupport as=(ActionSupport)invocation.getAction();
                as.addActionError(as.getText("error.login.first"));
				return "index";
			}
			return invocation.invoke();
		}
	}


如果验证过程要发送actionerror或actionmessage等消息,如果验证过程要使用国际化资源文件内容等等问题怎么办?
可以通过ActionInvocation的getAction方法来获得一个Action对象,再把它强制转化为struts2为我们提供的ActionSupport对象,这样,就可以在拦截器中实现在Action中一样的操作,调用addActionError等方法。

2.关于ValueStack 和 StackContext

官网说明。
http://www.vaannila.com/struts-2/struts-2-tutorial/struts-2-framework-tutorial-1.html
引用

In Struts 2 the action resides on the ValueStack which is a part of the ActionContext. ActionContext is a global storage area that holds all the data associated with the processing of a request.

When a request comes the params interceptor helps in moving the request data to the ValueStack.

Now the OGNL does the job of converting the string based form data to their corresponding java types. OGNL does this by using the set of available built-in type converters.

Again when the results are generated the OGNL converts the java types of the property on the ValueStack to the string-based HTML output.

ActionContext is thread local which means that the values stored in the ActionContext are unique per thread, this makes the Struts 2 actions thread safe.

这里只大概介绍了下:
ValueStack是存放Action有关的数据,而ActionContext则是存放所有与用户请求相关的数据,当然也就包括ValueStack。
当用户发起一个请求的时候,会被params拦截器取出请求数据放入ValueStack中。
ONNL能提供类型转换的功能,将浏览器的基于文本的数据转化为java数据,反之亦然。
ActionContext使用的是“本地线程”(参考:http://baike.baidu.com/view/4498010.htm),是线程安全的。

struts2中,将ValueStack设置为OGNL的根,所以,可以用OGNL直接访问ValueStack中的对象,如果是存放在非根栈ActionContext中的对象,如session,request等就需要加上“#”号,可以在页面中使用<s:debug/>来查看两个存储区域中的对象数据。
如果不通过OGNL来访问ValueStack或ActionContext中的对象,则可以通过request的getAttribute()方法来访问,我是这样理解的,因为requst包含ActionContext包含ValueStack,不知道对不对。
如果还有其他的一些信息,欢迎补充。

转载请注明出处:http://383984216-qq-com.iteye.com/admin/blogs/1150029
1
3
分享到:
评论
2 楼 liguocai2009 2012-04-12  
很好,对我很有帮助
1 楼 仅此而已 2011-08-16  
谢谢分享!

相关推荐

    struts2拦截器国际化

    在Struts2中,拦截器(Interceptor)是实现业务逻辑控制和增强功能的重要机制,而国际化(Internationalization,简称i18n)则能帮助我们构建支持多语言的Web应用。下面将详细解释这两个知识点以及它们如何在Struts2...

    Struts2拦截器及其用法详细说明

    拦截器基于Java的动态代理机制,能够独立于Action和Struts2框架进行扩展和复用。下面我们将深入探讨Struts2拦截器的原理、功能和配置。 1. **拦截器的工作原理**: 拦截器按照配置的顺序组成一个拦截器栈,在...

    struts2拦截器总结

    Struts2 拦截器是其核心特性之一,它为开发者提供了强大的功能,用于处理请求、响应以及在业务逻辑执行前后进行各种操作。在 Struts2 框架中,拦截器扮演着中间件的角色,可以实现如权限检查、日志记录、事务管理等...

    struts2拦截器详述ppt

    ### Struts2拦截器详述 #### 一、理解拦截器 ##### 1.1 什么是拦截器? 拦截器(Interceptor)是面向切面编程(AOP)中的一项关键技术,主要用于在方法或字段被访问之前对其进行拦截,并在访问之前或之后加入特定...

    struts2内置拦截器简介

    ### Struts2内置拦截器简介 Struts2框架在实现MVC模式时,为了更好地管理请求处理过程中的各个阶段,引入了拦截器机制。通过拦截器可以对请求进行预处理或后处理,使得代码更加模块化和易于维护。Struts2提供了一...

    struts1和struts2的区别

    通过上述对比可以看出,Struts2相比Struts1在很多方面进行了改进和优化,尤其是在灵活性、可测试性以及对现代Web开发的支持上有着显著的优势。尽管如此,在某些特定的应用场景下,Struts1可能仍然有其适用之处。选择...

    Struts2内置拦截器简介

    Struts2的核心是拦截器(Interceptor)机制,通过一系列可配置的拦截器来处理请求和响应。Struts2提供了丰富的内置拦截器,这些拦截器可以单独使用,也可以组合使用,以满足不同的业务需求。接下来将详细介绍Struts2...

    Struts1和Struts2的区别和对比.txt

    **Struts2**采用了更为先进的拦截器栈(Interceptor Stack)机制,每个Action可以通过配置不同的拦截器来处理请求前后的逻辑,这使得Struts2能够更好地分离关注点,支持更多的功能扩展。 ##### 3. **请求处理** **...

    J2EE企业级项目开发-3期(KC007) 8.3 Struts之拦截器使用技巧考试.doc

    在Struts2中,拦截器扮演着至关重要的角色,它们是基于AOP(面向切面编程)概念的,允许开发者在Action执行前后插入自定义逻辑,从而极大地提高了代码的可维护性和可扩展性。 1. 拦截器是在Action执行之前和Action...

    struts1和struts2的区别(详细)

    - **Struts2**: 提供了更为灵活的配置机制,除了支持XML配置文件外,还可以使用注解等方式来配置Action和拦截器等组件,使得代码更加简洁易懂。 综上所述,尽管Struts1和Struts2都属于MVC架构的Web开发框架,但它们...

    Struts2和Struts1的什么区别

    综上所述,Struts2相较于Struts1,在灵活性、可扩展性、易用性和性能方面都有显著提升,特别是在模型驱动、表达式语言、视图管理和拦截器机制等方面展现了明显的优势。然而,选择何种框架还需根据项目需求、团队熟悉...

    struts1.x和struts2.x区别

    而Struts2.x通过拦截器栈(Interceptor Stack)实现了动态配置,可以根据需要为不同Action配置不同的拦截器,大大增强了框架的灵活性和扩展性。 综上所述,Struts2.x相对于Struts1.x在多个方面进行了改进和优化,...

    struts2jar包

    在Struts2中,OGNL用于传递Action与视图之间的数据,以及在拦截器中进行表达式计算。 4. **struts2-convention-plugin.jar**:这是Struts2的约定优于配置插件,它简化了Action类和结果配置,使得开发者可以按照一定...

    struts2开发文档

    总的来说,Struts2通过其拦截器机制提供了更强大的控制能力和灵活性,使得开发者能够更专注于业务逻辑的实现,而不是框架的细节。它的出现极大地改进了Struts 1的不足,成为了Java web开发中广泛使用的框架之一。

    Struts2入门小程序

    总的来说,"Struts2入门小程序"将涵盖Struts2的基本架构、配置、MVC模式的应用、标签库的使用、拦截器的实现、数据绑定以及可能的Spring集成等多个方面,是初学者深入理解Struts2框架的宝贵资源。通过实际操作和学习...

    Struts1和Struts2的区别和对比

    最后,在Action执行的控制上,Struts1使用基于配置的Action Mapping,而Struts2引入了拦截器(Interceptor)的概念,通过拦截器链来控制Action的执行流程,提供了更高的灵活性和可扩展性。 综上所述,Struts2在设计...

    struts1和struts2区别

    Struts1和Struts2是两个非常著名的Java Web框架,它们在处理MVC(Model-View-Controller)架构方面有着显著的区别。以下是关于这两个框架在关键特性上的对比: 1. **Action类**: - **Struts1**:要求Action类继承...

    马士兵Struts2笔记2013

    Struts2是一个流行的Java web框架,...以上就是"马士兵Struts2笔记2013"中涉及的主要知识点,这些内容涵盖了Struts2的基础配置、数据处理、验证、调试以及与视图层的交互等方面,对于理解和掌握Struts2框架非常有帮助。

    Struts2和Struts1的区别,详细点,主要说说Struts2

    综上所述,**Struts2**相较于**Struts1**在架构设计、实现方式以及各种功能细节上都有了显著的改进,特别是在线程安全性、可扩展性及灵活性方面表现得更加出色。这使得**Struts2**成为了许多企业级应用的首选框架之...

Global site tag (gtag.js) - Google Analytics