【问题标题】:Servlets to run alongside a Vaadin 7 app?Servlet 与 Vaadin 7 应用程序一起运行?
【发布时间】:2014-03-15 04:47:56
【问题描述】:

除了我漂亮的 Vaadin 7.1 Web 应用程序之外,我还想添加一些普通的 servlet。

这些其他超级简单的 servlet 向它们的客户提供简单的文本片段。想象一个返回“2014-03-02T04:05:00Z”的 CurrentDateTime servlet 和一个返回“22C”的 CurrentTemp servlet。

为什么要将更多 servlet 与 Vaadin 应用程序捆绑在一起?

  • 共享资源
    这些简单的 servlet 与 Vaadin 主应用程序共享一些资源(数据、数据库连接等)。所以我想在同一个 .war 文件中一起开发、打包和部署它们。
  • 正在工作的 Vaadin 项目
    我无法弄清楚如何在没有所有 Java EE crud 的情况下在 NetBeans 8(测试版)中创建一个简单的 Servlet-API-only Tomcat 兼容的 Web 应用程序项目。在Vaadin Plugin For NetBeans 的帮助下,我的 Vaadin 应用程序已启动并运行,因此我很乐意利用这个基于 NetBeans Maven 的项目。

【问题讨论】:

  • 在 Netbeans 中只需创建一个“Java WEB”应用程序,然后您就可以删除所有 .jsp 文件。但你也可以直接将你的 servlet 添加到 vaadin 项目中
  • @AndréSchild André,这可能比这更容易。看我的回答。

标签: java servlets vaadin vaadin7


【解决方案1】:

只需添加一个 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 Projects 面板中,上下文+单击Source Packages。选择New > Servlet。按照向导。将新的 servlet 命名为“Now”。

不要选中Add information to deployment descriptor (web.xml)。您可能可以打开它,但现在在现代 Java 中,我们可以将配置信息放在 Java 源代码的 Annotations 中,而不是 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 中的 Build Project 按钮(锤子图标)。 (为我工作)
  • 单击 NetBeans 中的 Clean And Build Project 按钮(锤子和扫帚图标)。
  • 在 NetBeans 的 Services 面板上,在 Servers > Tomcat(或其他)> /MyVaadin,上下文+单击以选择 Undeploy

新页面应如下所示:


Servlet 现在位于 /MyVaadin

现在:2014-03-17T13:58:19.916-07:00[美国/洛杉矶]


说明

检查在您的Now servlet 上放置的注释 NetBeans:
@WebServlet( name = "Now", urlPatterns = { "/Now" } )

urlPatterns 定义了该 servlet 应响应的 URL 的扩展。显然,Vaadin servlet 的 /* 模式遵循更具体的模式,在本例中为 /Now。所以/cat/dog 继续由Vaadin servlet 处理(假设没有其他servlet 映射到这些URL),而/Now 由“Now” servlet 处理。

如果有人可以指出此行为的文档,我想在 Servlet spec 的某处,请发表评论。

【讨论】:

    猜你喜欢
    • 2022-06-17
    • 1970-01-01
    • 2018-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-05-23
    • 2018-05-26
    • 2017-06-29
    • 1970-01-01
    相关资源
    最近更新 更多