除了我漂亮的 Vaadin 7.1 Web 应用程序之外,我还想添加一些简单的 servlet。
这些其他 super 简单的 servlet 向其客户端提供简单的文本片段。想象一个返回“2014-03-02T04:05:00Z”的 CurrentDateTime servlet 和一个返回“22C”servlet 的 CurrentTemp servlet。
为什么要将更多 servlet 与 Vaadin 应用程序捆绑在一起?
- 共享资源
这些简单的 servlet 与 Vaadin 主应用程序共享一些共同的资源(数据、数据库连接等)。因此,我想将它们一起开发、打包和部署,所有这些都在同一个 .war 文件中。 - 工作 Vaadin 项目
我无法弄清楚如何在 NetBeans 8(测试版)中创建一个简单的仅 Servlet-API 兼容 Tomcat 的 Web 应用程序项目,而不需要所有 Java EE 的琐事。我的 Vaadin 应用程序已在 Vaadin Plugin For NetBeans 的帮助下启动并运行。 ,所以我很高兴利用这个基于 NetBeans Maven 的项目。
最佳答案
只需添加一个 Servlet
要添加其他 servlet,只需添加它们即可。每个 servlet 都扩展了 Vaadin 使用的 URL。
第 1 步 - 构建 Vaadin 应用
首先使用 NetBeans 8 的 Vaadin 插件 1.1.1 创建一个新的 Vaadin 7.1 应用程序。验证其运行正常。
更新:Vaadin 8 可以完全由 Maven 驱动。无需 IDE 插件。
例如,假设我们正在运行此 Vaadin 应用程序:
http://www.Example.com/MyVaadin/
请注意,Vaadin 也以相同的方式响应这些 URL:
-
http://www.Example.com/MyVaadin/cat
-
http://www.Example.com/MyVaadin/dog
-
http://www.Example.com/MyVaadin/Now
Vaadin 应用程序会因 Vaadin 主类中此注释中的通配符星号而响应这些内容:
@WebServlet( value = "/*", asyncSupported = true )
斜杠和星号的意思是“处理任何扩展我们 Vaadin Web 应用程序 URL 的 URL”。在本例中,“MyVaadin”是基本 URL,因此 Vaadin 会响应任何过去的内容,无论是“cat”、“dog”还是“Now”。
第 2 步 – 添加 Servlet
在 NetBeans 项目 面板中,右键单击 Source Packages
。选择New
> Servlet
。按照向导操作。将新 servlet 命名为“Now”。
不选中Add information to deployment descriptor (web.xml)
。您可能可以打开它,但现在在现代 Java 中,我们可以将配置信息放在 Java 源代码的注释中,而不是 web.xml 中。
在out.println( "<h1>Servlet Now at "…
之后行,添加这一行:
out.println("<p>Now: " + java.time.ZonedDateTime.now() + "</p>");
适用于 Java 8然后。对于早期版本的 Java,请使用:
out.println("<p>Now: " + new java.util.Date() + "</p>");
第 3 步 - 运行新的 Servlet
运行您的 Vaadin 应用程序。启动后,将“Now”添加到浏览器地址栏中的 URL,然后按 Return 键。您应该会看到一个包含当前日期时间的新页面。
所以这个:
http://localhost:8080/MyVaadin/
变成:
http://localhost:8080/MyVaadin/Now
如果您没有看到新页面,则需要刷新 Tomcat 部署。尝试以下任一操作:
- 单击 NetBeans 中的“构建项目”按钮(锤子图标)。 (对我有用)
- 单击 NetBeans 中的清理并构建项目按钮(锤子和扫帚图标)。
- 在 NetBeans 的服务面板上,
Servers
>Tomcat
(或其他)>/MyVaadin
,上下文+单击选择取消部署。
新页面应如下所示:
<小时/>Servlet 现在位于/MyVaadin
现在:2014-03-17T13:58:19.916-07:00[美国/洛杉矶]
<小时/>说明
检查 NetBeans 放置在 Now
上的注释servlet:
@WebServlet( name = "Now", urlPatterns = { "/Now" } )
那个urlPatterns
定义此 servlet 应响应的 URL 扩展。显然 Vaadin servlet 的模式为 /*
遵循更具体的模式,在本例中 /Now
。所以/cat
和/dog
继续由 Vaadin servlet 处理(假设没有其他 servlet 映射到这些 URL),而 /Now
由“Now”servlet 处理。
如果有人可以指出此行为的文档,请在 Servlet spec 中的某个位置我想,请发表评论。
关于java - Servlet 与 Vaadin 7 应用程序一起运行吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22419667/