如何从 Vaadin 7 应用程序中访问 `ServletContext`?
How to access `ServletContext` from within a Vaadin 7 app?
如何从我的 Vaadin 7 应用程序访问当前 ServletContext
?
我想使用 ServletContext
对象的 setAttribute
, getAttribute
, removeAttribute
, and getAttributeNames
方法来管理我的 Vaadin 应用程序的一些全局状态。
此外,如果为此目的使用这些方法不适合 Vaadin 应用程序,请解释。
tl;博士
对于 Vaadin 7 和 8,以及 Vaadin Flow(版本 10+):
VaadinServlet.getCurrent().getServletContext()
VaadinServlet
VaadinServlet
class inherits a getServletContext
方法。
要获取 VaadinServlet
对象,请调用静态 class 方法 getCurrent
。
在您的 Vaadin 应用程序中的大部分位置,执行如下操作:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
注意事项
在后台线程中不起作用。在您启动的线程中,此命令 returns NULL
。如文件所示:
In other cases, (e.g. from background threads started in some other way), the current servlet is not automatically defined.
@WebListener
(ServletContextListener
)
顺便说一句,当 Web 应用程序在容器中部署(启动)时,您可能希望处理此类全局状态。
您可以使用 @WebListener
annotation on your class implementing the ServletContextListener
interface. Both methods of that interface, contextInitialized
and contextDestroyed
, are passed a ServletContextEvent
from which you can access the ServletContext
object by calling getServletContext
.
连接到 Vaadin 网络应用程序的部署
@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/filter 之前,此挂钩作为正在初始化的 Vaadin 应用程序的一部分被调用。在 contextInitialized
方法上引用文档:
Receives notification that the web application initialization process is starting.
All ServletContextListeners are notified of context initialization before any filters or servlets in the web application are initialized.
如何从我的 Vaadin 7 应用程序访问当前 ServletContext
?
我想使用 ServletContext
对象的 setAttribute
, getAttribute
, removeAttribute
, and getAttributeNames
方法来管理我的 Vaadin 应用程序的一些全局状态。
此外,如果为此目的使用这些方法不适合 Vaadin 应用程序,请解释。
tl;博士
对于 Vaadin 7 和 8,以及 Vaadin Flow(版本 10+):
VaadinServlet.getCurrent().getServletContext()
VaadinServlet
VaadinServlet
class inherits a getServletContext
方法。
要获取 VaadinServlet
对象,请调用静态 class 方法 getCurrent
。
在您的 Vaadin 应用程序中的大部分位置,执行如下操作:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
注意事项
在后台线程中不起作用。在您启动的线程中,此命令 returns NULL
。如文件所示:
In other cases, (e.g. from background threads started in some other way), the current servlet is not automatically defined.
@WebListener
(ServletContextListener
)
顺便说一句,当 Web 应用程序在容器中部署(启动)时,您可能希望处理此类全局状态。
您可以使用 @WebListener
annotation on your class implementing the ServletContextListener
interface. Both methods of that interface, contextInitialized
and contextDestroyed
, are passed a ServletContextEvent
from which you can access the ServletContext
object by calling getServletContext
.
@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/filter 之前,此挂钩作为正在初始化的 Vaadin 应用程序的一部分被调用。在 contextInitialized
方法上引用文档:
Receives notification that the web application initialization process is starting. All ServletContextListeners are notified of context initialization before any filters or servlets in the web application are initialized.