Bom dia.
Tenho um formulário na minha index.jsp que quando o usuário preenche e submete os dados a servlet executa o trecho abaixo e se o resultado da condição é false não redireciona à página not-find.jsp. A url fica com /relatorio no final e o formulário com todos os campos em branco.
@WebServlet(name = "RelatorioServlet", urlPatterns = {"/relatorio"})
public class RelatorioServlet extends HttpServlet {
boolean check = dao.checkRegistro(carteirinha, dtNasc, cpfSemformatacao, ano);
if (check == false) {
RequestDispatcher rd = request.getRequestDispatcher("/not-find.jsp");
rd.forward(request, response);
}
Método completo.
private void gerarRelatorio(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String erro = "";
String cpf = request.getParameter("cpf"); //armazena o valor digitado pelo usuário
String cpfSemformatacao = cpf.replaceAll("\\D", ""); //remove tudo o que NÃO for dígito numérico.
String ano = request.getParameter("ano"); //armazena o ano escolhido pelo usuário
String carteirinha = request.getParameter("carteirinha");
String dtNasc = request.getParameter("dtNasc");
String data_janeiro = "01/01/"; //parte inicial data de janeiro
String data_dezembro = "31/12/"; //parte inicial data de dezembro
//início da conversão das datas (String) que serão enviadas por parametro para a query dentro do relatório.
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); // formatador/pattern
java.util.Date data_jan = null; //variável do tipo Date do pacote java.util
java.util.Date data_dez = null; //variável do tipo Date do pacote java.util
try { //variáveis "data_janeiro" e "data_dezembro" são concatenas com a variável "ano" informado pelo usuário para formar uma data completa ex: 01/01/2020.
data_jan = (Date) formatter.parse(data_janeiro.concat(ano)); //convertemos a variável "data_janeiro" que é do tipo "String" para o tipo "java.util.Date" atribuindo o valor em "data_jan"
data_dez = (Date) formatter.parse(data_dezembro.concat(ano)); //convertemos a variável "data_dezembro" que é do tipo "String" para o tipo "java.util.Date" atribuindo o valor em "data_dez"
} catch (ParseException e) {
e.printStackTrace();
}
java.sql.Date dt_jan = new java.sql.Date(data_jan.getTime()); //convertemos a variável "data_jan" para a variável "dt_jan" que é do tipo "java.sql.Date".
java.sql.Date dt_dez = new java.sql.Date(data_dez.getTime()); //convertemos a variável "data_dez" para a variável "dt_dez" que é do tipo "java.sql.Date".
// fim da conversão das datas (String) que serão enviadas por parâmetro para a query dentro do relatório.
// criar um objeto da classe model para recuperar os valores dos atributos vindo da classe dao
boolean check = dao.checkRegistro(carteirinha, dtNasc, cpfSemformatacao, ano);
if (check == false) {
RequestDispatcher rd = request.getRequestDispatcher("/not-find.jsp");
rd.forward(request, response);
} else {
String caminhoRelJasper = "WEB-INF/report/relatorioDmed.jasper"; //caminho relativo do arquivo .jasper
HashMap<String, Object> param = new HashMap<String, Object>(); //cria um objeto para armazenar os parametros que o usuário digitou
param.put("CPF", cpfSemformatacao); //passa o valor da variável para o relatório.
param.put("ANO", ano); //passa o valor da variável para o relatório.
param.put("ANO_JANEIRO", dt_jan); //passa o valor da variável para o relatório.
param.put("ANO_DEZEMBRO", dt_dez); //passa o valor da variável para o relatório.
byte[] bytes = null;
ServletContext contexto = getServletContext(); //armazana todas as pasta do servidor que vem antes da pasta WEB-INF para formar o caminho absoluto.
try {
JasperReport relatorio = (JasperReport) JRLoader.loadObjectFromFile(contexto.getRealPath(caminhoRelJasper)); //carregar o relatorio com o caminho absoluto.
bytes = JasperRunManager.runReportToPdf(relatorio, param, new GenericDAO().getConnection()); //faz a conexao do banco e passa os parametros para a query dentro do .jasper e gera o relatorio em um array de bytes
} catch (JRException ex) {
ex.getMessage();
} catch (SQLException ex) {
Logger.getLogger(RelatorioServlet.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (bytes != null) {
response.setContentType("application/pdf");
response.setContentLength(bytes.length);
System.out.println(bytes.length);
ServletOutputStream sos = response.getOutputStream();
sos.write(bytes);
sos.flush();
sos.close();
request.setAttribute(erro, "Registro não encontrado.");
System.out.println("bytes.length: " + bytes.length);
} else {
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
}
}
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
gerarRelatorio(request, response);
}