get jsp response as a string inside servlet

点点圈 提交于 2019-11-30 16:03:28

问题


Is there a way to get response from a jsp file as a String inside servlet. Something like

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

I'm using Servlet API 2.4 and java 1.4


回答1:


A better solution might be to use another template engine like freemarker or velocity, which are independent of the servlet api and more suited for text-based emails.

However, this is possible by wrapping the HttpServletResponse and overriding getWriter methods. The code below works for me on 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>


来源:https://stackoverflow.com/questions/13721238/get-jsp-response-as-a-string-inside-servlet

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!