Dúvida comportamento Servlet

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);
    }

Não está ocorrendo nenhum erro no processamento não?

Lucas_Carama, a princípio não. No console do netbeans não mostra nenhum erro/exceção.

O arquivo not-find.jsp está localizado em qual pasta do projeto?

Está no pacote “Páginas Web” raiz do projeto junto a index.jsp.

Em um primeiro momento após isto acontecer: “…A url fica com /relatorio no final e o formulário com todos os campos em branco”, se eu remover o “/relatorio” da url e preencher o formulário com os mesmos dados nesta segunda tentativa a página not-find.jsp é chamada normalmente como deveria ser.

Problema resolvido.

Analisando melhor todo o código do projeto e fazendo alguns outros testes, pude constatar que a página not-find.jsp estava sendo chamada e apresentada ao usuário.
Nesta página not-find.jsp há uma chamada de um arquivo js que apresenta uma mensagem ao usuário (“Registro não encontrado”) através da API SweetAlert. E esta mensagem é que não estava aparecendo. Felizmente era só uma questão de lógica de programação mesmo.

1 curtida