没有WAR文件的Servlet 3.0?

时间:2013-04-09 05:30:39

标签: java tomcat web-applications jetty servlet-3.0

是否可以通过以下方式启动网络应用程序:

1)没有战争文件:

http://stephenh.github.io/2009/01/10/war-less-dev-with-jetty.html http://www.jamesward.com/2011/08/23/war-less-java-web-apps

2)没有web.xml(即Servlet-3.0)

3)从嵌入式Web容器(例如,Tomcat或Jetty ......)

4 个答案:

答案 0 :(得分:2)

示例项目:https://github.com/jetty-project/embedded-servlet-3.0

您仍然需要WEB-INF/web.xml,但it can be empty。这样就可以知道servlet支持级别和元数据完成标志。

示例:清空Servlet 3.0 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="false"
    version="3.0">
</web-app>

然后,您可以按照EmbedMe.java获取有关如何进行设置的示例。

public class EmbedMe {
    public static void main(String[] args) throws Exception {
        int port = 8080;
        Server server = new Server(port);

        String wardir = "target/sample-webapp-1-SNAPSHOT";

        WebAppContext context = new WebAppContext();
        context.setResourceBase(wardir);
        context.setDescriptor(wardir + "WEB-INF/web.xml");
        context.setConfigurations(new Configuration[] {
                new AnnotationConfiguration(), new WebXmlConfiguration(),
                new WebInfConfiguration(), new TagLibConfiguration(),
                new PlusConfiguration(), new MetaInfConfiguration(),
                new FragmentConfiguration(), new EnvConfiguration() });

        context.setContextPath("/");
        context.setParentLoaderPriority(true);
        server.setHandler(context);
        server.start();
        server.join();
    }
}

答案 1 :(得分:2)

我是怎么做的(嵌入式SpringMVC + Jetty,没有web.xml没有war文件):

使用Spring的@WebAppConfiguration来引导你的WebApplicationContext MockServletContext

然后只需通过Jetty的ServletContextHandler / ServletHolder机制注册您的new DispatcherServlet(WebApplicationContext)。简单!

答案 2 :(得分:0)

答案 3 :(得分:0)

可以使用不需要WAR或任何XML的Jetty实现嵌入式服务器。您只需指定带注释的类的位置,添加额外的类路径。

应该从主要名称Server.java命名此方法:

private static void startServer() throws Exception {
    final org.eclipse.jetty.server.Server server = new org.eclipse.jetty.server.Server(7070);
    final WebAppContext context = new WebAppContext("/", "/");
    context.setConfigurations(new Configuration[] { new AnnotationConfiguration(), new WebInfConfiguration() });
    context.setExtraClasspath("build/classes/main/com/example/servlet");
    server.setHandler(context);
    server.start();
    server.join();
}

我的src结构是:

-main
  -java
    -com.example
      -json
      -servlet
      -filter
      -util
      Server.java

我希望看到与Tomcat类似的解决方案。