spring mvc 是不是有 response.write 可以直接输出到浏览器?

Posted

技术标签:

【中文标题】spring mvc 是不是有 response.write 可以直接输出到浏览器?【英文标题】:Does spring mvc have response.write to output to the browser directly?spring mvc 是否有 response.write 可以直接输出到浏览器? 【发布时间】:2011-03-09 22:55:59 【问题描述】:

我正在使用带有 freetemplate 的 spring mvc。

在 asp.net 中,您可以使用 Response.Write("hello, world"); 直接写入浏览器

你可以在spring mvc中做到这一点吗?

【问题讨论】:

【参考方案1】:

如果您使用带注释的控制器(或者我相信没有注释的控制器......),您可以在控制器中使用方法参数HttpServletResponse 来获取输出流,然后写入屏幕 - 参见@ 987654321@

有关可在控制器/处理程序中使用的参数的更多信息,请参阅 http://static.springsource.org/spring/docs/2.5.x/reference/mvc.html(第 13.11.4 节)

【讨论】:

【参考方案2】:

我确信在某些情况下这是可能的。例如,如果您有可用的HttpServletResponse 对象(就像您在Controller 中所做的那样,或者如果您编写自己的View),那么您可以调用getWriter()getOutputStream() 并写信给它.

但您需要小心确保您所做的事情不会干扰您对 FreeMarker 模板的使用。而且我不确定您是否可以在 FreeMarker 模板中管理它。

【讨论】:

【参考方案3】:

您可以:

获取HttpServletResponse 并打印到其WriterOutputStream(取决于您要发送文本数据还是二进制数据)

@RequestMapping(value = "/something")
public void helloWorld(HttpServletResponse response)  
  response.getWriter().println("Hello World")

使用@ResponseBody:

@RequestMapping(value = "/something")
@ResponseBody
public String helloWorld()  
  return "Hello World";

因此,您的 Hello World 文本将被写入响应流。

【讨论】:

所以@responsebody 然后忽略视图解析器?我正在使用 freemarker 是否可以使用类似的方法将文件直接发送到输出流?谢谢。 @kmehta 你必须得到OutputStream。我不确定@ResponseBody 方法。 不错。事实证明,使用 Spring MVC FileCopyUtils.copy().. 它非常简单,它接受一个文件流和一个输出流。感谢您的回复 +1。【参考方案4】:

如果您想向 OutputStream 发送内容,即使您使用的是 Freemaker,也只需使用 @ResponseBody

示例:

    @RequestMapping(value = "report1", method = RequestMethod.GET, produces = "application/pdf")
    @ResponseBody
    public void getReport1(OutputStream out) 

【讨论】:

以上是关于spring mvc 是不是有 response.write 可以直接输出到浏览器?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过注释在spring mvc 3中设置标头无缓存

Spring MVC 中获取 HttpServletRequest request, HttpServletResponse response 对象的方法

Spring MVC (Java),强制页面不缓存

在 Spring MVC 中以 AJAX 响应发送文件

如何设定springmvc的reponse的字符集

springmvc怎么设置相应头信息