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

Bas*_*que 2 java servlets vaadin vaadin7

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

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

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

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

Bas*_*que 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也以相同的方式响应这些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中将配置信息放在Annotations中.

在该out.println( "<h1>Servlet Now at "…行之后,添加以下内容:

out.println("<p>Now: " + java.time.ZonedDateTime.now() + "</p>");
Run Code Online (Sandbox Code Playgroud)

这适用于Java 8及更高版本.对于早期版本的Java,请使用:

out.println("<p>Now: " + new java.util.Date() + "</p>");
Run Code Online (Sandbox Code Playgroud)

第3步 - 运行新Servlet

运行你的Vaadin应用程序.启动后,将"Now"添加到浏览器地址栏中的URL,然后按Return键.您应该看到一个包含当前日期时间的新页面.

所以这个:
http://localhost:8080/MyVaadin/
成为:
http://localhost:8080/MyVaadin/Now

如果您没有看到新页面,则需要刷新Tomcat部署.尝试以下任何操作:

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

新页面应如下所示:


Servlet现在位于/ MyVaadin

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


说明

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

urlPatterns定义了此servlet应响应的URL的扩展.显然,Vaadin servlet的模式/*遵循更具体的模式,在这种情况下/Now.因此/cat,/dog继续由Vaadin servlet处理(没有其他servlet映射到这些URL),同时/Now由"Now"servlet处理.

如果有人可以指出这种行为的文档,我想在Servlet规范的某个地方,请发表评论.