问题:你需要清空并且关闭流对象。
我提供两种解决方案,并且解决了中文文件名乱码问题,兼容IE和火狐两种浏览器。
你可以选择。
方案一:代码写在一个jsp文件中。
下载请求页面传递过来的参数(当然具体看你要几个参数)
<rich:column>
<h:outputLink value="filejsp" rendered="true">
<f:param name="docId" value="#{itemiddocId}" / >
<f:param name="revNo" value="#{itemidrevNo}" />
<f:param name="attachmentNo" value="#{itemidattachmentNo}" />
<f:param name="filename" value="#{itemfileName}" />
<f:param name="storageName" value="#{itemstorageName}" />
<h:outputText value="#{itemfileName}" />
</h:outputLink>
</rich:column>
filejsp 文件代码:
<%@page language="java" contentType="application/octet-stream"pageEncoding="utf-8"%>
<%@page import="javaio,javautil,javanetURLEncoder"%>
<%responsereset();
String ATTACHMENTSTOREPATH = 已经上传了的附件的路径,自己应该知道?
int docId = 0;
int revNo = -1;
int attachmentNo = 0;
String filename = null;
String storageName = null;
try {
docId = IntegerparseInt(requestgetParameter("docId"));
revNo = IntegerparseInt(requestgetParameter("revNo"));
attachmentNo = IntegerparseInt(requestgetParameter("attachmentNo"));
//在火狐浏览器下载,含空格的文件名会出现异常,于是将空格用下划线代替
filename = (new String(requestgetParameter("filename")
getBytes("ISO-8859-1"),"UTF-8"))replace(" ", "_");
//将空格转化为下划线后重新对文件名进行UTF-8编码
filename = javanetURLEncoderencode(filename, "UTF-8"); storageName = requestgetParameter("storageName");
} catch (NumberFormatException nfe) {
}
if (docId >= 0 && revNo > -1 && attachmentNo >= 0) {
String filePath = null;
filePath = ATTACHMENTSTOREPATH + Fileseparator + storageName;
responsesetContentType("application/octet-stream");
//因为浏览器会将字符GBK编码,所以从数据库获得的UTF-8需要转换成GBK
//UTF-8一个汉字24位,GBK一个汉字16位
//Start UTF-8 to GBK(相对以前的程序主要就是修改了这里)
String str=filename;
StringBuffer sb = new StringBuffer();
for(int i=0; i<strlength(); i++) {
char c = strcharAt(i);
switch (c) {
case '+':
sbappend(' ');
break;
case '%':
try {
sbappend((char)IntegerparseInt(
strsubstring(i+1,i+3),16));
}
catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
i += 2;
break;
default:
sbappend(c);
break;
}
}
String result = sbtoString();
result= new String(resultgetBytes("ISO-8859-1"),"UTF-8");
responseaddHeader("Content-Disposition", "attachment; filename=" + new String(resultgetBytes("GBK"),"ISO-8859-1"));
//End UTF-8 to GBK
BufferedOutputStream bos = null;
BufferedInputStream bis = null;
try {
bos = new BufferedOutputStream(responsegetOutputStream());
bis = new BufferedInputStream(new FileInputStream(filePath));
byte[] buffer = new byte[1024];
int n = -1;
while ((n = bisread(buffer)) > -1) {
boswrite(buffer, 0, n);
}
} catch (Exception e) {
eprintStackTrace();
} finally {
if (bis != null)
bisclose();
if (bos != null){
outclear(); out = pageContextpushBody(); bosclose(); } bis = null;
bos = null;
}
}
%>
此方案中如果你去掉:outclear();
out = pageContextpushBody();
报的错将和你的一模一样,不信你试试?
方案二:用Servlet下载,和你的是一样的。
还是页面过来的参数: <h:outputLink value="//">其中//是你调用的Servlet
<rich:column>
<h:outputLink value="//">
<f:param name="storage" value="#{liststorageName}" />
<f:param name="display" value="#{listdisplayName}" />
<f:param name="status" value="#{liststatus}" />
<h:outputText styleClass="input1_9pt_ul" value="#{listdisplayName}" />
</h:outputLink>
</rich:column>
public class PrFileServlet extends >
Spring:业务逻辑框架,和struts,hibernate组成mvc的三大框架,也就是大家所说的ssh框架
框架的出现让开发变得更加方便,快捷,以及可扩展性
学这个三大框架之前就会对应的学jsp,servlet和javabean
struts 1和2的区别:
struts1和struts2的区别其实并不是太大,两者的区别:
Action 类:
◆Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。
◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。
线程模式:
◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。
◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题)
Servlet 依赖:
◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时>
1、isu是国际滑冰联盟的简称。2、JSF是JavaServer Faces构建Java Web 应用程序的标准框架的简称。 3、sp是标准化病人的简称。fs(fans)是粉丝的简称。
1、isu是国际滑冰联盟的缩写。滑冰联盟,英文International Skating Union,英文缩写ISU,简称国际滑。
2、JavaServer Faces (JSF) 是一种用于构建Java Web 应用程序的标准框架(是Java Community Process 规定的JSR-127标准)。它提供了一种以组件为中心的用户界面(UI)构建方法,从而简化了Java服务器端应用程序的开发。由于由Java Community Process (JCP) 推动,属于Java EE 5中的技术规范,而受到了厂商的广泛支持。
3、sp又称为模拟病人,指那些经过标准化、系统化培训后,能准确表现病人的实际临床问题的正常人或病人。与其他完整的测验方法不同,SP本身不是一种独立的考试方法,它通常是许多临床能力评估方法中的一部分。
4、粉丝(英文:fans)是一个网络词语,外来语,在中国俗称追星族指迷恋、崇拜某个名人等的人,对某物狂热的爱好者,崇拜某明星、艺人或事物的一种群体。他们多数是年轻人,有着时尚流行的心态粉丝是英语单词“fans”的音译。“film fans”是影迷的意思。也可以理解为“XX迷”或者“XX追星族”一类意思。“fans”为“fan”的复数形式。fan有“爱好者、崇拜者”的意思,而fans有“狂热者”的意思。
以上就是关于求解!!!JSF实现下载功能老是报这个错,getOutputStream() has already been called for this response。全部的内容,包括:求解!!!JSF实现下载功能老是报这个错,getOutputStream() has already been called for this response。、什么是JSF的UI组件、jsf struts jsp spring 什么关系和区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)