4

是否可以通过以下方式完全启动 webapp:

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 -应用

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

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

4

4 回答 4

2

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

你仍然需要 a WEB-INF/web.xml,但它可以是空的。这样就可以知道 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();
    }
}
于 2013-04-09T13:16:07.660 回答
2

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

使用 Spring@WebAppConfiguration引导您WebApplicationContextMockServletContext,

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

于 2013-04-24T04:02:54.947 回答
1

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

应该从您可以命名的 main 调用此方法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 类似的解决方案。

于 2017-04-01T15:07:02.380 回答
0

请参阅BalusC的答案,了解仅使用 Java SE API 的 Java 中的简单 HTTP 服务器。该示例正在使用该类com.sun.net.httpserver.HttpServer

于 2013-04-09T06:03:40.757 回答