2011-08-26 46 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(一個或多個)

相關問題