2011-08-26 37 views
1

是否可以使用嵌入式java代码添加servlet:Jetty:使用maven时在java中声明servlet而不是web.xml

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

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。您可能会检查是否存在使用实验性Jetty 8.x的maven-jetty-plugin的快照。

+0

不能等待稳定版本的maven + jetty + servlet 3.0! – tb189

3

在servlet的3.0 - 是的,无论Maven和码头的:

  • 使用ServletContext.addServlet(..)在您指定的servlet名称和它的类/实例/类名(3种重载方法)

  • 然后调用返回的ServletRegistrationaddMapping(..)映射它的url-pattern(一个或多个)

相关问题