<?xml version="1.0" encoding="UTF-8" ?>
<%@page import="qg.QueryDownLoadFirstSymbol"%>
<%@page import="db.Handlersymbol"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>下载到本地</title>
</head><%
Handlersymbol queryFirstSymbol = QueryDownLoadFirstSymbol
.GetFirst();
if (queryFirstSymbol != null) {
try { QueryDownLoadFirstSymbol.outFie(request, response,
pageContext, queryFirstSymbol);
request.getRequestDispatcher("DownLoadFilesToLocal.jsp")
.forward(request, response); return;
} catch (Exception ex) {
request.getRequestDispatcher("DbSerialBroswer.jsp")
.forward(request, response); return;
} } else {
request.getRequestDispatcher("DbSerialBroswer.jsp").forward(
request, response); }
%></html>
<%@page import="qg.QueryDownLoadFirstSymbol"%>
<%@page import="db.Handlersymbol"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>下载到本地</title>
</head><%
Handlersymbol queryFirstSymbol = QueryDownLoadFirstSymbol
.GetFirst();
if (queryFirstSymbol != null) {
try { QueryDownLoadFirstSymbol.outFie(request, response,
pageContext, queryFirstSymbol);
request.getRequestDispatcher("DownLoadFilesToLocal.jsp")
.forward(request, response); return;
} catch (Exception ex) {
request.getRequestDispatcher("DbSerialBroswer.jsp")
.forward(request, response); return;
} } else {
request.getRequestDispatcher("DbSerialBroswer.jsp").forward(
request, response); }
%></html>
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.SocketException;
import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.PageContext;import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;import db.Ftpdb;
import db.FtpdbDAO;
import db.Handlersymbol;
import db.HandlersymbolDAO;
import db.Seraildatafile;
import db.SeraildatafileDAO;public class QueryDownLoadFirstSymbol {
public static Handlersymbol GetFirst() {
HandlersymbolDAO h = new HandlersymbolDAO();
List<Handlersymbol> allfile = h.findAll();
for (Handlersymbol Item : allfile) {
if (Item.getHandler() == Boolean.FALSE) {
Item.setHandler(Boolean.TRUE);
h.save(Item);
return Item;
}
}
return null;
} public static void outFie(HttpServletRequest request,
HttpServletResponse response, PageContext context,
Handlersymbol Item) throws SocketException, IOException {
SeraildatafileDAO filedao = new SeraildatafileDAO();
List<Seraildatafile> allfile = filedao.findAll();
for (Seraildatafile fileItem : allfile) {
if (fileItem.getDaId().compareTo(Item.getDataId()) == 0
&& fileItem.getSymbol().trim()
.compareToIgnoreCase(Item.getSymbol().trim()) == 0) {
out(request, response, fileItem); }
}
} private static void out(HttpServletRequest request,
HttpServletResponse response, Seraildatafile fileItem)
throws SocketException, IOException {
InputStream fileStream = GetFileStream(fileItem); PrintWriter write = response.getWriter(); response.setContentType("application/x-download");
response.addHeader("Content-Disposition", "attachment;filename="
+ fileItem.getFile());
byte[] buffer = new byte[1024];
while ((fileStream.read(buffer)) != -1) { write.write(new String(buffer));
} write.flush();
} private static InputStream GetFileStream(Seraildatafile fileItem)
throws SocketException, IOException {
FtpdbDAO fdao = new FtpdbDAO();
Ftpdb fItem = fdao.findById(fileItem.getOnFtp());
if (fItem != null) {
FTPClient client = new FTPClient();
client.connect(fItem.getHost(), fItem.getPort().intValue());
client.login(fItem.getName(), fItem.getPass());
if (FTPReply.isPositiveCompletion(client.getReplyCode())) {
client.changeWorkingDirectory(fileItem.getDaId().toString());
return client.retrieveFileStream(fileItem.getFile());
} }
return null;
}
}
java.lang.IllegalStateException: Cannot forward after response has been committed
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:302)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:292)
at org.apache.jsp.DownLoadFilesToLocal_jsp._jspService(DownLoadFilesToLocal_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:393)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)
http://topic.csdn.net/u/20070828/09/106d0438-f618-48cb-a888-6f3518ca266b.html
http://blog.csdn.net/me_kankan/article/details/3900275http://blog.csdn.net/fenglibing/article/details/4106564
java.lang.IllegalStateException: Cannot forward after response has been committed
package qg;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.util.List;
import java.util.Random;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import db.Ftpdb;
import db.FtpdbDAO;
import db.Handlersymbol;
import db.HandlersymbolDAO;
import db.Seraildatafile;
import db.SeraildatafileDAO;public class DownLoadFileServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = -5457174259486950320L;
private static final int BUFFER = 8192; /**
* Constructor of the object.
*/
public DownLoadFileServlet() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("application/force-download");
ServletOutputStream out = response.getOutputStream(); String zipfile = ZipFile();
response.setHeader("Content-Disposition", "attachment;filename=\""
+ zipfile + "\""); outZipfile(out, zipfile);
deleteFile(zipfile);
response.setContentType("text/html");
request.getRequestDispatcher("/DbSerialBroswer.jsp").forward(request,
response);
} private void deleteFile(String zipfile) {
File dFile = new File(zipfile);
if (dFile.exists() && dFile.isFile()) {
dFile.delete();
} } private void outZipfile(ServletOutputStream out, String zipfile)
throws IOException {
byte[] data = new byte[BUFFER];
InputStream fis = new FileInputStream(zipfile);
while ((fis.read(data)) != -1) {
out.write(data);
} } public static String getRandomString(int length) {
String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
} private String ZipFile() throws SocketException,
IOException {
HandlersymbolDAO h = new HandlersymbolDAO();
List<Handlersymbol> allfileHandler = h.findAll();
SeraildatafileDAO filedao = new SeraildatafileDAO();
List<Seraildatafile> allfile = filedao.findAll();
String randomFileName = WebRoot() + getRandomString(8) + ".zip";
ZipCompressor zipcompressor = new ZipCompressor(randomFileName); for (Handlersymbol Item : allfileHandler) {
if (Item.getHandler() == Boolean.FALSE) {
Item.setHandler(Boolean.TRUE);
h.save(Item);
Seraildatafile ItemFile = null;
for (Seraildatafile fileItem : allfile) {
if (fileItem.getDaId().compareTo(Item.getDataId()) == 0
&& fileItem
.getSymbol()
.trim()
.compareToIgnoreCase(
Item.getSymbol().trim()) == 0) {
ItemFile = fileItem;
break; }
}
if (ItemFile != null) { InputStream FileInput = GetFileStream(ItemFile);
if (FileInput != null) {
zipcompressor.compressFile(FileInput,
ItemFile.getFile());
} } }
}
zipcompressor.close();
return randomFileName;
} private String WebRoot() { return getServletContext().getRealPath("/");
} private InputStream GetFileStream(Seraildatafile fileItem)
throws SocketException, IOException {
FtpdbDAO fdao = new FtpdbDAO();
Ftpdb fItem = fdao.findById(fileItem.getOnFtp());
if (fItem != null) {
FTPClient client = new FTPClient();
client.connect(fItem.getHost(), fItem.getPort().intValue());
client.login(fItem.getName(), fItem.getPass());
if (FTPReply.isPositiveCompletion(client.getReplyCode())) {
client.changeWorkingDirectory(fileItem.getDaId().toString());
return client.retrieveFileStream(fileItem.getFile());
}
}
return null;
} public void init() throws ServletException { }}
[/code]
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.SocketException;
import java.util.List;
import java.util.Random;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import db.Ftpdb;
import db.FtpdbDAO;
import db.Handlersymbol;
import db.HandlersymbolDAO;
import db.Seraildatafile;
import db.SeraildatafileDAO;public class DownLoadFileServlet extends HttpServlet { /**
*
*/
private static final long serialVersionUID = -5457174259486950320L;
private static final int BUFFER = 8192; /**
* Constructor of the object.
*/
public DownLoadFileServlet() {
super();
} /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setContentType("application/force-download");
ServletOutputStream out = response.getOutputStream(); String zipfile = ZipFile();
response.setHeader("Content-Disposition", "attachment;filename=\""
+ zipfile + "\""); outZipfile(out, zipfile);
deleteFile(zipfile);
response.setContentType("text/html");
request.getRequestDispatcher("/DbSerialBroswer.jsp").forward(request,
response);
} private void deleteFile(String zipfile) {
File dFile = new File(zipfile);
if (dFile.exists() && dFile.isFile()) {
dFile.delete();
} } private void outZipfile(ServletOutputStream out, String zipfile)
throws IOException {
byte[] data = new byte[BUFFER];
InputStream fis = new FileInputStream(zipfile);
while ((fis.read(data)) != -1) {
out.write(data);
} } public static String getRandomString(int length) {
String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
} private String ZipFile() throws SocketException,
IOException {
HandlersymbolDAO h = new HandlersymbolDAO();
List<Handlersymbol> allfileHandler = h.findAll();
SeraildatafileDAO filedao = new SeraildatafileDAO();
List<Seraildatafile> allfile = filedao.findAll();
String randomFileName = WebRoot() + getRandomString(8) + ".zip";
ZipCompressor zipcompressor = new ZipCompressor(randomFileName); for (Handlersymbol Item : allfileHandler) {
if (Item.getHandler() == Boolean.FALSE) {
Item.setHandler(Boolean.TRUE);
h.save(Item);
Seraildatafile ItemFile = null;
for (Seraildatafile fileItem : allfile) {
if (fileItem.getDaId().compareTo(Item.getDataId()) == 0
&& fileItem
.getSymbol()
.trim()
.compareToIgnoreCase(
Item.getSymbol().trim()) == 0) {
ItemFile = fileItem;
break; }
}
if (ItemFile != null) { InputStream FileInput = GetFileStream(ItemFile);
if (FileInput != null) {
zipcompressor.compressFile(FileInput,
ItemFile.getFile());
} } }
}
zipcompressor.close();
return randomFileName;
} private String WebRoot() { return getServletContext().getRealPath("/");
} private InputStream GetFileStream(Seraildatafile fileItem)
throws SocketException, IOException {
FtpdbDAO fdao = new FtpdbDAO();
Ftpdb fItem = fdao.findById(fileItem.getOnFtp());
if (fItem != null) {
FTPClient client = new FTPClient();
client.connect(fItem.getHost(), fItem.getPort().intValue());
client.login(fItem.getName(), fItem.getPass());
if (FTPReply.isPositiveCompletion(client.getReplyCode())) {
client.changeWorkingDirectory(fileItem.getDaId().toString());
return client.retrieveFileStream(fileItem.getFile());
}
}
return null;
} public void init() throws ServletException { }}