如何从 Vaadin 14 应用程序中访问 `ServletContext`?
How to access `ServletContext` from within a Vaadin 14 app?
我问的问题与问题相同,,但针对 Vaadin 14。
在Vaadin 7中,Vaadin提供了简单方便的调用:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
Vaadin 14 中的 VaadinServlet
上不再存在该特定调用。
➥ 在 Vaadin API 的其他地方是否有等效项?
我的最终目标是使用键值 "attribute" 集合来保留对我的应用程序范围对象的引用。
更新: 之一解释了这两种方法实际上都存在于 Vaadin 14 中,但其中一种未记录。
我确认我们确实可以调用:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
所以我在这里的其余答案已经过时了。我会留下我的答案作为好奇,而不是删除它。
这可能不是最好的方法,但它似乎对我有用。
你想要的 VaadinServletService
class, extending com.vaadin.flow.server.VaadinService
, offers the getCurrentServletRequest()
. That method returns a javax.servlet.http.HttpServletRequest
object. For there we can call javax.servlet.ServletRequest.getServletContext
to return the javax.servlet.ServletContext
。
ServletContext servletContext =
VaadinServletService // com.vaadin.flow.server.VaadinServletService
.getCurrentServletRequest() // Returns a javax.servlet.http.HttpServletRequest
.getServletContext() // Returns a `javax.servlet.ServletContext`.
;
从那里您可以使用您提到的键值 "attribute" 集合。查看 setAttribute
、getAttribute
和 removeAttribute
方法,其中 String
对象作为键,Object
作为值。
节省。
DataSource dataSource = … ;
VaadinServletService.getCurrentServletRequest().getServletContext().setAttribute( "javax.sql.DataSource" , dataSource ) ;
正在检索。 "attributes" 的键值集合将值保持为 Object
,因此我们必须转换回预期的 class/interface.
DataSource dataSource = (DataSource) VaadinServletService.getCurrentServletRequest().getServletContext().getAttribute( "javax.sql.DataSource" ) ;
方法仍然存在,但未记录
两种方法:
VaadinServlet.getCurrent()
➙ VaadinServlet
VaadinServlet::getServletContext()
➙javax.servlet.ServletContext
…Vaadin 14 中还有吗。
似乎第二种方法 VaadinServlet::getServletContext()
没有在 Javadocs 中列出,因为它继承自 javax.servlet.GenericServlet
并且 Javadoc 生成 运行 的方式不可以访问 class.
VaadinContext
对于从 ServletContext
访问属性的特殊情况,Vaadin 14 中引入了一个新的 VaadinContext
抽象。添加它是为了使框架内部可以访问上下文属性而无需绑定Servlet API。可以使用 VaadinService.getCurrent().getContext()
.
访问它
VaadinContext
可以通过 class:
来追踪属性
我问的问题与问题相同,
在Vaadin 7中,Vaadin提供了简单方便的调用:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
Vaadin 14 中的 VaadinServlet
上不再存在该特定调用。
➥ 在 Vaadin API 的其他地方是否有等效项?
我的最终目标是使用键值 "attribute" 集合来保留对我的应用程序范围对象的引用。
更新:
我确认我们确实可以调用:
ServletContext servletContext = VaadinServlet.getCurrent().getServletContext();
所以我在这里的其余答案已经过时了。我会留下我的答案作为好奇,而不是删除它。
这可能不是最好的方法,但它似乎对我有用。
你想要的 VaadinServletService
class, extending com.vaadin.flow.server.VaadinService
, offers the getCurrentServletRequest()
. That method returns a javax.servlet.http.HttpServletRequest
object. For there we can call javax.servlet.ServletRequest.getServletContext
to return the javax.servlet.ServletContext
。
ServletContext servletContext =
VaadinServletService // com.vaadin.flow.server.VaadinServletService
.getCurrentServletRequest() // Returns a javax.servlet.http.HttpServletRequest
.getServletContext() // Returns a `javax.servlet.ServletContext`.
;
从那里您可以使用您提到的键值 "attribute" 集合。查看 setAttribute
、getAttribute
和 removeAttribute
方法,其中 String
对象作为键,Object
作为值。
节省。
DataSource dataSource = … ;
VaadinServletService.getCurrentServletRequest().getServletContext().setAttribute( "javax.sql.DataSource" , dataSource ) ;
正在检索。 "attributes" 的键值集合将值保持为 Object
,因此我们必须转换回预期的 class/interface.
DataSource dataSource = (DataSource) VaadinServletService.getCurrentServletRequest().getServletContext().getAttribute( "javax.sql.DataSource" ) ;
方法仍然存在,但未记录
两种方法:
VaadinServlet.getCurrent()
➙VaadinServlet
VaadinServlet::getServletContext()
➙javax.servlet.ServletContext
…Vaadin 14 中还有吗。
似乎第二种方法 VaadinServlet::getServletContext()
没有在 Javadocs 中列出,因为它继承自 javax.servlet.GenericServlet
并且 Javadoc 生成 运行 的方式不可以访问 class.
VaadinContext
对于从 ServletContext
访问属性的特殊情况,Vaadin 14 中引入了一个新的 VaadinContext
抽象。添加它是为了使框架内部可以访问上下文属性而无需绑定Servlet API。可以使用 VaadinService.getCurrent().getContext()
.
VaadinContext
可以通过 class: