2012-12-05 16 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不起作用。 –

相关问题