Java - Как установить исключение в сервлете? - PullRequest
0 голосов
/ 15 мая 2018

Я написал код для сервлета, из которого я хочу вызвать метод в другом классе, прежде чем он запустит код JavaScript, чтобы закрыть окно.

Другой метод это main(), а другой называется Teste(), оба являются String методами, из которых я должен что-то вернуть. Этот метод main() создает файл .xlsm в определенной папке на моем ПК, а Teste() создает файл .jsp, указывающий, что метод main() успешно создал файл.

Методы Teste() и main() содержат throws Exception. Проблема в том, что компилятор не позволит сервлету выбросить Exception.

Я уже искал около одного. Сервлеты не поддерживают этот бросок. Но мне действительно нужно сделать это. Или, если кто-то знает способ, которым я могу запустить этот код JavaScript на методе main().

Я также пытался использовать WebDriver, но я не хочу, чтобы код открывал мне браузер, я хочу получить доступ вручную, а затем код запускается. И WebDriver не поддерживает прикрепленные URL

Как мне достичь своей цели?

Код моего сервлета:

package com.passaservletjava.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class ServletJava extends HttpServlet {

    public void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     response.setContentType("text/html;charset=UTF-8");
     PrintWriter out = response.getWriter();
     RecebeServlet recebeservlet = new RecebeServlet();
     out.println("<html><head><script></script></head><body><h1>"+recebeservlet.Teste(request.getRequestURL().toString())+"</h1></body></html>");
     out.println("<html><head><script>window.close();</script></head><body></body></html>");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
        String param = request.getParameter("texto");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        processRequest(request, response);
        String param = request.getParameter("texto");
    }

    @Override
    public String getServletInfo() {
        return "Short description";
    }// </editor-fold>

}

Мои два других метода:

package com.passaservletjava.servlet;

import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.sql.DriverManager;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import java.io.File;

public class RecebeServlet {

     public String Teste(String url) throws Exception{
         String[] args = new String[1];
         args[0] = url;
         return main(args);
     }

     public static String main(String[] args) throws Exception {
      Class.forName("com.mysql.jdbc.Driver");
      Connection connect = DriverManager.getConnection( 
         "jdbc:mysql://localhost:3306/database" , 
         "user" , 
         "password"
      );

      Statement statement = connect.createStatement();
      ResultSet resultSet = statement.executeQuery("select * from `table`");
      FileInputStream file = new FileInputStream(new File("C:\\Users\\PC\\Desktop\\Folder1.xlsm"));
      XSSFWorkbook wb = new XSSFWorkbook(OPCPackage.open(file)); 
      XSSFSheet spreadsheet = wb.getSheet("Planilha1");

      XSSFRow row = spreadsheet.createRow(1);
      XSSFCell cell;
      int i = 1;

      while(resultSet.next()) {
         /*
         ...............
         */
        i++;
      }

      XSSFRow linhacontador = spreadsheet.getRow(1);
       if (linhacontador == null) {
        linhacontador = spreadsheet.createRow(1);
       }

      XSSFCell colunacontador = linhacontador.getCell(31);
       if (colunacontador == null) {
        colunacontador = linhacontador.createCell(31);
       }

       colunacontador.setCellType(XSSFCell.CELL_TYPE_FORMULA);
       colunacontador.setCellFormula("COUNTIF(AE:AE, \"<>\")");

      XSSFRow linhaformula = spreadsheet.getRow(1);
       if (linhaformula == null) {
        linhaformula = spreadsheet.createRow(1);
       }

      XSSFCell colunaformula = linhaformula.getCell(26);
       if (colunaformula == null) {
        colunaformula = linhaformula.createCell(26);
       }

      colunaformula.setCellType(XSSFCell.CELL_TYPE_STRING);
      colunaformula.setCellValue("0,0");

      XSSFCellStyle style = wb.createCellStyle();
      XSSFFont font = wb.createFont();
      style.setVerticalAlignment(VerticalAlignment.TOP);
      style.setAlignment(HorizontalAlignment.CENTER);
      font.setFontHeight((short)(72*20));
      style.setFont(font);
      colunaformula.setCellStyle(style);

      CellRangeAddress range = new CellRangeAddress(1, i-1, 26, 26);
      spreadsheet.addMergedRegion(range);

      FileOutputStream out = new FileOutputStream(new File("C:\\Users\\PC\\Desktop\\excelwithmacro.xlsm"));
      wb.write(out);
      out.close();
      connect.close();

      return args[0];
   }
}

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете обернуться вокруг методов, которые обрабатывают исключения самостоятельно, чтобы ваш код работал и чтобы работал код, основанный на генерируемых исключениях.

Пример:

    public String TesteHandleException(String url)
    {
     try {
     return Teste(url)
     } catch (Exception ex)
     {
      // Handle Exception
      return "Exception occured";
     }
    }

    public String Teste(String url) throws Exception
    {
     String[] args = new String[1];
     args[0] = url;
     return main(args);
    }

и изменениязвонки:

out.println("<html><head><script></script></head><body><h1>"+recebeservlet.TesteHandleException(request.getRequestURL().toString())+"</h1></body></html>");
...