Embedded Jetty WebAppContext 中的通配符支持

wild card support in Embedded Jetty WebAppContext

我正在寻找嵌入式 Jetty WebAppContext contextPath 中的通配符支持,但无法解决任何问题。 我的购物网络应用程序有以下代码:

String path = "/shopping";
WebAppContext wac = new WebAppContext(WEBAPP_PATH, path);
contexts.addHandler(wac);

我希望如果访问 http://ip:port/shopping/任何东西,它应该加载我上面的 webapp。但事实并非如此。我也试过 path = "/shopping/*" 但它也没有用。
如果可能的话,这里的任何人都可以帮助我,或者我在这里做错了什么。

编辑:
我正在 Jetty 上部署一个 Web 应用程序(展平内容)并且可以使用 http://host:port/shopping 成功访问它。 为此,我创建了一个 WebAppContext(wac),其中 webappPath 指向资源文件夹,上下文路径为 /shopping。我将此 wac 添加到处理程序列表并将其附加到服务器 (Jetty Server)。
现在,我想要的是使用 http://host:port/shopping/ 访问此 Web 应用程序。在 url 购物后,无论我提供什么,我的同一个网络应用程序都应该被加载。

更新: 在此基础上,我在下面进行了尝试,但没有成功。

ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
context.setContextPath("/shopping");
ServletHolder staticHolder = new ServletHolder(new DefaultServlet());
staticHolder.setInitParameter("resourceBase", webAppPath);
staticHolder.setInitParameter("pathInfoOnly", "true");
context.addServlet(staticHolder, "/*");
context.setWelcomeFiles(new String[] { "index.html", "index.htm", "index.jsp" });
contexts.addHandler(context);

现在,如果我尝试 /shopping,它会起作用,但 /shopping/abc 不会。似乎通配符匹配不起作用。如果我使用 /home 而不是 /,/shopping/home 就可以了。任何人都可以在这里帮助我。
我的要求是为任何 /shopping/
url.

服务器 webAppPath

根据您的简短代码片段(实际上这里几乎没有什么可以使用的),您的 WebAppContext 没有声明 servlet。

不会调用 WebAppContext 中的任何内容来处理传入请求。

WebAppContext 分配给 context-path,其语法为 /<path>context-path 中不支持通配符。

您正在寻找的是 url-pattern 中的通配符支持,它仅适用于 Servlet 和过滤器。

这样做,创建一个 ShoppingAnythingServlet 并将其设置为 /*url-pattern,然后您将获得对该新 Servlet 的所有请求。

从该代码中,使用 HttpServletRequest.getPathInfo() 获取 /anything 是什么。

终于,我成功了。下面将为 /shopping 和 /shopping/anything/* 请求提供 webapp。

String path = "/shopping";   
WebAppContext wac = new WebAppContext(WEBAPP_PATH, path); 
contexts.addHandler(wac); 
wac.addServlet(new ServletHolder(new WebappServlet()), "/anything/*");

public class WebappServlet extends HttpServlet 
{    
    private static final long serialVersionUID = 1L;    
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException     {               
        request.getRequestDispatcher("/index.html").forward(request, response);  
    }  
}