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
并打印到其Writer
或OutputStream
(取决于您要发送文本数据还是二进制数据)
@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 中获取 HttpServletRequest request, HttpServletResponse response 对象的方法