在我的 Vaadin 7 网络应用程序中提供静态网页?
Serve a static web page within my Vaadin 7 web app?
如何让我的 Vaadin 7 应用程序为存储在我的 Vaadin 7 应用程序中的静态页面(.html
文件)提供服务?
场景:我想偶尔生成一个更新版本的静态网页。例如,当用户在我的 Vaadin 应用程序中完成输入数据时,该应用程序会生成一份报告,其中的内容写入 report.html
文件。此报告的初始版本存储在我的 Vaadin 项目的 Web Pages
文件夹中,旁边还有 WEB-INF
、VAADIN
和 META-INF
文件夹。
如何让网络服务器为 report.html
页面提供服务?
就我而言,我在开发和生产中都使用 Tomcat 8 到 运行 我的 Web 应用程序。但肯定有一种非Tomcat特定的方式来提供该页面。
我知道如何使用 BrowserWindowOpener
class.
打开第二个浏览器 window
Button button = new Button ( "Show Report" );
BrowserWindowOpener browserWindowOpener = new BrowserWindowOpener ( new ExternalResource ( urlStringGoesHere ) );
browserWindowOpener.extend ( button );
虽然 运行在 Safari 浏览器中从 NetBeans 8.1 安装我的 Vaadin 7.6.4 应用程序,但 URL 是 http://localhost:8080/AwesomeApp-ui/
。所以我尝试将 urlStringGoesHere
硬编码为 http://localhost:8080/AwesomeApp-ui/report.html
。但是新的 window 显示我的 Vaadin 应用程序的 UI 而不是显示静态报告页面。
在我的 Vaadin 应用程序中存储静态页面然后根据用户需要显示的正确方法是什么?
Vaadin 在您将其设置为侦听的 URL 处处理请求。您的应用似乎配置为处理其网络上下文中的所有 URL。这意味着您可能有一个类似于此的 servlet 映射:
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
注意将 vaadin servlet 映射到所有 URL 匹配模式 /*
的部分。
如果您使用的是新的 Servlet 3.0 API,则不需要在 web.xml 文件中定义您的 servlet 映射,您甚至可能没有 web.xml根本。在这种情况下,搜索 VaadinServlet
的子 class 并查看 class 的注释,可以通过这些注释给出与 web.xml 中相同的元数据。请参阅 Vaadin 文档中的 Deploying an Application 章节。
您可能希望将 Vaadin Servlet 的映射更改为如下内容:
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/VAADIN/*</url-pattern>
<url-pattern>/</url-pattern>
</servlet-mapping>
现在,包罗万象的 URL /*
不再分配给 Vaadin Servlet,因此您可以随意将其分配给另一个 servlet您的选择或让默认的 servlet 从您的静态 Web 资源文件夹提供静态资源。如果您计划提供动态资源,我建议您创建一个 servlet。
如何让我的 Vaadin 7 应用程序为存储在我的 Vaadin 7 应用程序中的静态页面(.html
文件)提供服务?
场景:我想偶尔生成一个更新版本的静态网页。例如,当用户在我的 Vaadin 应用程序中完成输入数据时,该应用程序会生成一份报告,其中的内容写入 report.html
文件。此报告的初始版本存储在我的 Vaadin 项目的 Web Pages
文件夹中,旁边还有 WEB-INF
、VAADIN
和 META-INF
文件夹。
如何让网络服务器为 report.html
页面提供服务?
就我而言,我在开发和生产中都使用 Tomcat 8 到 运行 我的 Web 应用程序。但肯定有一种非Tomcat特定的方式来提供该页面。
我知道如何使用 BrowserWindowOpener
class.
Button button = new Button ( "Show Report" );
BrowserWindowOpener browserWindowOpener = new BrowserWindowOpener ( new ExternalResource ( urlStringGoesHere ) );
browserWindowOpener.extend ( button );
虽然 运行在 Safari 浏览器中从 NetBeans 8.1 安装我的 Vaadin 7.6.4 应用程序,但 URL 是 http://localhost:8080/AwesomeApp-ui/
。所以我尝试将 urlStringGoesHere
硬编码为 http://localhost:8080/AwesomeApp-ui/report.html
。但是新的 window 显示我的 Vaadin 应用程序的 UI 而不是显示静态报告页面。
在我的 Vaadin 应用程序中存储静态页面然后根据用户需要显示的正确方法是什么?
Vaadin 在您将其设置为侦听的 URL 处处理请求。您的应用似乎配置为处理其网络上下文中的所有 URL。这意味着您可能有一个类似于此的 servlet 映射:
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
注意将 vaadin servlet 映射到所有 URL 匹配模式 /*
的部分。
如果您使用的是新的 Servlet 3.0 API,则不需要在 web.xml 文件中定义您的 servlet 映射,您甚至可能没有 web.xml根本。在这种情况下,搜索 VaadinServlet
的子 class 并查看 class 的注释,可以通过这些注释给出与 web.xml 中相同的元数据。请参阅 Vaadin 文档中的 Deploying an Application 章节。
您可能希望将 Vaadin Servlet 的映射更改为如下内容:
<servlet-mapping>
<servlet-name>Vaadin Application Servlet</servlet-name>
<url-pattern>/VAADIN/*</url-pattern>
<url-pattern>/</url-pattern>
</servlet-mapping>
现在,包罗万象的 URL /*
不再分配给 Vaadin Servlet,因此您可以随意将其分配给另一个 servlet您的选择或让默认的 servlet 从您的静态 Web 资源文件夹提供静态资源。如果您计划提供动态资源,我建议您创建一个 servlet。