Tax*_*Noi 5 java servlets web-applications tomcat6
我有2个webapps在两个上下文中运行:c1,c2(都紧跟在root之后).我把一个startupListener放在c1中共享一个变量,另一个放在c2中来检索它.
我在c1中的startuplistener是:
public void contextInitialized(ServletContextEvent sce) {
HashMap <String,Object> database ;
//some code to init database
ServletContext context = sce.getServletContext().getContext("/c1");
if (context!=null)
{
context.setAttribute("crossContext", true);
context.setAttribute("cache", database);
}
}
Run Code Online (Sandbox Code Playgroud)
在c2应用程序中,它是这样的:
public void contextInitialized(ServletContextEvent sce) {
ServletContext context = sce.getServletContext().getContext("/c1");
HashMap<String,Object> database = (HashMap) context.getAttribute("cache");
}
Run Code Online (Sandbox Code Playgroud)
c2的startupListener中的上下文总是为null,我试过'/ c1','c1'.我错过了什么?(我正在使用tomcat6,如果重要的话)谢谢
小智 3
您需要设置 crossContext=true。来自 tomcat 文档:
如果您希望在此应用程序中调用 ServletContext.getContext() 来成功返回在此虚拟主机上运行的其他 Web 应用程序的请求调度程序,请设置为 true。在安全意识环境中设置为 false(默认值),以使 getContext() 始终返回 null。
http://tomcat.apache.org/tomcat-7.0-doc/config/context.html