如何在Struts2的拦截器中调用Spring容器

第一种:

通常用ApplicationContext来调用Spring配置文件中的一些Bean,所以首先创建Spring上下文容器。

ApplicationContext ac = (ApplicationContext) invocation.getInvocationContext().getApplication().get(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);

以上代码中invocation是Struts2拦截器方法intercept(ActionInvocation invocation)方法的参数

其中ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE在源码中是这样定义的:

String ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE = WebApplicationContext.class.getName() + ".ROOT";

所以通过此种方式可以得到ApplicationContext

第二种:

ServletContext sc=ServletActionContext.getServletContext();
ApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(sc);

首先获取Servlet上下文(这是Struts2访问Servlet三种方式中的一种)

Spring给我们提供了WebApplicationContext的工具类很方便的访问WebApplicationContext,这种方式比上一种简单,

但是如果仔细查看WebApplicationContextUtils的getWebApplicationContext(ServletContext sc)的源码会发现还是会用到ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,所以归根结底它们的原理一样。

public static WebApplicationContext getWebApplicationContext(ServletContext sc) {
        return getWebApplicationContext(sc, WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
    }

时间: 2024-10-17 15:58:35

如何在Struts2的拦截器中调用Spring容器的相关文章

调查管理系统 -(6)自定义Struts2的拦截器&自定义UserAware接口&Action中模型赋值问题&Hibernate懒加载问题

1.对于一些功能,如我的调查或新建调查等,只有用户登录后才能进行操作,因此必须对用户是否登录进行判断.当用户登录后才能使用相应的功能,如果没有登录则需为用户导航到登录页面让其进行登录.这个功能可以通过自定义Struts2的拦截器来完成. 2.当用户登录之后,由于是将用户的信息保存在session中的.这样当一些Action中需要用到当前登录的用户的信息时需要手动的从session中获取,不太方便,因此我们声明了一个UserAware接口(即用户关注,类似于Struts2中的SessionAwar

Struts2之拦截器原理分析及使用-再中

一.学习案例:关于拦截器的了解,我们肯定不再单纯地编码.我会带大家通过研读源码了解拦截器的实现方式,以及学习struts2的编码方式. 二.案例分析: a)MethodFilterInterceptor方法拦截器,如果没指定includeMethods,也没指定excludeMethods,则所有方法都会被拦截,即所有方法默认includeMethods. b)对于指定了includeMethods,而不在其中的方法则不会被拦截. d)怎么拦截,拦截什么都是由MethodFilterInterc

Struts2自定义拦截器

自定义拦截器 1). 具体步骤 I. 定义一个拦截器的类 > 可以实现 Interceptor 接口 > 继承 AbstractInterceptor 抽象类 II然后在拦截器类的interceptor()方法中定义这个拦截器的功能 III. 在 struts.xml 文件配置. 1注册拦截器 <interceptors> <interceptor name="hello" class="com.atguigu.struts2.intercept

struts2 在拦截器进行注入(根据Action是否实现自定义接口)

例如:常常在Action中都需要获取当前登录的User,就需要获取Session,然后从Session获取当前登录的User,因为这些步骤都是重复操作,可以想办法在拦截器中进行实现,可以自定义一个接口,只要你的Action实现了这个接口,就在自定义拦截器中进行注入.即从拦截器中获取Session,然后设置进行注入. 简单的例子: 一个自定义接口,只要Action实现这个接口,就在拦截器中进行注入 package com.atguigu.surveypark.struts2; import com

CXF - 拦截器获取调用方法

没想到要弄这么一个东西. 起初只是想用interceptor记录一下webservice调用日志,后来却被要求在页面展示. 展示容易,但只是展示webservice的地址无法让用户从中明白什么. 那么我可以把url和具体说明作为一对键值,但是这对键值配置到哪里比较好? 文件? db? 我不想每增加一个方法就到别的地方再配置一次键值,写到注解也许是个不错的方法. 这就需要我在方法被调用后在获得对应的Method对象. 当然,实现这个效果的方法有很多种,这里主要讲如何在CXF Interceptor

谈谈 Struts2 的拦截器

套话 相信很多人都用过 Struts2 了,当然,对 Struts2 的原理也都比较了解.之前在一个项目中就已经用到了,当初的理解也仅仅是局限在应用的层面上,对于更深层次的原理.机制,了解的并不是很多.现在回过头来,再看 Struts2 的拦截器,相比之前的理解,又别有另一番滋味. 理解 Struts2 的拦截器,英文名为 Interceptor ,至于为什么中文要翻译为拦截器,我想这一定是有原因的,肯定不是一拍脑门,就叫拦截器了(它必定有什么含义在里边).从字面的意思,就是在发送请求的时候,有

Struts2之拦截器原理分析及使用-上

一.学习案例:通过在loginUI.jsp页面填写表单提交成功跳转到结果页面,查看控制台输出,初步了解拦截器工作流程. 二.案例分析: a)创建拦截器(MyInterceptor.java)实现Interceptor接口. 创建成功后,会实现三个方法:init(),destroy(),intercept(). 我们主要是使用intercept()方法,在此实现功能. init()会在服务器启动struts.xml加载时进行自动调用. destroy()会在服务器重启时调用. b)在struts.

Struts2默认拦截器栈及内建拦截器使用详解

Struts2内建拦截器介绍: alias (别名拦截器):允许参数在跨越多个请求时使用不同别名,该拦截器可将多个Action采用不同名字链接起来,然后用于处理同一信息. autowiring (自动装配拦截器):主要用于当Struts2和Spring整合时,Struts2可以使用自动装配的方式来访问Spring容器中的Bean. chain (链拦截器):构建一个Action链,使当前Action可以访问前一个Action的属性,一般和<result type="chain"

Struts2(四) 拦截器

一.struts2国际化 定义:同一款软件 可以为不同用户,提供不同语言界面 第一种 全局国际化信息文件 (所有Action都可以使用 ) ------- 最常用 1.properties文件可以在任何包中2. 需要在struts.xml 中配置全局信息文件位置 <!-- messages.properties 在src根目录 --> <constant name="struts.custom.i18n.resources" value="messages&