2014-01-06 18 views
0

如果我有兩個servlet:如何使用棘手的重定向從一個servlet重定向到另一個?

@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

映射對於servlet是必需的... –

+0

但是我需要Servlet2對用戶不可見。它無法從瀏覽器訪問。如果我使用映射用戶可以訪問該servlet。 – user3163426

+0

您確定要使用Servlet而不是說讓JSP(這是一種servlet,並且不會在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'? –

相關問題