Jac*_*cob 8 java jetty embedded-jetty servlet-3.0
以下工作代码演示了将两个servlet包含到jetty的嵌入式实例中.
Server server = new Server(8080);
ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/");
context.addServlet(new ServletHolder(new Html()), "/html");
context.addServlet(new ServletHolder(new Iphone()), "/iphone");
server.setHandler(context);
server.start();
server.join();
Run Code Online (Sandbox Code Playgroud)
应如何改变,以便不使用url"/ iphone",而是使用servlet注释中的urlpatterns,即
@WebServlet(urlPatterns={"/json", "/iphone"})
public class Iphone extends HttpServlet {
....
}
Run Code Online (Sandbox Code Playgroud)
servlet位于服务器的类路径上,而不是打包在WAR中.
在Web应用程序中,使用注释的类只有在它们位于
WEB-INF/classes目录中时才会处理注释 ,或者如果它们打包在位于WEB-INF/lib应用程序内的jar文件中.Web应用程序部署描述符
metadata-complete在web-app元素上包含新的" "属性."metadata-complete"属性定义Web描述符是否完整,或者是否应在部署时检查jar文件的类文件是否有注释和Web片段.如果"metadata-complete"设置为"true",则部署工具必须忽略应用程序和Web片段的类文件中存在的任何servlet注释.如果未指定metadata-complete属性或将其设置为"false",则部署工具必须检查应用程序的类文件以进行注释,并扫描Web片段.
您可能需要查看打包WAR并使用具有更多功能的上下文WebAppContext.
或者,您可以尝试自己的注释扫描.形式的东西:
void registerServlets(ServletContextHandler context,
Class<? extends HttpServlet> type)
throws InstantiationException, IllegalAccessException,
InvocationTargetException, NoSuchMethodException {
WebServlet info = type.getAnnotation(WebServlet.class);
for (String pattern : info.urlPatterns()) {
HttpServlet servlet = type.getConstructor().newInstance();
context.addServlet(new ServletHolder(servlet), pattern);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2504 次 |
| 最近记录: |