java - Servlet 与 Vaadin 7 应用程序一起运行吗?

标签 java servlets vaadin vaadin7

除了我漂亮的 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/

相关文章:

java - "com.jacob.com.ComFailException: Can' 找不到绰号“为什么?

java - 在 Activity 之间传递参数不起作用

java - 运行程序以监视文件 infiteley

java - Servlet 返回一个空页面

java - 如何在 Vaadin 7 中点击保存按钮或分配事件

java - Java Iterable 的优点和缺点

java - 我不明白 web.xml 在使用 servlet 时如何工作/应该工作

java - 默认情况下将我的 JavaBean 的所有属性添加为 Vaadin 8 网格中的列?

java - 如何在CSS中设置背景图片?

java - 在 android 中处理视频(裁剪、叠加等)——如何?