代码之家  ›  专栏  ›  技术社区  ›  Basil Bourque

如何从Vaadin 14应用程序中访问“ServletContext”?

  •  0
  • Basil Bourque  · 技术社区  · 4 年前

    我问的和这个问题一样, How to access ServletContext from within a Vaadin 7 app?

    在Vaadin 7中,Vaadin提供了一个简单方便的调用:

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

    那个电话已经不在了 VaadinServlet 在瓦丁14号。

    我的最终目标是使用键值“attribute”集合来保留对我的应用程序范围对象的引用。

    1 回复  |  直到 4 年前
        1
  •  2
  •   Basil Bourque    4 年前

    方法仍然存在,但没有记录

    两种方法:

    似乎第二种方法, ,没有列在Javadocs中,因为它是从 javax.servlet.GenericServlet

        2
  •  1
  •   Basil Bourque    4 年前

    VaadinContext

    对于从 ServletContext ,有一个新的 VaadinContext VaadinService.getCurrent().getContext() .

    瓦丁语境 可以按类跟踪属性:

        3
  •  0
  •   Basil Bourque    4 年前

    更新:一个 Answers by Leif Åstrand 解释了这两种方法实际上都存在于Vaadin 14中,但其中一种是未记录的。

    我证实了我们确实可以称之为:

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

    所以我剩下的答案已经过时了。我将把我的答案留作好奇,而不是删掉它。


    这也许不是最好的方法,但似乎对我有用。

    这个 VaadinServletService 类,扩展 com.vaadin.flow.server.VaadinService ,提供 getCurrentServletRequest() . 该方法返回 javax.servlet.http.HttpServletRequest javax.servlet.ServletRequest.getServletContext 归还 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”的键值集合将值作为 对象

    DataSource dataSource = (DataSource) VaadinServletService.getCurrentServletRequest().getServletContext().getAttribute( "javax.sql.DataSource" ) ;