Java 在servlet类和jsp.file之间传递属性时如何解决空指针异常
运行Java 在servlet类和jsp.file之间传递属性时如何解决空指针异常,java,mysql,jsp,servlets,attributes,Java,Mysql,Jsp,Servlets,Attributes,运行userList.jsp时,我不断收到NullPointerException错误: 我试图输出用户对象数组列表的大小: <%-- Document : userList Created on : 13-Mar-2019, 22:08:54 Author : sonia --%> <%@page import="java.util.ArrayList"%> <%@page import="java.util.List"%&
userList.jsp
时,我不断收到NullPointerException
错误:
我试图输出用户对象数组列表的大小:
<%--
Document : userList
Created on : 13-Mar-2019, 22:08:54
Author : sonia
--%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@page import="com.mycompany.gartisweb.domain.User"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<% ArrayList users = (ArrayList)request.getAttribute("users"); %>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>List of Users</title>
</head>
<body>
<% users.size(); %>
</body>
</html>
UserDao类中的findAllUsers()函数:
@Override
public ArrayList<User> findAllUsers() {
ArrayList<User> userList = new ArrayList<>();
Connection con;
con = DBConnection.createConnection();
Statement statement = null;
ResultSet rs;
try {
con.setAutoCommit(false);
statement = con.createStatement();
rs = statement.executeQuery("SELECT * FROM user");
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setEmail(rs.getString(2));
user.setPassword(rs.getString(3));
user.setFirstName(rs.getString(4));
user.setSurName(rs.getString(5));
user.setRole(rs.getString(6));
userList.add(user);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
}
return userList;
}
@覆盖
公共数组列表findAllUsers(){
ArrayList userList=新的ArrayList();
连接con;
con=DBConnection.createConnection();
Statement=null;
结果集rs;
试一试{
con.setAutoCommit(假);
statement=con.createStatement();
rs=语句.executeQuery(“从用户选择*);
while(rs.next()){
用户=新用户();
user.setId(rs.getInt(1));
user.setEmail(rs.getString(2));
user.setPassword(rs.getString(3));
user.setFirstName(rs.getString(4));
user.setSurName(rs.getString(5));
user.setRole(rs.getString(6));
添加(用户);
}
}捕获(SQLE异常){
抛出新的运行时异常(e);
}最后{
如果(con!=null){
试一试{
con.close();
}catch(SQLException-ex){
抛出新的运行时异常(ex);
}
}
if(语句!=null){
试一试{
语句。close();
}catch(SQLException-ex){
抛出新的运行时异常(ex);
}
}
}
返回用户列表;
}
我在代码中找不到错误,有人能解释一下我如何解决这个问题吗?这是因为您直接使用
http://.../userList.jsp
URL。使用映射到UserListServlet
的URL,以便servlet可以设置变量并执行转发
您可能还想执行
来显示用户计数。如果服务方法在一次尝试中,它是带有异常的catch,并且在内部catch,则保留整个代码。您可以打印堆栈跟踪,它将显示异常发生的行号。确定我已执行此操作,但是现在arraylist的大小仍然没有显示出来(参见上面的屏幕截图)…@SoniaMathews而不是
@Override
public ArrayList<User> findAllUsers() {
ArrayList<User> userList = new ArrayList<>();
Connection con;
con = DBConnection.createConnection();
Statement statement = null;
ResultSet rs;
try {
con.setAutoCommit(false);
statement = con.createStatement();
rs = statement.executeQuery("SELECT * FROM user");
while (rs.next()) {
User user = new User();
user.setId(rs.getInt(1));
user.setEmail(rs.getString(2));
user.setPassword(rs.getString(3));
user.setFirstName(rs.getString(4));
user.setSurName(rs.getString(5));
user.setRole(rs.getString(6));
userList.add(user);
}
} catch (SQLException e) {
throw new RuntimeException(e);
} finally {
if (con != null) {
try {
con.close();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
if (statement != null) {
try {
statement.close();
} catch (SQLException ex) {
throw new RuntimeException(ex);
}
}
}
return userList;
}