2016-03-10 5 views
2

Мне нужно нанести /Test на сервлет Test.java, а также /anything/Test на тот же сервлет. Я прочитал, что /*/Test не будет работать в web.xml, так как он не принимает регулярное выражение.Любой способ отображения Java-сервлета с использованием простого регулярного выражения?

Есть ли альтернативный способ сделать это с помощью фильтров? Я не могу использовать фильтр URL Tuckey из-за некоторой проблемы с блокировкой. Кроме того, мне нужно это «что угодно» и в моем сервлете. Я планировал обработать строку url для этого, если я смогу отобразить.

Например

/ProjectName/Test Если открытый тест Servlet

а также /ProjectName/xyz/Test Следует также открытый тест сервлет

Теперь хуг может быть что угодно. И я также хочу получить xyz в моем тестовом сервлете. Я планировал получить xyz в request.getRequestURI() и получить его из URL-адреса.

+0

Усовершенствуйте свой вопрос, непонятно, что вы просите! – Sandeep

+0

я сделал. Приверил пример –

+0

Надеюсь, [это] (http://stackoverflow.com/questions/18889681/mapping-servlet-in-web-xml) поможет вам. – Sandeep

ответ

0

Вам понадобится фильтр.

Этот базовый, который должен работать.

public void doFilter(ServletRequest request, ServletResponse response, 
     FilterChain chain) 
     throws IOException, ServletException { 

    HttpServletRequest req = (HttpServletRequest) request; 

    String url = req.getRequestURI(); 
    if (url.endsWith("test")) { 
     request.getServletContext().getNamedDispatcher("TestServlet").forward(request, response); 
    } else { 
     chain.doFilter(request, response); 
    } 
} 

Ключевые моменты. Я использую getNamedDispatcher, чтобы получить названный сервлет, который вы хотите использовать. Скорее всего, лучше не на самом деле отображать этот сервлет на шаблон вообще.

Используя getNamedDispatcher, он не повредит URL-адрес запроса в соответствующем сервлете.

+0

Exaclty, что я хотел. спасибо –