相关疑难解决方法(0)

有什么办法在tomcat中的不同应用程序之间共享会话状态?

我们希望将工作应用程序拆分为两个不同的.war文件,以便能够更新一个应用程序而不会影响另一个应用程序.每个webapp将具有不同的UI,不同的用户和不同的部署计划.

最简单的路径似乎是共享相同的会话,所以如果应用程序A设置session.setAttribute("foo", "bar")应用程序B将能够看到它.

有没有办法HttpSession在同一个Tomcat实例中共享两个应用程序的状态?

我们的应用程序运行在专用的Tomcat 5.5上,没有其他应用程序在同一个tomcat实例上运行,因此任何有关会话共享的安全问题都不是问题.我们正在运行多个Tomcat实例,但平衡器正在使用粘性会话.

如果不可能或者这次会话分享是一个非常糟糕的主意,请发表评论.

java session tomcat java-ee

51
推荐指数
5
解决办法
5万
查看次数

在没有请求的情况下从tomcat获取服务器端口号

是否有任何Tomcat API或配置可以告诉应用程序(可能在启动时),它在没有请求的情况下运行的端口是什么?

想象一下,有两个Web应用程序在同一个Tomcat中运行,其中一个需要从另一个调用Web服务.我们不希望请求离开Tomcat(如果您使用Apache服务器名称或绝对URL,请求将退出并再次返回,它可以转到任何实例)并返回.为此,我知道机器名称但无法获取端口号.我知道我可以硬编码这些信息,但我不想这样做,因为我希望我的war文件与应用服务器无关.

我知道如果我们有HTTPServletRequest,我们可以找到它

这仅适用于Tomcat 6,不适用于Tomcat 7

java tomcat application-server tomcat6 java-ee

31
推荐指数
3
解决办法
5万
查看次数

同一个tomcat的webapps之间的共享对象

我有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,如果重要的话)谢谢

java servlets web-applications tomcat6

5
推荐指数
1
解决办法
3432
查看次数