0

我能够在服务器系统中生成 excel 文件,但问题是每当我尝试从客户端系统访问它时,它只会在服务器系统中生成,而不是在客户端系统中。以下代码用于生成 excel 文件:

<%@ page import="org.apache.poi.hssf.usermodel.HSSFSheet"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFWorkbook"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFRow"%>
<%@ page import="org.apache.poi.hssf.usermodel.HSSFCell"%>
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.swing.JFileChooser" %>
<%@ page import="java.awt.Desktop"%>
<%@ page isErrorPage='true' %>


<%! 
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "s";
    String driver = "com.mysql.jdbc.Driver";
    String username = "root"; 
    String userPassword = "s";

%>
<br><br>
<%

    java.util.Date date = new java.util.Date();

    JFileChooser chooseFile=new JFileChooser();

    chooseFile.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
    chooseFile.setDialogTitle("Select a Directory");

    chooseFile.showDialog(null,"Click Me to Save the Folder");
    //String filename = "/tmp/Excel "+System.currentTimeMillis() +".xls" ;




try
{

     Class.forName(driver).newInstance();
         conn = DriverManager.getConnection(url+dbName,username,userPassword);

      Statement stmt = conn.createStatement();
      String strQuery = "select * from  Meter_List";

      ResultSet rs = stmt.executeQuery(strQuery);


          HSSFWorkbook hwb = new HSSFWorkbook();
          HSSFSheet sheet = hwb.createSheet("new sheet");

          HSSFRow rowhead = sheet.createRow((short)2);
          rowhead.createCell(0).setCellValue("SNo");
          rowhead.createCell(1).setCellValue("Meterid");
          rowhead.createCell(2).setCellValue("Consumerid");
          rowhead.createCell(3).setCellValue("Consumername");
          rowhead.createCell(4).setCellValue("LastReading");
          rowhead.createCell(5).setCellValue("Date");
          rowhead.createCell(6).setCellValue("Time");
          rowhead.createCell(7).setCellValue("Status");
          rowhead.createCell(8).setCellValue("Subzone");
          rowhead.createCell(9).setCellValue("Zone");

          int index=3;
          int sno=0;
          String name="";
           while(rs.next()) 
       {
                sno++;

                HSSFRow row = sheet.createRow((short)index);
                row.createCell(0).setCellValue(sno);
                row.createCell(1).setCellValue(rs.getInt("Meterid"));
                row.createCell(2).setCellValue(rs.getInt("Consumerid"));
                row.createCell(3).setCellValue(rs.getString("Consumername"));
                row.createCell(4).setCellValue(rs.getInt("lastreading"));
                row.createCell(5).setCellValue(rs.getDate("Date"));
                row.createCell(6).setCellValue(rs.getTime("Time"));
                row.createCell(7).setCellValue(rs.getString("Status"));
                row.createCell(8).setCellValue(rs.getString("Subzone"));
                row.createCell(9).setCellValue(rs.getString("Zone"));
                index++;
       }

          FileOutputStream fileOut = new FileOutputStream(filename);
          hwb.write(fileOut);
          fileOut.close();
          out.println("<b>Opening worksheet, please wait......</b><br>");

          Desktop dt=Desktop.getDesktop();
          dt.open(new File(filename));
          out.println("<b>Worksheet opened. It is saved as -\n\t\t </b><br>"+filename);
} 
catch ( Exception ex ) 
{  
    //out.println("Error :: "+ex);
    out.println("");
} 
%>
can you please help to solve this.
4

2 回答 2

0

要创建用户将下载的动态 Excel 文件,以下是基于您的代码的示例 servlet:

import javax.servlet.ServletConfig;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFCell;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import javax.servlet.HttpServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;

/**
 *
 * @author Alexandre Lavoie
 */
