如何将渲染的jsp视图(html)作为json字段返回?

问题描述 投票:0回答:2

我想做异步分页,即浏览器对 Spring 控制器进行 Ajax 调用,该控制器将返回由分页控制数据(当前页面、总页数)和包含 html 内容的字段组成的 json。是否可以从 jsp 视图渲染 html 并将其作为字段之一放入 json 响应中?

java spring spring-mvc
2个回答
1
投票

看一下 MVC 流程:

enter image description here

如您所见,JSP 生成将由

View Template
完成,准备好的 HTML 将由
Front Controller
返回到浏览器(Spring 中为
Dispatcher Servlet
)。

这就是为什么无法将 Html 添加为 JSON 响应的一部分。

实际上JSP并不是SPA应用和异步页面重新加载的最佳解决方案。


0
投票

是的,实际上,这是可以做到的,而且我已经这样做很多年了。 这有点棘手,但其想法是将渲染的响应吞入字符串缓冲区,然后将字符串缓冲区的内容放入 JSON 响应中。 不幸的是,我无法将完整的答案放在这里,因为它有很多代码。 您可以私信我获取代码,或者尝试按照以下指示自行解决。

在 Google 上搜索 Direct Web Remoting 项目中的“

SwallowingHttpServletResponse
”。 该类是
HttpServletResponse
的子类,并将呈现的 JSP 模板写入内部缓冲区,而不是写入 servlet 的正常输出流。

首先,您获取

RequestDispatcher
(
HttpServletRequest.getRequestDispatcher()
) 的实例,并调用其
include()
方法,将其传递给 StringWriter 实例的
SwallowingHttpServletResponse
实例。 对
include()
的调用会调用
JspServlet
并让它呈现 JSP。 对
include()
的调用完成后,呈现的 JSP 内容将位于前面提到的 StringWriter 内部。 然后,您可以在 StringWriter 上调用
getBuffer().toString()
来获取生成的 HTML 并将其放入 JSON 结构中。

总共,您将需要 3 个类:

SwallowingHttpServletResponse
WriterOutputStream
(它是
ServletOutputStream
的子类)和
InternalJSPRenderer
(它实现了 Spring 的
ServletContextAware
)。 后两个需要您自己编写,第一个需要替换其导入语句(将
javax.servlet
替换为
jakarta.servlet
)。

希望有帮助🙏

© www.soinside.com 2019 - 2024. All rights reserved.