从mysql数据库中获取数据并传到jsp网页表格中显示,浏览器报500.
前端代码如下
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.eneity.Custom" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>test</title>
</head>
<body>
<table>
<tr>
<td>客户号</td>
<td>姓名</td>
<td>联系电话</td>
<td>地址</td>
</tr>
<%
ArrayList<Custom> list = (ArrayList<Custom>) request.getAttribute("list");
System.out.println("test1");
for (Custom custom : list) {
System.out.println("test2");
%>
<tr>
<td><%=custom.getId()%></td>
<td><%=custom.getName()%></td>
<td><%=custom.getPhone()%></td>
<td><%=custom.getAdd()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
实体如下
package com.eneity;
import lombok.Data;
//客户信息
@Data
public class Custom {
private String id;//客户号
private String name;//姓名
private String phone;//联系电话
private String add;//地址
public Custom(){
}
public Custom(String id, String name, String phone, String add) {
this.id = id;
this.name = name;
this.phone = phone;
this.add = add;
}
public String getId() {
return id;
}
public String getName() {
return name;
}
public String getPhone() {
return phone;
}
public String getAdd() {
return add;
}
public void setId(String id) {
this.id = id;
}
public void setName(String name) {
this.name = name;
}
public void setPhone(String phone) {
this.phone = phone;
}
public void setAdd(String add) {
this.add = add;
}
@Override
public String toString() {
return "Custom{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", phone='" + phone + '\'' +
", add='" + add + '\'' +
'}';
}
}
自定义JDBC工具类如下
package com.utils;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.sql.*;
import java.util.Properties;
public class JDBCUtils {
private static String url;
private static String user;
private static String password;
private static String driver;
/**
* jdbc.properties配置文件读取,只用执行一次,使用静态代码块
*/
static {
try {
//1. 创建Properties集合类。
Properties properties = new Properties();
//获取src路径下的文件的方式--->ClassLoader 类加载器
ClassLoader classLoader = JDBCUtils.class.getClassLoader();
URL res = classLoader.getResource("jdbc.properties");
String path = res.getPath();
//2. 加载文件
properties.load(new FileReader(path));
url = properties.getProperty("jdbc:mysql://localhost:3306/数据库名称");
user = properties.getProperty("用户名");
password = properties.getProperty("密码");
driver = properties.getProperty("com.mysql.cj.jdbc.Driver");
//注册驱动
Class.forName(driver);
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
/**
* 获取连接
* @return 连接对象
*/
public static Connection getConnection() throws SQLException {
return DriverManager.getConnection(url, user, password);
}
/**
* 释放资源
* @param statement
* @param connection
*/
public static void close(Statement statement, Connection connection) {
if (statement != null) {
try {
statement.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
/**
* 释放资源
* @param resultSet
* @param statement
* @param connection
*/
public static void close(Statement statement, Connection connection, ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
后端读取数据库信息
```java
package com.servlet;
import com.eneity.Custom;
import com.utils.JDBCUtils;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/test")
public class CustomServlet extends HttpServlet {
// 访问Servlet默认访问service方法
@Override
// req浏览器向服务器发送消息;resp服务器处理完将信息返回给浏览器
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("开始");
Connection connection = null;
PreparedStatement statement = null;
ResultSet resultSet = null;
ArrayList<Custom> list = new ArrayList<>();
try {
connection = JDBCUtils.getConnection();
String sql = "SELECT * FROM 客户信息";
statement = connection.prepareStatement(sql);
System.out.println(statement);
resultSet = statement.executeQuery();
while (resultSet.next()) {
String id = resultSet.getString(1);
String name = resultSet.getString(2);
String phone= resultSet.getString(3);
String add = resultSet.getString(4);
Custom custom = new Custom(id,name,phone,add);
list.add(custom);
}
for (Custom custom : list) {
System.out.println(custom);
}
} catch (SQLException throwable) {
throwable.printStackTrace();
} finally {
JDBCUtils.close(statement,connection,resultSet);
}
// 把list数据放到一块内存里面
request.setAttribute("list",list);
// 跳转到student_list.jsp展示数据
// Dispatcher:分发 forward:转发
request.getRequestDispatcher("test.jsp").forward(request,response);
}
}
```
根据报错提示,可以看出list是一个空对象null,所以导致出来了空指针异常。
检查一下控制台是否报错了,看下报错信息。
看看日志,日志提示什么
根据前端提供的代码,可能是以下原因导致了500错误:
1、ArrayList 类型的变量 list 无法在 JSP 页面中正确显示,可能是因为 Custom 类没有正确导入或者没有正确实例化。
2、在 JSP 页面中使用 <% %> 标记来嵌入 Java 代码时,需要确保 Java 代码没有语法错误或逻辑错误。
3、服务器可能无法连接到 MySQL 数据库,或者无法从数据库中检索数据。请确保您的数据库连接信息正确无误,并且数据库用户具有足够的权限来执行所需的操作。
参考文章https://blog.csdn.net/m0_51649818/article/details/119579452
不知道你这个问题是否已经解决, 如果还没有解决的话:用图形化管理工具Navicat Premium 连接MySQL数据库,在数据库“test”下建立一张名为“word”的数据表。