首页 > 解决方案 > jsp页面上提交表单时永远运行

问题描述

在下面的 jsp 页面 (cadastroPaciente.jsp) 上提交表单时,系统将永远运行而不会返回任何错误。

我已经在测试类中单独测试了连接,并且没有连接到数据库的 Servlet(仅构建对象并将其返回到屏幕)工作。但是当我把它放在 Servlet 中保存在数据库中时,它会永远运行并且不会保存在数据库中。

构建路径具有:

  1. jakarta.servlet.jsp.jstl-api-2.0.0.jar
  2. mysql-connector-java-8.0.26.jar

在控制台上只有这个:

放。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:服务器版本名称:Apache Tomcat/9.0.39 设置。2021 年 9 月 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:服务器构建:2020 年 10 月 6 日 14:11:46 UTC 设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:服务器版本号:9.0.39.0 已设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:操作系统名称:
Windows 10 套装。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:操作系统版本:10.0 集。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:架构:amd64 设置。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.startup.VersionLoggerListener 日志信息:Java 主页:C:\Program Files\Java\jdk-16.0.1 设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:JVM 版本:16.0.1+9-24 设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener log INFO: JVM Vendor: Oracle Corporation set。2021 年 09 月 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:CATALINA_BASE:
D:\Java\workspace-ee.metadata.plugins\org.eclipse.wst.server.core\tmp0 设置。2021 年 9 月 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:CATALINA_HOME:D:\Java\Server\apache-tomcat-9.0.39 设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:-Dcatalina.base=D:\Java\workspace-ee.metadata.plugins\org.eclipse.wst.server .core\tmp0 设置。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:-Dcatalina.home=D:\Java\Server\apache-tomcat-9.0.39 设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:-Dwtp.deploy=D:\Java\workspace-ee.metadata.plugins\org.eclipse.wst.server .core\tmp0\wtpwebapps 设置。2021 年 1 月 9 日上午 12:25:24 org.apache.catalina.startup。VersionLoggerListener 日志信息:命令行参数:--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED 集。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:--add-opens=java.base/java.io=ALL-UNNAMED 设置。2021 年 9 月 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:--add-opens=java.base/java.util=ALL-UNNAMED 设置。09, 2021 12:25:24 AM org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:--add-opens=java.base/java.util.concurrent=ALL-UNNAMED 设置。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:--add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED 设置。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:-Dfile。编码=Cp1252 设置。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.startup.VersionLoggerListener 日志信息:命令行参数:-XX:+ShowCodeDetailsInExceptionMessages 设置。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.core.AprLifecycleListenerlifecycleEvent 信息:使用 APR 版本 [1.7.0] 加载 Apache Tomcat 本机库 [1.2.25]。放。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.core.AprLifecycleListenerlifecycleEvent 信息:APR 功能:IPv6 [true],sendfile [true],接受过滤器 [false],随机 [true]。放。2021 年 9 月 9 日上午 12:25:24 org.apache.catalina.core.AprLifecycleListenerlifecycleEvent 信息:APR/OpenSSL 配置:useAprConnector [false],useOpenSSL [true] 设置。09, 2021 12:25:24 AM org.apache.catalina.core.AprLifecycleListener initializeSSL INFO:OpenSSL 已成功初始化 [OpenSSL 1.1.1g 21 Apr 2020] 设置。2021 年 1 月 9 日上午 12:25:25 组织。apache.coyote.AbstractProtocol init INFO: Initializing ProtocolHandler ["http-nio-8080"] set。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.startup.Catalina 加载信息:在 [565] 毫秒内设置服务器初始化。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.core.StandardService startInternal INFO:启动服务 [Catalina] 设置。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.core.StandardEngine startInternal INFO:正在启动 Servlet 引擎:[Apache Tomcat/9.0.39] 已设置。2021 年 9 月 9 日上午 12:25:25 org.apache.coyote.AbstractProtocol 开始信息:正在启动 ProtocolHandler ["http-nio-8080"] 设置。2021 年 9 月 12:25:25 AM org.apache.catalina.startup.Catalina 启动信息:服务器在 [687] 毫秒内启动 Catalina 加载信息:在 [565] 毫秒内设置服务器初始化。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.core.StandardService startInternal INFO:启动服务 [Catalina] 设置。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.core.StandardEngine startInternal INFO:正在启动 Servlet 引擎:[Apache Tomcat/9.0.39] 已设置。2021 年 9 月 9 日上午 12:25:25 org.apache.coyote.AbstractProtocol 开始信息:正在启动 ProtocolHandler ["http-nio-8080"] 设置。2021 年 9 月 12:25:25 AM org.apache.catalina.startup.Catalina 启动信息:服务器在 [687] 毫秒内启动 Catalina 加载信息:在 [565] 毫秒内设置服务器初始化。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.core.StandardService startInternal INFO:启动服务 [Catalina] 设置。2021 年 9 月 9 日上午 12:25:25 org.apache.catalina.core.StandardEngine startInternal INFO:正在启动 Servlet 引擎:[Apache Tomcat/9.0.39] 已设置。2021 年 9 月 9 日上午 12:25:25 org.apache.coyote.AbstractProtocol 开始信息:正在启动 ProtocolHandler ["http-nio-8080"] 设置。2021 年 9 月 12:25:25 AM org.apache.catalina.startup.Catalina 启动信息:服务器在 [687] 毫秒内启动 39] 设置。2021 年 9 月 9 日上午 12:25:25 org.apache.coyote.AbstractProtocol 开始信息:正在启动 ProtocolHandler ["http-nio-8080"] 设置。2021 年 9 月 12:25:25 AM org.apache.catalina.startup.Catalina 启动信息:服务器在 [687] 毫秒内启动 39] 设置。2021 年 9 月 9 日上午 12:25:25 org.apache.coyote.AbstractProtocol 开始信息:正在启动 ProtocolHandler ["http-nio-8080"] 设置。2021 年 9 月 12:25:25 AM org.apache.catalina.startup.Catalina 启动信息:服务器在 [687] 毫秒内启动

