我在Jetty中有以下代码:
ServletContextHandler contextHandler = new ServletContextHandler(ServletContextHandler.SESSIONS);
contextHandler.setContextPath("/a");
ServletHolder holder = new ServletHolder(MyServlet.class);
contextHandler.addServlet(holder, "/b/*");
"/a"
调用setContextPath
和"/b/*"
调用addServlet
之间有什么区别?是否将这些路径连接起来以决定MyServlet
将要提供哪些请求?
此外,是否可以将servlet与特定的文件扩展名相关联?即通过查看“endsWith
”部分,可以说是一个URI,因此调度结束的URI,例如, “.xsd”到特定的Servlet?或者完全根据“startsWith
”逻辑进行调度?
答案 0 :(得分:3)
它应该基本符合servlet specification,其中URL由http://host:port/<context-root>/<servlet-path-spec>
组成,其中Context根由setContextPath
定义,Servlet路径规范由第二个参数定义addServlet
。因此,示例中的servlet将提供以http://host:port/a/b/
开头的所有URL。
Servlet路径规范还允许定义文件扩展名的映射,在您的示例中使用符号“* .xsd”,请参阅链接规范中的第12.2节。