java - 在 Spring 中,如何从 HTTPServletResponse 对象获取 HTML 作为字符串?

标签 java spring spring-mvc jsonp

我想从 Controller 获取处理后的 JSP 的 HTML 内容。我正在使用 View 的 Tiles 实现。

在我的场景中,我想从 jsp 生成 HTML 并将其作为 JSONP 发送。

所以我需要从 Controller 获取生成的 html。

最佳答案

给你!

这对我来说非常有效:

@Service
public class CustomViewProcessor
{
    private static Logger m_log = LoggerFactory.getLogger(CustomViewProcessor.class);

    @Autowired
    @Qualifier("tilesViewResolver")
    private ViewResolver viewResolver;

    @Autowired
    @Qualifier("commonInterceptor")
    CommonInterceptor commonInterceptor;

    public String renderView(HttpServletRequest request, Model model, String viewName)
    {
        ModelAndView mav = new ModelAndView();
        mav.addAllObjects(model.asMap());
        mav.setViewName(viewName);
        commonInterceptor.updateRequest(mav, request);
        try
        {
            View view = viewResolver.resolveViewName(mav.getViewName(), request.getLocale());
            HttpServletResponse localResponse = new MyHttpServletResponseWrapper(new MockHttpServletResponse());

            view.render(mav.getModel(), request, localResponse);

            return localResponse.toString();
        }
        catch (Exception e)
        {
            return "";
        }
    }

    public boolean doesViewExist(HttpServletRequest request, String viewName)
    {
        try
        {
            if (viewResolver.resolveViewName(viewName, request.getLocale()) != null)
            {
                return true;
            }
        }
        catch (Exception e)
        {
            m_log.error(e.getMessage(), e);
        }

        return false;
    }

    static class MyHttpServletResponseWrapper extends HttpServletResponseWrapper
    {
        private StringWriter sw = new StringWriter();

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

        public PrintWriter getWriter() throws IOException
        {
            return new PrintWriter(sw);
        }

        public ServletOutputStream getOutputStream() throws IOException
        {
            throw new UnsupportedOperationException();
        }

        public String toString()
        {
            return sw.toString();
        }
    }
}

关于java - 在 Spring 中,如何从 HTTPServletResponse 对象获取 HTML 作为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18365694/

相关文章:

java - @XmlSeeAlso 替代方案

java - 触摸位置周围的半径

java - setImageResource() 问题 - 如何实现文件路径?

java - 使用 Guice 的构造函数注入(inject)

java - JSP 表达式语言中的数组文字?

java - 将 Spring Security 与 EJB 或 Spring 一起使用?

javascript - spring mvc ajax @ModelAttribute

java - hibernate 中的 GenerationType.AUTO 与 GenerationType.IDENTITY

java - configureDefaultServletHandling 是什么意思?

hibernate - Spring XML 配置到 Java 配置