有人能帮我吗?

JSP 页面:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<!DOCTYPE html>
<html>    
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Pacientes</title> 
    </head>
    <body>
        <form method="post" action="PacienteServlet">
            <fieldset>
                <legend>Dados do Paciente</legend>
                <p>
                    <label for="cpf">CPF:</label>
                    <input type="text" size="14" id="cpf" name="cpf" />
                </p>
                <p>
                    <label for="nome">Nome:</label>
                    <input type="text" size="20" id="nome" name="nome" />
                </p>
                <p>
                    <label for="idade">Idade:</label>
                    <input type="number" size="3" id="idade" name="idade" />
                </p>
                <p>
                    <label for="telefone">Telefone:</label>
                    <input type="text" size="20" id="telefone" name="telefone" />
                </p>
            </fieldset>
            <input type="submit" value="Enviar" />
        </form>
    </body>
</html>

JavaBeans:

package entity;
import java.io.Serializable;

public class Paciente implements Serializable {
    
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private String cpf;
    private String nome;
    private int idade;
    private String telefone;
    
    public Paciente(){}

    public String getCpf() {
        return cpf;
    }

    public void setCpf(String cpf) {
        this.cpf = cpf;
    }

    public String getNome() {
        return nome;
    }

    public void setNome(String nome) {
        this.nome = nome;
    }

    public int getIdade() {
        return idade;
    }

    public void setIdade(int idade) {
        this.idade = idade;
    }

    public String getTelefone() {
        return telefone;
    }

    public void setTelefone(String telefone) {
        this.telefone = telefone;
    }
    
}

小服务程序:

package servlet;

import entity.Paciente;
import persistence.PacienteDao;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.SQLException;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;

/**
 * Servlet implementation class PacienteServlet
 */
