2013-01-18 50 views
0

一種簡單的問題,但它讓我陷入困境。我想從一個JSP中執行一個servlet,所以我試圖像下面這樣:如何從JSP中的scriptlet向servlet發送請求

<% 
    //Fetch server name port from request 
    //Fetch email_addr from DB request 
        * 
        * 
        * 
    //Forward request to servlet sendWelcomeMsg 
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/sendWelcomeMsg? 
     recipient=" + email_addr + 
     "&contentServerName=" + request.getServerName() + 
     "&contentServerPort=" + request.getServerPort()); 
    rd.forward(request, response); 
%> 

上述種類的作品,因爲如果我手動刷新頁面,該頁面的其餘部分被渲染,但只如果我做了刷新。所以,我的問題是,

  1. 有沒有更好的方式來做到這一點,而不需要重寫我的JSP?
  2. 失敗1.如何從scriptlet內以編程方式刷新頁面?

回答

0

我決定在頁面中添加一個表單,讓用戶可以隨意調用servlet(servlet發送歡迎消息,用戶可能想要發送幾個測試)。

0

從JSP轉發到Servlet是不正常的。它應該是相反的。否則,這個servlet完全接管了響應處理。在輪到JSP時,您可能會在servet日誌中看到IllegalStateException錯誤。

但是,您可以包括一個servlet在JSP輸出(注意,有問題的servlet可以和不應修改響應頭):

rd.include(request, response); 

不過,這不是通常的做法。如果您打算在將結果呈現在JSP中之前對GET請求執行業務任務,那麼您需要將該任務放在servlet的doGet()中,然後讓它轉發到JSP。請求首先應該打開控制器,通常是一個servlet,然後轉發到視圖,通常是JSP。你可以在our servlets wiki page找到一個例子。

相關問題