java - 从 JSP 生成 HTML

标签 java html jsp servlets

我熟悉的基本 servlet jsp 设置....

RequestDispatcher dispatcher = request.getRequestDispatcher(resourceA.jsp);

dispatcher.forward(request, response);

问题是,除了将回复发送回浏览器 (resourceA.jsp) 之外,我还需要创建 resourceB.jsp 的第二个 HTML 输出,女巫将通过电子邮件发送或用于创建 pdf 文档。

这不是每次都这样做,只是在特定条件下通过调用

dispatcher.forward(request, response);

我第二次得到 IllegalArgumentException

我只需要一种从 jsp 生成 HTML 的方法(基本上替换 ${par} 值)和 将 html 作为字符串返回,没有状态代码或标题,只有 html 和 A 与 B 无关,因此过滤器将不起作用。

------ 重播第一个答案 ----- 小评论 --- 无格式

我不明白为什么这会如此困难......

所有的镁都是为了将​​数据与 HTML 内容合并到

${par}
${par['key']}
<c:if test="${patBoolean}" >
<c:forEach var="pvar" varStatus="s_pvar" items="${parList}">

我什至创建了一个包装器来屏蔽 getOutputStream() 和 getWriter(),创建我自己的 PrintWriter

public class ResponseWrapper extends HttpServletResponseWrapper{
  private PrintWriter printWriter;

  public ResponseWrapper(HttpServletResponse response){
       super(response);
  }

  public ServletOutputStream getOutputStream() throws java.io.IOException{....}

  public PrintWriter getWriter() throws java.io.IOException {....}

}

正在获取 resourceB.jsp 的结果,但问题是 dispatcher.forward(request, response) 在原始 HttpServletResponse 中设置 isCommitted 一些商品。

最佳答案

很有可能。
是的,也许这不是正确的用例,也许只是一种解决方法,但它简单。谁在乎。

一旦你有了一个 HttpServletRequest 实例,你就可以很容易地构造一个模拟的 HttpServletResponse 来将 jsp 输出重定向到一个字符串。

你需要一个 StringWriter
为了获得 JSP 输出,您需要一个 StringWriter

StringWriter sw=new StringWriter();

包裹起来
JSP 解析器或其他东西需要 PrintWriter

PrintWriter pw=new PrintWriter(sw);

构造模拟响应
您无法轻松地重用现有的 HttpServletResponse,因此请构建您自己的。

HttpServletResponse res=new HttpServletResponse() {

        @Override
        public PrintWriter getWriter() throws IOException {
            // return your own writer!
            return pw;
        }

}

您还必须实现其他方法,但只需使用您的 IDE 的快速修复并保持默认即可。
生成它
something.jsp 应该是现有的。

request.getRequestDispatcher("/something.jsp").forward(request,res);

获取输出
这会将 JSP 输出打印到服务器控制台。

System.out.printf("{%s}",sw.toString());

继续真正的回应
使用 servlet,您应该继续处理真正的 HttpServletResponse,就像您之前没有生成 JSP 一样。而在 Spring 中,没有真正的 Response 需要关心。

直到现在我仍然无法模拟有效的请求和响应。但是有了一个 mock Response 就已经足以解决这个问题了。

关于java - 从 JSP 生成 HTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3339178/

相关文章:

html - 理解十六进制 html 颜色代码的直观方式?

html - 我如何用这个 HTML 代码解析我想要的内容?

jsp - Servlet/JSP 网络应用程序设计

java - 如何使用 struts <s :iterator> and <s:if> together?

html - 在 JSP 中预填充单选按钮

java - 让用户在扫描仪Java中仅输入整数

java - Jersey 2 中调用代理对象的包私有(private)方法的奇怪行为

java - 线程是否可以先通过安全发布获取对象,然后不安全地发布它?

Java 8 不兼容类型错误

html - Bootstrap 响应表消失