代码之家  ›  专栏  ›  技术社区  ›  NumeroUno

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

  •  0
  • NumeroUno  · 技术社区  · 7 年前

    我正在寻找嵌入式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指向资源文件夹,context路径为/shopping。我将这个wac添加到处理程序列表中,并将其附加到服务器(Jetty server)。
    现在,我想要的是使用 http://host:port/shopping/ .无论我在url中购物后提供什么,我的同一个Web应用程序都应该被加载。

    更新: 接下来,我在下面做了尝试,但没有成功。

    ServletContextHandler上下文=新建 ServletContextHandler(ServletContextHandler.SESSIONS);
    上下文setContextPath(“/shopping”);
    ServletHolder staticHolder=new ServletHolder(new DefaultServlet());
    稳定器。setInitParameter(“resourceBase”,webAppPath);
    稳定器。InfoPathSetTrue参数;
    上下文addServlet(staticHolder,“/*”);
    上下文setWelcomeFiles(新字符串[]{“index.html”、“index.htm”、“index.jsp”});
    语境。addHandler(上下文);

    现在,如果我尝试/shopping,它可以工作,但/shopping/abc不行。通配符匹配似乎不起作用。如果我使用/home而不是/ ,/购物/家庭作业。谁能帮帮我吗。
    我的要求是在WeabAppath服务器上进行任何购物/
    网址。

    1 回复  |  直到 7 年前
        1
  •  1
  •   NumeroUno    7 年前

    终于,我成功了。下面将为/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);  
        }  
    }
    
        2
  •  0
  •   Joakim Erdfelt    7 年前

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

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

    WebAppContext被分配给 context-path ,其语法为 /<path> 中没有通配符支持 上下文路径 .

    您正在寻找的是一个应用程序中的通配符支持 url-pattern ,它仅适用于servlet和筛选器。

    这样做,创建一个 ShoppingAnythingServlet 并将其设置为 访问路径 属于 /* 然后,您将获得对新Servlet的所有请求。

    在该代码中,使用 HttpServletRequest.getPathInfo() 要得到什么 /随便什么