@WebServlet("/PacienteServlet")
public class PacienteServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PacienteServlet() {
        super();
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.sendRedirect(response.encodeURL("cadastroPaciente.jsp"));
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        
        try {
            
            Paciente paciente = new Paciente();
            PacienteDao dao = new PacienteDao(); 
            
            paciente.setCpf(request.getParameter("cpf"));
            paciente.setNome(request.getParameter("nome"));
            paciente.setIdade(Integer.parseInt(request.getParameter("idade")));
            paciente.setTelefone(request.getParameter("telefone"));
           
            dao.efetuarCadastro(paciente);
                
            response.getWriter().append("Paciente cadastrado com sucesso!").append("<br />").append("<br />");
              
            response.getWriter().append("CPF: "+paciente.getCpf()).append("<br />");
            response.getWriter().append("Nome: "+paciente.getNome()).append("<br />");
            response.getWriter().append("Idade: "+paciente.getIdade()).append("<br />");
            response.getWriter().append("Telefone: "+paciente.getTelefone()).append("<br />").append("<br />");
           
            response.getWriter().append("<a href=\"cadastroPaciente.jsp\"> Clique aqui para voltar para o formulário </a>");
            
        } catch (SQLException e) {
            request.setAttribute("error", e.toString());
            RequestDispatcher rd = request.getRequestDispatcher("/error.jsp");
            rd.forward(request, response);
        } catch (Exception e) {
            request.setAttribute("error", e.toString());
            RequestDispatcher rd = request.getRequestDispatcher("/error.jsp");
            rd.forward(request, response);
        } finally {
            out.close();
        }
           
    }

}

道:

package persistence;

import java.sql.*;

import javax.swing.JOptionPane;

public class Dao {
    Connection con;
    PreparedStatement stmt;
    ResultSet rs;
    CallableStatement call;
    
    public void abrirConexao() throws Exception{
        
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/avaliacaojavaee", "root", "admin");
        } catch(Exception e) {
            JOptionPane.showMessageDialog(null, e.getMessage());
        }       
    }
    
    public void fecharConexao() throws Exception{       
        con.close();
    }
}

道子:

package persistence;

import java.util.ArrayList;
import java.util.List;
import entity.Paciente;

public class PacienteDao extends Dao {
    
    public void efetuarCadastro(Paciente p) throws Exception {
        abrirConexao();
        stmt = con.prepareStatement("insert into paciente values(?,?,?,?)");
        stmt.setString(1, p.getCpf());
        stmt.setString(2, p.getNome());
        stmt.setInt(3, p.getIdade());
        stmt.setString(4, p.getTelefone());
        stmt.execute();
        stmt.close();
        fecharConexao();
    }
    
    public List<Paciente> listaPacientes() {
        try {
            abrirConexao();
            stmt = con.prepareStatement("select * from paciente");
            rs = stmt.executeQuery();
            List<Paciente> lista = new ArrayList<Paciente>();
            while (rs.next()) {
                Paciente p = new Paciente();
                p.setCpf(rs.getString("cpf"));
                p.setNome(rs.getString("nome"));
                p.setIdade(rs.getInt("idade"));
                p.setTelefone(rs.getString("tel"));
                lista.add(p);
            }
            fecharConexao();
            return lista;
        } catch (Exception e) {
            System.out.println(e.getMessage());
            return null;
        }
    }

    public Paciente mostraPaciente(String cpf) throws Exception {

            abrirConexao();
            stmt = con.prepareStatement("select * from paciente where cpf = ? ");
            rs = stmt.executeQuery();           
            Paciente p = null;
            if (rs.next()) {
                p = new Paciente();
                p.setCpf(rs.getString("cpf"));
                p.setNome(rs.getString("nome"));
                p.setIdade(rs.getInt("idade"));
                p.setTelefone(rs.getString("telefone"));                
            }
            fecharConexao();
            return p;
    }

}

标签: javajsfservletsjstljavabeans

解决方案


我知道了!它需要将 mysql-connector-java-8.0.26.jar 包含在库中(在 lib 文件夹中),位于 WEB-INF 下方。但是感谢 DanielBarbarian,因为他指出了有关 JOptionPane 的一个重要主题。实际上我的应用程序不是一个摇摆应用程序,所以 JOptionPane 没有意义。这是因为我从其他可能是 Swing 应用程序的地方复制了它。


推荐阅读