java - jsp页面上提交表单时永远运行
问题描述
在下面的 jsp 页面 (cadastroPaciente.jsp) 上提交表单时,系统将永远运行而不会返回任何错误。
我已经在测试类中单独测试了连接,并且没有连接到数据库的 Servlet(仅构建对象并将其返回到屏幕)工作。但是当我把它放在 Servlet 中保存在数据库中时,它会永远运行并且不会保存在数据库中。
构建路径具有:
- jakarta.servlet.jsp.jstl-api-2.0.0.jar
- 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;
}
}
解决方案
我知道了!它需要将 mysql-connector-java-8.0.26.jar 包含在库中(在 lib 文件夹中),位于 WEB-INF 下方。但是感谢 DanielBarbarian,因为他指出了有关 JOptionPane 的一个重要主题。实际上我的应用程序不是一个摇摆应用程序,所以 JOptionPane 没有意义。这是因为我从其他可能是 Swing 应用程序的地方复制了它。
推荐阅读
- java - 与 Collection.sort() 相比,使用 stream().sorted() 有什么优势吗?
- allure - Teamcity 中的 Allure 报告构建步骤返回“无法复制历史文件”错误
- database - 使用 TRIGGER 根据另一个表插入更新表行?
- c# - 如何在 C# .Net 中使用 InsertOneAsync 将文档插入 MongoDB 并返回相同的文档或其 ID
- python - 用条件总结前面的行,python
- node.js - twitter 推文媒体实体检索 [object object ] node.js
- php - 生成和下载 JSON 文件总是返回一个 html 文件
- c# - 来自 Dynamics CRM 的 WebAPI 调用
- agent - 并行 ContractnetResponder 和 Contractnetresponder
- python - 如何按索引添加两个字符串