通过Java Servlet将MySQL导出为Excel文件,提出404错误

时间:2016-04-16 01:24:34

标签: java mysql excel jsp servlets

我正在运行一个试图通过Java Servlet导出Excel文件的页面。结构的破败: downloadreports.jsp 是应该调用该文件的按钮的位置。该按钮调用 ReportsServlet.java ,这只是下载,然后调用 ExcelCreatorBanned.java ,它调用数据库并创建Excel文件。

问题在于1)当我在运行完整站点时尝试单击downloadreports.jsp时,它会自动转到ReportsServlet而不是显示页面(为/ Reports出现404错误)和2)I'几天来一直在弄乱它,这只是不起作用。不确定我做错了什么,但任何帮助都会非常感激!

downloadreports.jsp

<div align="center">
<form id="downloadBanned" action="../Reports" method="post">`
<input class="btn btn-lg btn-red" type="submit" value="Download Banned Student List"><br>            `
</form>`

ReportsServlet.java

package controllers;

import java.io.IOException;
import java.io.OutputStream;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import helpers.ExcelCreatorBanned;

/**
 * Servlet implementation class ReportsServlet
 */
@WebServlet({ "/ReportsServlet", "/Reports" })
    public class ReportsServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private HttpSession session;
    private String url;   

/**
 * @see HttpServlet#HttpServlet()
 */
public ReportsServlet() {
    super();
    // TODO Auto-generated constructor stub
}

/**
 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
 */
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    doPost(request, response);
}

/**
 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
 */
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    this.session = request.getSession(false);

    ExcelCreatorBanned ecb = new ExcelCreatorBanned();
    ecb.downloadExcel();

    url = "admin/downloadreports.jsp";

    RequestDispatcher dispatcher = request.getRequestDispatcher(url);
    dispatcher.forward(request, response);

}

private Object getOutputStream() {
    // TODO Auto-generated method stub
    return null;
}

}

ExcelCreatorBanned.java(对DbConnect.java的引用是服务器的凭据,它肯定有效,因为它适用于其他页面)

package helpers;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;

import javax.servlet.ServletOutputStream;


import model.DbConnect;

import java.sql.Statement;

public class ExcelCreatorBanned {

      public String downloadExcel( ) { //ServletOutputStream out){

        String outFileName = "BannedStudents.csv";
        int nRow = 1;
        String strQuery = null;
        Connection con = null;

        try {

            // Getting connection here for mySQL database 
              Class.forName("com.mysql.jdbc.Driver").newInstance();
              con = DbConnect.devCredentials();
              System.out.println(con);

              if(con==null)
                  return "Connection Failed";

              // Database Query               
              strQuery = "select * from banned";
              Statement stmt=con.createStatement();

              ResultSet rs=stmt.executeQuery(strQuery);

              File file = new File(outFileName);
              FileWriter fstream = new FileWriter(file);
              BufferedWriter out = new BufferedWriter(fstream);

              //Get Titles
              String titleLine = "BannedID" + "," + "UserID" + "," + "AdminID"         
                   + "," + "Ban Start Date" + "," + 
                       "Ban End Date" + "," + "Penalty Count" + "," + 
                   "Description" + "," + "Status" + "\n";
              out.write(titleLine);

              //stmt = conn.createStatement();


              while (rs.next()) {
                  int BannedId = rs.getInt(1);
                  int UserID = rs.getInt(2); 
                  int AdminID = rs.getInt(3); 
                  String BanStartDate = rs.getString(4); 
                  String BanEndDate = rs.getString(5); 
                  int PenaltyCount = rs.getInt(6); 
                  String Description = rs.getString(7);                 
                  String Status = rs.getString(8);

                  String outline = BannedId + "," + UserID + "," + AdminID + 
                      "," + BanStartDate + "," + 
                      BanEndDate + "," + PenaltyCount + "," + Description +
                      "," + Status + "\n";

                  out.write(outline);

              } //end of while
              out.close();

      } catch (Exception e) {
          System.err.println("Got an exception!");
          System.err.println(e.getMessage());
      }
        return outFileName;
 }
}

1 个答案:

答案 0 :(得分:0)

我不喜欢行中action="../Reports"属性的外观

<form id="downloadBanned" action="../Reports" method="post">

请尝试以下方法:

<form id="downloadBanned" action="${pageContext.request.contextPath}/Reports" method="post">

有关${pageContext.request.contextPath}的内容的讨论,请参阅this question