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

时间:2014-03-15 04:47:56

标签: java servlets vaadin vaadin7

除了我很好的Vaadin 7.1网络应用程序,我想添加一些普通的servlet。

这些其他超级简单的servlet为其客户提供简单的文本。想象一下 CurrentDateTime servlet返回" 2014-03-02T04:05:00Z"和 CurrentTemp servlet返回" 22C" servlet的。

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

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

1 个答案:

答案 0 :(得分:6)

只需添加一个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也以相同的方式响应这些网址:

  • 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网络应用程序网址的网址"。在这种情况下" MyVaadin"是基本的URL,所以Vaadin回应过去的任何事情," cat"," dog",或" Now"。

第2步 - 添加Servlet

在NetBeans 项目面板中,上下文+单击Source Packages。选择New> Servlet。按照向导。命名新的servlet"现在"。

保持未选中状态Add information to deployment descriptor (web.xml)。您可能可以启用它,但现在在现代Java中,我们可以在Java源代码而不是web.xml中将配置信息放在Annotations中。

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应用。一旦开始,添加&#34;现在&#34;到浏览器地址栏中的URL,然后按Return键。您应该看到一个包含当前日期时间的新页面。

这样:
http://localhost:8080/MyVaadin/
成为:http://localhost:8080/MyVaadin/Now

如果您没有看到新页面,则需要刷新Tomcat部署。尝试以下任何一种行动:

  • 单击NetBeans中的 Build Project 按钮(锤子图标)。 (适合我)
  • 单击NetBeans中的清理并生成项目按钮(锤子和扫帚图标)。
  • 在NetBeans的服务面板中,Servers&gt; Tomcat(或其他)&gt; /MyVaadin,上下文+单击以选择取消部署

新页面应如下所示:


Servlet现在位于/ MyVaadin

现在:2014-03-17T13:58:19.916-07:00 [America / Los_Angeles]


说明

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

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

如果有人可以在Servlet spec的某个地方指出这种行为的文档,请发表评论。