Struts 2:在工厂类中获取ServletContext

时间:2017-07-30 13:25:06

标签: java servlets struts2 servlet-3.1

访问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属性并以这种方式设置它并不是最好的方法。

有更好的方法吗?!

1 个答案:

答案 0 :(得分:1)

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

如果您需要在struts2启动时初始化您的应用程序,那么最佳方法是调度程序初始化事件。检查this如何实现调度员监听器。

以下是在侦听调度程序初始化事件时构造对象的顺序:

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 !!!