2012-03-21 33 views
1

在我的Web應用程序中,我收到來自客戶端的請求。我在我的jsp頁面或servlet(曾經被調用過)中處理請求,並相應地轉發給其他jsp或servlet。

但在轉發之前,我想設置一些參數,然後用這些新參數轉發它。轉發時,舊參數不應存在。只有新的參數應該存在。如何才能做到這一點?
我可以從一個servlet轉發到jsp,反之亦然嗎?
請告訴如何完成上述工作?在jsp和servlets中設置參數

+0

你留下一個非常重要的要求了你的問題:你需要「前進」到一個新的領域(見Rakesh的回答評論)。 – BalusC 2012-03-21 14:37:13

回答

3

您可以根據需要和要求使用請求調度程序並重定向。

ServletContext sc = getServletContext(); 
RequestDispatcher rd = sc.getRequestDispatcher("url"); 

rd.forward(request,response); 

response.sendRedirect("url"); 

的sendRedirect()發送的報頭返回到瀏覽器,它包含將被重定向至該資源的名稱。所以這將是一個新請求來自瀏覽器的資源。

forward()操作發生在服務器內部,而沒有瀏覽器的知識。

3

是的,您可以將參數servlet轉發到jsp和jsp到servlet。

當您可以在請求中設置屬性時,它會在destination.means上丟失,您無法訪問第三個資源上的屬性。

request.setAttribute(attribute name,attribute value) 

你也可以在會話中做同樣的事情。

+0

在servlet中完成處理後,我想發送一個xml strnig到一個jsp頁面。我認爲只有重定向將起作用,因爲我已將其發送到新域。我的問題是我可以使用Post發送它。 – Ashwin 2012-03-21 08:25:08

+0

您需要在會話中設置xml數據,因爲只有會話在另一個虛擬機中存在。 – 2012-03-21 08:28:03

+0

拉克什,這種說法是完全錯誤的。 – BalusC 2012-03-21 14:38:20

0

使用

ServletRequest.removeAttribute(name of your old attribute) 
ServletRequest.setAttribute(name , value) 

設置屬性後,得到了使用

getRequestDispatcher(url) 

然後用向前RequestDispatcher的()方法

+0

@ChandraShekhar:我會嘗試並讓你知道。 – Ashwin 2012-03-21 08:10:37

+0

:我想刪除當前請求的參數。將刪除屬性刪除參數以及?參數和屬性是否相同。 – Ashwin 2012-03-21 14:43:51

+0

@Ashwin參數設置在web.xml文件中,我不認爲它們可以被刪除。那麼我不確定。順便說一句,爲什麼你想刪除參數? – 2012-03-21 14:50:27

0

你要轉發給JSP/Servlet使用RequestDisptcher。坐落在請求的請求屬性使用

request.setAttribute(name, value) 

進行參數設置轉發的JSP可以讀取使用

request.getAttribute(name) 

但是,你cannot hide the attribute existing before forward by default參數。您可以使用Request Wrapper來實現此目的。在轉發之前包裝請求覆蓋set和get屬性方法。

下面的代碼說明

RequestDisptcher dispatcher = req.getRequestDispatcher("url"); 
    HideExistingRequestWrapper requestWrapper = 
             new HideExistingRequestWrapper(request); 
    requestWrapper.setAtribute("forwarded", "forwarded value"); 
    dispatcher.forward(requestWrapper, response); 

這裏是封裝器實現的代碼:

class HideExistingRequestWrapper extends HttpServletRequestWrapper { 

      private Map localattributes = new HashMap(); 

      public HideExistingRequestWrapper (HttpServletRequest orignialRequest) { 
        super(orignialRequest); 
      } 

      public Object getAttribute(java.lang.String name) { 
       return localattributes.get(name); 
      } 

      public Object setAttribute(java.lang.String name, java.lang.String value) { 
       return localattributes.put(name, value); 
      } 

    } 
+0

在servlet中完成處理後,我想發送一個xml字符串到一個jsp頁面。我認爲只有重定向可以工作,因爲我已經將它發送到一個新的域名(或者我們可以通過郵寄發送重定向)。我的問題是如何使用Post發送它。 – Ashwin 2012-03-21 08:26:33

+0

是的,如果它不在服務器內,那麼它只能重定向。 – 2012-03-21 08:39:03

+0

無法在重定向中發佈?爲什麼? – Ashwin 2012-03-21 10:14:44

2

如果您有沒有用請求參數和你的jsp/servlet有沒有寫任何東西的響應,那麼我想可以使用重定向而不是轉發,因爲重定向會丟棄請求和參數。

當你重定向,你可以動態創建和設置查詢字符串,像這樣:

response.sendRedirect("url?a=" + var1 +"&b=" + var2); 

注意到,這將是一個GET方法的URL。如果url將被解析爲一個servlet,那麼可以實現doGet方法來調用doPost。

請注意,如果在jsp/servlet有寫在響應已經不錯了重定向將被忽略...