我在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与特定文件扩展名相关联?即通过查看URI的“
endsWith
”部分,然后调度以URI结尾的URI。 “.xsd”到特定的Servlet?还是完全基于“startsWith
”逻辑进行调度? 最佳答案
它应基本上符合servlet specification,其中URL由http://host:port/<context-root>/<servlet-path-spec>
组成,其中上下文根由setContextPath
定义,而Servlet路径规范由addServlet
的第二个参数定义。因此,您的示例中的servlet将提供以http://host:port/a/b/
开头的所有URL。
Servlet路径规范还允许定义到文件扩展名的映射,示例中使用符号“* .xsd”,请参阅链接的规范中的12.2节。
关于java - Jetty::ServletContextHandler#setContextPath(..)以及如何将Servlet与特定文件扩展名关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19276717/