Jetty:使用maven时在java中声明servlet而不是web.xml

时间:2011-08-26 16:06:37

标签: java servlets maven jetty

是否可以使用嵌入式java代码添加servlet:

Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
server.setHandler(context);
context.getInitParams().put("useFileMappedBuffer", "false");
context.addServlet(new ServletHolder(new MyServlet()), "/myurl");
....
server.start();
server.join();

代替漫长的web.xml方式:

<servlet>
  <servlet-name>MyServlet</servlet-name>
  <servlet-class>package.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>MyServlet</servlet-name>
  <url-pattern>/myurl</url-pattern>
</servlet-mapping>

我知道这在非maven项目中是可行的,但看起来Maven Jetty插件需要这个web.xml方法。

2 个答案:

答案 0 :(得分:3)

在servlet 3.0中 - 是的,不管maven和jetty:

  • 使用ServletContext.addServlet(..)指定servlet名称及其类/实例/类名称(3个重载方法)

  • 然后在返回的addMapping(..)上调用ServletRegistration将其映射到url-pattern

答案 1 :(得分:2)

Servlet 3.0中,可以使用@WebServlet注释声明和映射servlet。 web.xml中没有配置,也没有样板Java代码。

@WebServlet("/myurl")
public class MyServlet extends HttpServlet { ... }

但是,Jetty(7.x)的当前版本仅支持Servlet 2.5。 Jetty 8.x目前正在开发中并支持Servlet 3.0。除非您可以使用Jetty 8.x或其他支持Servlet 3.0的servlet容器,否则您可能需要继续使用Web部署描述符来定义和映射servlet。

我相信maven-jetty-plugin目前只支持Jetty 7,因此可能需要找到你自己的web.xml。您可以查看是否有可用的maven-jetty-plugin的快照,它使用了实验性的Jetty 8.x.