2012-12-05 20 views
3

是否有方法從servlet中獲取作爲String的響應。喜歡的東西將jsp響應作爲servlet中的字符串使用

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String section1 = getResponseFromJSP(); 
    // do something else ... 
    sendMailToUser(section1); 
} 

我使用Servlet API的2.4和Java 1.4

+2

你爲什麼要這麼做? –

+0

您可以使用'java.net.URL'和'java.net.URLConnection'類來請求Web資源。 – adatapost

+0

@AVD不能,jsp不能公開訪問 – lolotron

回答

18

更好的解決辦法可能是使用另一種模板引擎FreeMarker的一樣或速度,這是獨立的Servlet API更適合文本基於電子郵件。

然而,這可以通過包裝HttpServletResponse和覆蓋getWriter方法來實現。下面的代碼適用於glassfish。

的Servlet:

public class TestServlet extends HttpServlet { 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     HttpServletResponseWrapper responseWrapper = new HttpServletResponseWrapper(response) { 
      private final StringWriter sw = new StringWriter(); 

      @Override 
      public PrintWriter getWriter() throws IOException { 
       return new PrintWriter(sw); 
      } 

      @Override 
      public String toString() { 
       return sw.toString(); 
      } 
     }; 
     request.getRequestDispatcher("test.jsp").include(request, responseWrapper); 
     String content = responseWrapper.toString(); 
     System.out.println("Output : " + content); 
     response.getWriter().write(content); 
    } 
} 

JSP:

<%@page contentType="text/html" pageEncoding="UTF-8"%> 
<!DOCTYPE html> 
<html> 
    <head> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
     <title>Hello world</title> 
    </head> 
    <body> 
     <h1><%= "Hello world from a JSP!" %></h1> 
    </body> 
</html> 
+0

測試過它,responseWrapper.toString();返回空字符串; – lolotron

+0

但這會做這項工作[鏈接](http://blog.valotas.com/2011/09/get-output-of-jsp-or-servlet-response.html) 感謝您的想法! – lolotron

+0

@lolotron:我修改了代碼並在glassfish服務器上進行了測試。不知道爲什麼以前的代碼使用OutputStream不起作用。 –

相關問題