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);
}
}
我正在寻找嵌入式 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.
根据您的简短代码片段(实际上这里几乎没有什么可以使用的),您的 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);
}
}