由于jsp隐式调用和respose.getOutputStream()显示调用,都都用到了jsp内置对象,如果不加处理,会报错为"....called"。
解决方案分两种:(1)如果是一般纯jsp嵌入式的java代码,则在respose.getOutputStream()的前面将out重置,即加上
out.clear();
out = pageContext.pushBody();
这两句即可。
(2)如果是struts2或者struts1等架构,则只需要在调用out前,加上out.flash(),即可。
下面举个jsp例子,直接放tomcat或下可以跑
写道
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ page language="java" import="java.io.*,java.util.zip.*"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">
<title>My JSP 'testZip.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
<%
out.clear();
out = pageContext.pushBody();
//找到后台文件夹
ZipOutputStream zos = null;
BufferedReader in = null;
//String fileName = "d:\\test1.csv";
String srcDirectoryName = "e:\\test";
zos = new ZipOutputStream(response.getOutputStream());
OutputStreamWriter writer = new OutputStreamWriter(zos);
try {
File srcDirectory = new File(srcDirectoryName);
if (!srcDirectory.isDirectory()) {
return;
}
String filename = "users.zip";
response.setHeader("content-disposition",
"attachment; filename=" + filename);
response.setCharacterEncoding("UTF-8");
// 不设置ContentType的话会乱码
response.setContentType("application/zip");
//如果文件夹存在,那么把文件夹里面的文件全部读进zip里面
String[] srcFileNames = srcDirectory.list();
if (0 == srcFileNames.length) {
return;
}
for (int i = 0; i < srcFileNames.length; i++) {
//如果存在文件则写
String srcFileName = srcFileNames[i];
String srcFileAllName = srcDirectoryName + "\\"
+ srcFileName;
File file = new File(srcFileAllName);
if (file.isFile()) {
ZipEntry zipEntry = new ZipEntry(srcFileName);
in = new BufferedReader(new FileReader(srcFileAllName));
zos.putNextEntry(zipEntry);
int ch;
//当压缩过程未结束时继续读写
while ((ch = in.read()) != -1) {
zos.write(ch);
System.out.println(ch);
}
in.close();
in = null;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (null != in) {
in.close();
}
if (null != zos) {
zos.close();
}
if (null != writer) {
writer.close();
}
}
%>
</body>
</html>
以上需要注意两点:(1)先清理out
(2)文件夹下的文件起名最好是英文和数字,不然文件名有乱码。
分享到:
相关推荐
"TRANS-RESPOSE-1.rar_transient"这一压缩包文件,其标题暗示了我们将深入探讨瞬态响应的相关知识,通过其中包含的"TRANS RESPOSE 1.docx"文档,我们可以更详细地了解这一主题。 瞬态响应是指当一个系统受到阶跃、...
print(respose.status_code) # text为返回的数据 print(respose.text) 请求结果:返回状态码为200,表明请求的服务器响应正常,但不能说明该接口正常 判断接口正常,看返回数据,如果返回数据达
代码如下:Respose.Write(“[removed]window.open(‘”+ url +”‘);[removed]”); (打开简洁窗口):Respose.Write(“[removed]window.open(‘” + url + “‘,”,’resizable=1,scrollbars=0,status=1,...
创建和显示CAD的Controlbar。内嵌一个对话框,可以响应控件消息。代码非常简洁,有注释,...(Create CAD controlbar.There is a Inner embedded dialog can respose.It is helpful to learn cad control bar and arx.)
实战项目中后台cs文件弹出提示或者转向,或者模态窗口弹出,模态窗口弹出提示后刷新父页面或者跳转新页面等等,总结了10来个常用的方法,可以直接加载到...简化您每次都要Respose.write(大一堆打印脚本)。非常方便调用.
然而,随着Web应用的发展,跨域数据交互的需求日益增多,因此催生了一系列跨域解决方案,包括JSONP、Flash、Iframe以及CORS(跨域资源共享,Cross-Origin Resource Sharing)。 首先,JSONP(JSON with Padding)是...
4. 请求和响应对象:`reqparse.RequestParser`用于解析请求参数,`respose.Response`用于构造响应。 接下来,我们看看如何使用Flask蓝图为大型应用添加模块化结构。蓝图是Flask中的一个概念,它允许你在多个文件中...
台达DOP-B07S410触摸屏在日常应用中可能会遇到“HMI no response”(人机界面无响应...这是一个既不复杂也不需要额外投资的方法,对于那些希望避免麻烦并快速恢复设备正常运行的操作者来说,是一个非常实用的解决方案。
session application request respose 对象的讲解
天轰穿系列教程之-19核心对象[二](Response,server)天轰穿系列教程之-19核心对象[二](Response,server)天轰穿系列教程之-19核心对象[二](Response,server)天轰穿系列教程之-19核心对象[二](Response,server)天轰...
调用 http.createServer(function(request, respose) { ... } 侦听以下路由: “/” -> 响应返回“Hello World”字符串 "/jedi/FirstName/Lastname 路由 -> 响应返回用户的绝地姓名 启动服务器并监听 8080 端口上...
具体一点说把,首先是客户端(我们)发出请求(Request)给服务端(投票网站),跟他们说,我们需要看他们网站的信息,然后服务端就会回复(Respose)我们,我们再把填好的表单发给他们(Request),他们收到后就会...
java实现模拟tomcat服务器,利用socket接手请求,resquest和respose处理请求发送响应,编写了Servlet接口,用户需要在web.xml配置全类名和URL,编写servlet实现类就可以使用,客户端浏览器,使用java的Swing组件,...
AppxInstaller, 在 Windows 存储外安装Uwp应用程序的工具 这种repostitory在respose中是以一些关于通用 Windows 平台( UWP ) 应用的错误和错误信息( 特别是关于它们对 Windows 存储和suppsed无法在它的外部发布)的...
def ds_asyncore(addr,callback,timeout=5): s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) s.connect(addr) r,w,e = select.select([s],[],[],timeout) if r: respose_data=s.recv(1024) callback...
在普元Primeton EOS运算逻辑中获取HttpSession和Httprequest以及application 在普元Primeton EOS运算逻辑中获取HttpSession和Httprequest以及application
电动汽车是当前汽车行业的重要发展方向,以解决传统燃油车带来的环境污染和资源消耗问题。电动汽车整车下线检测设备的开发是确保新能源汽车出厂前的质量控制关键环节,它涉及到电动汽车的安全性、可靠性和性能验证。...
This program illustrates the effect of alising of frequency leading to signal distortion,the output graph illustrates frequency respose due to alliasing,easy for students learning DSP
关于Python的其他相关知识,如导入机制、垃圾回收、异常处理和文件操作,这些都是Python编程基础的重要组成部分。导入机制控制了如何加载和使用其他模块;垃圾回收自动管理内存,释放不再使用的对象;异常处理帮助...