подстановочная поддержка в Embedded Jetty WebAppContext - PullRequest
0 голосов
/ 14 января 2019

Я ищу поддержку подстановочных знаков в Embedded Jetty WebAppContext contextPath, но не смог сработать. У меня есть следующий код для моего покупателя:

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

Я хочу, чтобы при доступе http://ip:port/shopping/anything, он загружал мое веб-приложение выше. Но это не так. Я также пытался с path = "/ shopping / *", и он тоже не работал.
Может кто-нибудь здесь, пожалуйста, помогите мне, если это возможно или нет, или я делаю что-то здесь не так.

EDIT:
Я развертываю веб-приложение (сглаживаю содержимое) на Jetty и могу успешно получить к нему доступ, используя http://host:port/shopping. Чтобы добиться этого, я создал WebAppContext (wac) с webappPath для папки ресурсов и контекстного пути как / shopping. Я добавил этот wac в список обработчиков и прикрепил его к серверу (Jetty Server).
Теперь я хочу получить доступ к этому веб-приложению с помощью http://host:port/shopping/. Что бы я ни предоставил после покупки в URL, мое же веб-приложение должно быть загружено.

UPDATE: Далее, следуя этому, я попробовал ниже, но это не сработало.

ServletContextHandler context = new ServletContextHandler (ServletContextHandler.SESSIONS);
context.setContextPath ( "/ магазины");
ServletHolder staticHolder = новый ServletHolder (новый DefaultServlet ());
staticHolder.setInitParameter ("resourceBase", webAppPath);
staticHolder.setInitParameter ("pathInfoOnly", "true");
context.addServlet (staticHolder, "/ *");
context.setWelcomeFiles (new String [] {"index.html", "index.htm", "index.jsp"});
contexts.addHandler (контекст);

Теперь, если я попытаюсь / shopping, он работает, но / shopping / abc нет. Похоже, что подстановочный знак не работает. Если я использую / home вместо / , / shopping / home работает. Может кто-нибудь, пожалуйста, помогите мне здесь.
Мое требование - сервер weabAppPath для любого / shopping /
url.

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Наконец-то я все заработал. Ниже будет отображаться веб-приложение для запросов / покупки и / покупки / что угодно / *.

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);  
    }  
}
0 голосов
/ 14 января 2019

На основании вашего фрагмента короткого кода (на самом деле здесь практически не с чем работать) ваш WebAppContext не имеет объявленных сервлетов.

Ничего в этом WebAppContext не будет вызываться для обработки входящего запроса.

WebAppContext назначается для context-path, который имеет синтаксис /<path>, в context-path.

поддержка подстановочных знаков не поддерживается.

То, что вы ищете, - это подстановочный знак в url-pattern, который существует только для сервлетов и фильтров.

Сделайте это, создайте ShoppingAnythingServlet и установите для него url-pattern из /*, и тогда вы получите все запросы к этому новому сервлету.

Из этого кода используйте HttpServletRequest.getPathInfo(), чтобы получить, что это / что-нибудь .

...