2014-01-06 3 views
0

Если у меня есть два сервлета:Как перенаправить с одного сервлета на другой, используя сложное перенаправление?

@WebServlet (urlPatterns = {"/s1"}) 
public class Servlet1 extends HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 

     Map<String, Integer> map = new HashMap<String, Integer>(); 
     map.put("A", 100); 
     map.put("B", 200); 
     map.put("C", 300); 

     req.setAttribute("map", map); 
     getServletContext().getRequestDispatcher("Servlet2").forward(req, resp); 
    } 
} 

public class Servlet2 extends HttpServlet { 
    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
    throws ServletException, IOException { 
     Map map = (Map) req.getAttribute("map"); 

     for (Object o : map.values()) { 
      System.out.println(o); 
     } 
    } 
} 

Как я могу сделать перенаправление между ними? И какой путь мне нужно использовать в методе getRequestDispatcher? И еще одно условие - Servlet2 должно быть без какого-либо отображения в аннотации или в web.xml.

+0

Картирование является обязательным для сервлета ... –

+0

Но мне нужен Servlet2 невидимый для пользователя. Он не может получить доступ к браузеру. Если я использую картографирование, пользователь может получить доступ к сервлету. – user3163426

+0

Вы уверены, что хотите сервлета вместо того, чтобы говорить JSP (который является своего рода сервлетом и не будет содержать никаких аннотаций или адресов, заданных в web.xml)? – Pshemo

ответ

3

Servlet2 должен быть без каких-либо сопоставлений в аннотации или в web.xml.

Тогда вы не можете использовать HttpServletRequest#getRequestDispatcher(String), который является управляемым контейнером методом, который проверяет эти сопоставления.

Это состояние смешно и не имеет никакого смысла. Если вы не собираетесь использовать контейнер Servlet, не делайте Servlet. Создайте класс обслуживания, который выполняет необходимые действия. Вам не нужно делать все Servlet.

Ваш единственный (смешной) вариант состоит в том, чтобы создать экземпляр Servlet2 и явно вызвать его метод doGet.

+2

+1 особенно для «смешной» части –

+0

Если мне нужно использовать сопоставление в Servlet2, возможно, я могу использовать Filter, чтобы отключить каждый возможный запрос для Servlet2? – user3163426

+0

@ user3163426 Что вы пытаетесь сделать с 'Servlet2'? Почему это должно быть «HttpServlet»? –

Смежные вопросы