@WebServlet(name = "ExcelServlet", urlPatterns = { "/servlets/excel" })
public class ExcelServlet implements HttpServlet
{
    @Override
    public void doGet(HttpServletRequest p_oRequest, HttpServletResponse p_oResponse) throws IOException, ServletException
    {
        Connection conn = null;
        String url = "jdbc:mysql://localhost:3306/";
        String dbName = "s";
        String driver = "com.mysql.jdbc.Driver";
        String username = "root"; 
        String userPassword = "s";

        java.util.Date date = new java.util.Date();

        try
        {
            Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbName,username,userPassword);

            Statement stmt = conn.createStatement();
            String strQuery = "select * from  Meter_List";

            ResultSet rs = stmt.executeQuery(strQuery);


            HSSFWorkbook hwb = new HSSFWorkbook();
            HSSFSheet sheet = hwb.createSheet("new sheet");

            HSSFRow rowhead = sheet.createRow((short)2);
            rowhead.createCell(0).setCellValue("SNo");
            rowhead.createCell(1).setCellValue("Meterid");
            rowhead.createCell(2).setCellValue("Consumerid");
            rowhead.createCell(3).setCellValue("Consumername");
            rowhead.createCell(4).setCellValue("LastReading");
            rowhead.createCell(5).setCellValue("Date");
            rowhead.createCell(6).setCellValue("Time");
            rowhead.createCell(7).setCellValue("Status");
            rowhead.createCell(8).setCellValue("Subzone");
            rowhead.createCell(9).setCellValue("Zone");

            int index=3;
            int sno=0;
            String name="";

            while(rs.next()) 
            {
                sno++;

                HSSFRow row = sheet.createRow((short)index);
                row.createCell(0).setCellValue(sno);
                row.createCell(1).setCellValue(rs.getInt("Meterid"));
                row.createCell(2).setCellValue(rs.getInt("Consumerid"));
                row.createCell(3).setCellValue(rs.getString("Consumername"));
                row.createCell(4).setCellValue(rs.getInt("lastreading"));
                row.createCell(5).setCellValue(rs.getDate("Date"));
                row.createCell(6).setCellValue(rs.getTime("Time"));
                row.createCell(7).setCellValue(rs.getString("Status"));
                row.createCell(8).setCellValue(rs.getString("Subzone"));
                row.createCell(9).setCellValue(rs.getString("Zone"));
                index++;
            }

            // Maybe I'm wrong on that exact mime type
            p_oResponse.setContentType("application/vnd.ms-excel");
            ServletOutputStream out = p_oResponse.getOutputStream();

            hwb.write(out);

            out.flush();
            out.close();
        } 
        catch(Exception ex) 
        {  
            ex.printStackTrace();
        } 
    }

    @Override
    public void init(ServletConfig sc) throws ServletException {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public ServletConfig getServletConfig() {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void service(ServletRequest sr, ServletResponse sr1) throws ServletException, IOException {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String getServletInfo() {
        //throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void destroy() {
        //throw new UnsupportedOperationException("Not supported yet.");
    }
}

添加到您的项目后,您可以使用以下 url 访问此文件:

http://yourserver.com/<context-name>/servlets/excel

希望这可以帮助!

于 2012-11-20T12:14:56.430 回答
0
<%@ page language="java" import="java.io.*" %>
<%@ page import="java.util.*" %>
<%@ page import="java.sql.*" %>
<%@ page import="javax.swing.JFileChooser" %>
<%@ page import="java.awt.Desktop"%>
<%@ page isErrorPage='true' %>
<%@ page import="java.text.SimpleDateFormat"%>
<%! 
    Connection conn = null;
    String url = "jdbc:mysql://localhost:3306/";
    String dbName = "su";
    String driver = "com.mysql.jdbc.Driver";
    String username = "root"; 
    String userPassword = "s";

%>



<%
    String filename="";
    response.setContentType("application/vnd.ms-excel");
    response.setHeader("Content-Disposition","inline;filename=" + "excel_sheet"+".xls");
    response.setHeader("Cache-Control","no-cache");
    PrintWriter pout = response.getWriter();
    String date1="";
    String time="";
try
{

        Class.forName(driver).newInstance();
            conn = DriverManager.getConnection(url+dbName,username,userPassword);
            Statement stmt = conn.createStatement();
        String strQuery = "select * from  Meter_List";
        ResultSet rs = stmt.executeQuery(strQuery);
        int index=3;
            int sno=0;
            String name="";
                pout.print("SNo\t");
                pout.print("MeterID\t"  );
                pout.print("ConsumerID\t" );
                pout.print("ConsumerName\t" );

                pout.println();
            while(rs.next()) 

                     {
                                int meterid = rs.getInt("Meterid");
                        int consumerid=rs.getInt("Consumerid");
                        String consumername = rs.getString("Consumername");

                                sno++;
                        pout.print(sno + "\t");
                        pout.print(meterid + "\t" );
                        pout.print(consumerid + "\t" );
                                pout.print(consumername + "\t");

                        index++;
                        pout.println();

                     }

} 
catch ( Exception ex ) 
{  
    //out.println("Error :: "+ex);
    out.println("");
} 
%>
于 2012-11-27T06:13:19.297 回答