Как проверить, является ли запрошенный URL-адрес сервлетом (в фильтре)? - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть фильтр, который отображается на все запросы:

@WebFilter({ "/*" })

Я использую этот фильтр для сопоставления URL-адресов, чтобы я мог иметь тщетные URL-адреса для своих jsps и для обработки 404-х, однако это также означает, что мне нужно вручную добавлять сервлеты для обычной обработки цепочки запросов:

String requri = ((HttpServletRequest) request).getRequestURI(); //get requested url
String page = "";

if(requri.equals("/contact/") || requri.equals("/contact"))
   page = "contact.jsp";

else if(requri.equals("/about/") || requri.equals("/about"))
   page = "about.jsp";

else if(requri.equals("/SomeServlet"))
   chain.doFilter(request, response); //if requested url is a servlet, then carry on normally

//send requested url to servlet which will then forward user to the appropriate page
request.getRequestDispatcher("/GetPage?page="+page).forward(request, response);
return;

Все отлично работает.

Но есть ли способ получить список отображений URL для всех сервлетов? Так что мне не нужно вручную перечислять каждое отображение URL для сервлетов .. т.е.:

else if(requri.equals("/SomeServlet") || requri.equals("/AnotherServlet") || requri.equals("/SomeOtherServlet"))
   chain.doFilter(request, response); //if requested url is a servlet, then carry on normally

Идеал:

else if(isAServlet(requri))
   chain.doFilter(request, response); //if requested url is a servlet, then carry on normally

1 Ответ

0 голосов
/ 14 ноября 2018

Если вы находитесь в JEE> = 7 JEE, то есть ServletContext.getServletRegistrations().Возвращает карту из имен сервлетов к ServletRegistration объектам.У них есть метод getMappings(), который возвращает вам сопоставления URL для этого сервлета.Вам, вероятно, придется немного их обработать, например, применить правила отображения URL сервлета вручную, чтобы увидеть, какой сервлет, если таковой имеется, будет вызван.

...