【问题标题】:How to access `ServletContext` from within a Vaadin 7 app?如何从 Vaadin 7 应用程序中访问“ServletContext”?
【发布时间】:2015-01-13 23:45:46
【问题描述】:

如何从我的 Vaadin 7 应用程序中访问当前的 ServletContext

我想使用 ServletContext 对象的 setAttributegetAttributeremoveAttributegetAttributeNames 方法来管理我的 Vaadin 应用程序的一些全局状态。

此外,如果将这些方法用于此目的不适合 Vaadin 应用程序,请解释。

【问题讨论】:

标签: servlets vaadin vaadin7


【解决方案1】:

tl;博士

对于 Vaadin 7 和 8,以及 Vaadin Flow(版本 10+):

VaadinServlet.getCurrent().getServletContext()

VaadinServlet

VaadinServlet 类继承了 getServletContext 方法。

要获取VaadinServlet对象,调用静态类方法getCurrent

在您的 Vaadin 应用程序中的大多数地方,执行以下操作:

ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();

CAVEAT
在后台线程中不起作用。在您启动的线程中,此命令返回 NULL。据记载:

在其他情况下(例如,从以其他方式启动的后台线程),当前的 servlet 不会自动定义。

@WebListener (ServletContextListener)

顺便说一句,当 Web 应用程序在容器中部署(启动)时,您可能希望处理这种全局状态。

您可以在实现ServletContextListener 接口的类上使用@WebListener 注释挂钩到您的Vaadin Web 应用程序的部署。该接口的两个方法contextInitializedcontextDestroyed 都传递了一个ServletContextEvent,您可以通过调用getServletContext 来访问ServletContext 对象。

@WebListener ( "Context listener for doing something or other." )
public class MyContextListener implements ServletContextListener
{

    // Vaadin app deploying/launching.
    @Override
    public void contextInitialized ( ServletContextEvent contextEvent )
    {
        ServletContext context = contextEvent.getServletContext();
        context.setAttribute( … ) ;
        // …
    }

    // Vaadin app un-deploying/shutting down.
    @Override
    public void contextDestroyed ( ServletContextEvent contextEvent )
    {
        ServletContext context = contextEvent.getServletContext();
        // …
    }

}

在执行 Vaadin servlet(或您的 Web 应用程序中的任何其他 servlet/过滤器)之前,此钩子会作为您的 Vaadin 应用程序初始化的一部分被调用。引用contextInitialized 方法的文档:

收到有关 Web 应用程序初始化过程正在启动的通知。 在 Web 应用程序中的任何过滤器或 servlet 初始化之前,所有 ServletContextListener 都会收到上下文初始化通知。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 2016-08-20
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    相关资源
    最近更新 更多