JSP中的Spring null应用程序上下文

时间:2011-11-08 19:17:45

标签: spring jsp spring-mvc

我试图在JSP页面中获取应用程序上下文。 我在JSP中有以下scriptlet。

       WebApplicationContext appCtx = WebApplicationContextUtils.getRequiredWebApplicationContext(config.getServletContext()); 
       MyClass myClass = (MyClass)(appCtx.getBean("myClass"));

使用此时,将为应用程序上下文抛出空指针异常。 我在这做错了什么? 我没有application-context.xml文件,因为我不需要一个。我有通常的dispatcher-servlet.xml和处理程序映射。

另外,作为补充信息: 我正在尝试访问这个“myClass”对象,该对象使用PropertyPlaceholderConfigurer注入,该对象从外部环境变量读取并注入“myClass”。有什么指针吗?

更新

我尝试按照建议使用“RequestContextUtils”,但现在发现“找不到WebApplicationContext:不在DispatcherServlet请求中”异常。 我试图访问bean的JSP是应用程序的入口点。 我的视图解析器看起来像这样,

    <bean id="viewResolver"
    class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix">
        <value>/WEB-INF/views/</value>
    </property>
    <property name="suffix">
        <value>.jsp</value>
    </property>
    <property name="exposedContextBeanNames">
        <value>myClass</value>
    </property>
   </bean> 

我尝试访问的JSP位于此“views”文件夹之外。请指教

1 个答案:

答案 0 :(得分:4)

WebApplicationContextUtils.getRequiredWebApplicationContext()返回与ContextLoaderListener相关联的应用程序上下文(即applicationContext.xml)。

要获取与DispatcherServlet相关联的上下文,您需要致电RequestContextUtils.getWebApplicationContext(request)

或者,您可以配置InternalResourceViewResolver以将bean作为属性公开。然后,您可以在${myClass}中访问JSP中的bean。您可以通过将exposeContextBeansAsAttributes设置为true来公开所有bean(我认为这会导致一些性能损失),或者明确列出要使用exposedContextBeanNames公开的bean。