【问题标题】:How to get the ServletContext in Struts 2 factory classes如何在 Struts 2 工厂类中获取 ServletContext
【发布时间】:2017-07-30 13:25:06
【问题描述】:

在 Struts 2 工厂类中访问 ServletContext(例如 StrutsTextProviderFactory

我使用了以下代码:

public class CustomStrutsTextProviderFactory extends
        StrutsTextProviderFactory  implements ServletContextListener{


private static String myConfig;

@Override
protected TextProvider getTextProvider(Class clazz) {
   // I can read myConfig here !

}

@Override
    public void contextInitialized(ServletContextEvent event) {
        myconfig = event.getServletContext().getInitParameter("config");
        
    }
}

它有效,但我认为定义一个 static 属性并以这种方式设置它不是最好的方法。

有没有更好的办法?!

【问题讨论】:

  • 你为什么把它定义为静态变量?应该在没有静态修饰符的情况下工作......
  • 如果我从myConfig 中删除静态将是nullgetTextProvider 方法中。使其成为静态是我发现将此参数传递给getTextProvider 的唯一方法。 contextInitialized 在 servelt 启动期间被调用,SabaStrutsTextProviderFactory 在 struts 启动期间被调用。并且每次创建 CustomStrutsTextProviderFactory 的新实例时。

标签: java servlets struts2 factory servlet-3.1


【解决方案1】:

这不是最好的,而且是错误的,因为如果你尝试在 struts2 配置中使用这样的工厂,你可能会遇到问题。 servlet上下文是在struts2初始化之前独立启动的,所以不能使用需要启动框架的struts2 api。

如果您需要在启动 struts2 时初始化应用程序,最好的方法是在调度程序初始化事件上。检查this 回答您应该如何实现调度程序侦听器。

下面是监听dispatcher初始化事件时构造对象的顺序:

15:27:50  INFO (org.apache.struts2.spring.StrutsSpringObjectFactory:42) - ... initialized Struts-Spring integration successfully
!!! MyBean !!!
!!! init !!!
jul 18, 2013 3:27:51 PM org.apache.catalina.startup.HostConfig deployDirectory
!!! dispatcherInitialized !!!

【讨论】:

  • 我试图 implements DispatcherListener 但 1) 我无法在 dispatcherInitialized 中找到 ServletContext 2) 我的 dispatcherInitialized 永远不会被调用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-29
  • 2013-05-15
  • 2017-09-14
  • 1970-01-01
相关资源
最近更新 更多