java 将jsp响应作为servlet内的字符串获取

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13721238/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-31 13:46:27  来源:igfitidea点击:

get jsp response as a string inside servlet

javajspservletsjava1.4

提问by Marko Vranjkovic

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

有没有办法从jsp文件中作为servlet内的字符串获取响应。就像是

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

我正在使用 Servlet API 2.4 和 java 1.4

回答by J?rn Horstmann

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.

更好的解决方案可能是使用另一个模板引擎,如 freemarker 或 Velocity,它们独立于 servlet api,更适合基于文本的电子邮件。

However, this is possible by wrapping the HttpServletResponseand overriding getWritermethods. The code below works for me on glassfish.

但是,这可以通过包装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:

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>