【问题标题】:get jsp response as a string inside servlet将 jsp 响应作为 servlet 中的字符串获取
【发布时间】:2012-12-05 10:35:58
【问题描述】:

有没有办法从 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

【问题讨论】:

  • 你为什么要这样做?
  • 请清楚了解,引入 JSP 以生成请求,servlet 充当控制器来满足该请求并发送回响应,您究竟需要 JSP 提供什么?
  • 我有一个显示计算结果的 JSP 页面,同样的结果应该发送(通过电子邮件)给用户
  • 您将结果作为操作提交给 servlet,无论是通过 ajax,然后在发送邮件时执行必要的操作
  • 您可以使用java.net.URLjava.net.URLConnection 类来请求网络资源。

标签: java jsp servlets java1.4


【解决方案1】:

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

但是,这可以通过包装 HttpServletResponse 并覆盖 getWriter 方法来实现。下面的代码适用于 glassfish。

小服务程序:

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>

【讨论】:

  • 测试过了,responseWrapper.toString();返回空字符串;
  • 但这将完成工作link感谢您的想法!
  • @lolotron:我修改了代码并在 glassfish 服务器上进行了测试。不知道为什么以前使用 OutputStream 的代码不起作用。
  • 如果jsp页面包含一些中文(UTF-8)字符怎么办。 responseWrapper 不会得到那些汉字,而是读作垃圾,我们怎样才能摆脱它?
  • @uday:您可能想将此作为一个单独的问题提出并包含代码,以便其他人可以重现该问题。这样一来,得到答案的机会就会高得多。
猜你喜欢
  • 2013-09-12
  • 2014-05-27
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 2014-08-09
  • 2011-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多