是否可以使用嵌入式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方法。
答案 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.