是否可以通过以下方式完全启动 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...)
是否可以通过以下方式完全启动 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...)
示例项目: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();
}
}
我是怎么做到的(嵌入 SpringMVC + Jetty,没有 web.xml 没有战争文件):
使用 Spring@WebAppConfiguration
引导您WebApplicationContext
的MockServletContext
,
然后只需new DispatcherServlet(WebApplicationContext)
通过 Jetty 的 ServletContextHandler/ServletHolder 机制注册您的。简单的!
可以使用不需要 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 类似的解决方案。