我在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/

10-10 02:38