Struts2下,我能得到ServletOutputStream,它里面是一个html页面,怎样把这个流输出到浏览器?
当使用out.flush()时不起作用。系统仍然转向struts.xml里设置的页面。
[b]问题补充:[/b]
我也不想这样写。这个需求是把数据库里的记录做成表格,以pdf或html方式传回到客户端。
程序中用了iText,它可以生成包含了pdf或html文档在内的ServletOutputStream. 用servlet将流传回到浏览器没问题,但现在要在struts2框架里实现。
在struts2下,生成pdf并传回到浏览器没问题,但html就不行了。它总是去调用struts.xml里配置的页面。
我尝试用stream来解决,但它显示的是html源码。
有没有办法直接把ServletOutputStream发送到浏览器端?
在struts中是可以直接输出字符流的,你可能是ServletOutputStream对象拿错了。我一般拿该对像是从response中拿的,再从response中拿writer或outputstream输出流。给个例子:
[code="java"] private void outPut(String str) {
try {
ServletActionContext.getResponse().setContentType(
"text/html;charset=utf-8");
ServletActionContext.getResponse().setHeader("Cache-Control",
"no-cache");
ServletActionContext.getResponse().setCharacterEncoding("UTF-8");
PrintWriter out = ServletActionContext.getResponse().getWriter();
out.print(str);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}[/code]
这个当然了,要看你配置的result type属性是什么,struts2它本身的流程由框架内部调用,你这样写是不对了,它也提供让自己写流的方式嘛
html本来就是被浏览器解析的,主要是设置你的MIME类型,浏览器是根据MIME来处理流的,你的text/html当然就直接被解析为HTML页面了,设置为application下载类型就可以解决这一类问题