嵌入式Jetty WebAppContext中的通配符支持

时间:2019-01-14 06:08:37

标签: java jetty embedded-jetty

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

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

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

编辑:
我正在Jetty上部署一个webapp(扁平化内容),并且可以使用http://host:port/shopping成功访问它。 为实现此目的,我创建了一个WebappContext(wac),并将webappPath设置为/ shopping到资源文件夹和上下文路径。我将此wac添加到处理程序列表,并将其附加到服务器(Jetty Server)。
现在,我要使用http://host:port/shopping/访问此Web应用程序。使用url购物后提供的任何内容,都应加载相同的webapp。

2 个答案:

答案 0 :(得分:0)

根据您的短代码段(实际上,这里几乎没有任何内容可使用),您的WebAppContext没有声明任何servlet。

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

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

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

执行此操作,创建一个ShoppingAnythingServlet,并将其设置为url-pattern的{​​{1}},然后您将收到对该新Servlet的所有请求。

在该代码中,使用/*来获取 /任何内容

答案 1 :(得分:0)

最后,我开始工作了。下面将为/ 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);  
    }  
}