Я написал код для сервлета, из которого я хочу вызвать метод в другом классе, прежде чем он запустит код 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];
}
}