从Spring控制器获取ATG会话范围的核心



我一直在努力查看Spring控制器中的ATG配置文件。

一开始,我认为通过阅读本文,通过这样定义,可以从spring控制器中获得atg配置文件。

<bean name="/Profile" class="atg.nucleus.spring.NucleusResolverUtil"
    factory-method="resolveName" singleton="false">
  <constructor-arg value="/atg/userprofiling/Profile"/>
</bean>

但是,我查看了另一个atg文档,发现如果不通过atg DAF管道,那么像/atg/userprofiling/Profile这样的会话范围的neclues就不可用。

注意:当您将自己的servlet添加到servlet管道中时,请记住请注意,在SessionServlet定位或创建它需要访问会话对象的管道,请确保servlet出现在SessionServlet之后的管道中。

因此,我尝试为spring-servlet设置PageFilter,如下所示。

<!--  ATG Services -->
<!--  any request starting with /services must be through ATG DAF pipe lining  -->
<filter-mapping>
    <filter-name>PageFilter</filter-name>
    <url-pattern>/services/*</url-pattern>
</filter-mapping>
<!--  The following can be annotated, but we need to upgrade to servlet 3 -->
<servlet>
   <servlet-name>HelloService</servlet-name>
   <servlet-class>com.my.services.HelloService</servlet-class>
</servlet>
<servlet-mapping>
   <servlet-name>HelloService</servlet-name>
   <url-pattern>/services/hello</url-pattern>
</servlet-mapping>    

然而,它失败了。原因是弹簧Controller不是Servlet,因此它不能处于ATG daf管道的末尾。

如果我使用简单的HttpServletDynamoServlet,我可以访问用户配置文件。

然而,我确实需要使用Spring Framework,因为我的公司想要使用它。另一个原因是我们使用的是servlet 2.3,我真的很想使用Spring注释。

问题是:;

  1. 有没有一种方法可以在不经过DAF管道的情况下从Spring控制器获得atg会话范围的necleus?

  2. 像JSP页面一样,有没有一种方法可以在ATG daf流水线的末尾设置一个spring控制器?

在这里我发布了我发现的解决方案

  1. 有没有一种方法可以在不经过DAF管道的情况下从Spring控制器获得atg会话范围的necleus?

    没有。我们需要通过ATG DAF流水线来获得会话范围的核心。

  2. 像JSP页面一样,有没有一种方法可以在ATG daf流水线的末尾设置一个spring控制器?

    是的!!!,除了现有的PageFilter映射之外,我们还可以让Spring DispatcherServlet位于ATG DAF管道的末尾,而不是直接的servlet映射。

以下是我的web.xml

.... 
<filter>
    <filter-name>PageFilter</filter-name>
    <filter-class>atg.filter.dspjsp.PageFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PageFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>PageFilter</filter-name>
    <url-pattern>/spring/*</url-pattern>
</filter-mapping>
....
<!-- Use spring DispatcherServlet with annotations i.e @Controller, etc -->
<servlet>
   <servlet-name>spring</servlet-name>
   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
   <servlet-name>spring</servlet-name>
   <url-pattern>/spring/*</url-pattern>
</servlet-mapping>

这可能不是一个理想的答案,但至少,它是有效的。

在应用程序范围的ApplicationContext中使用工厂方法并不总是按预期工作。

您是否考虑过使用Delivery Cube通用组件解析程序类?

https://github.com/deliverycube/deliverycube-common

相关内容

  • 没有找到相关文章

最新更新