<?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>

解决方案 »

  1.   

    package qg;import java.io.IOException;
    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;
    }
    }
      

  2.   


    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)
      

  3.   

    参考:
    http://topic.csdn.net/u/20070828/09/106d0438-f618-48cb-a888-6f3518ca266b.html
      

  4.   

    参考:
    http://blog.csdn.net/me_kankan/article/details/3900275http://blog.csdn.net/fenglibing/article/details/4106564
      

  5.   


    java.lang.IllegalStateException: Cannot forward after response has been committed
      

  6.   

    [code]
    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]
      

  7.   

    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 { }}