#java #mysql #jsp #servlets #attributes
#java #mysql #jsp #сервлеты #атрибуты
Вопрос:
Я продолжаю получать NullPointerException
ошибку при запуске userList.jsp
:
Я пытаюсь вывести размер списка пользовательских объектов массива:
<%--
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>
Вот как выглядит мой класс servlet:
public class UserListServlet extends HttpServlet {
public UserListServlet() {
}
//private final UserDao ud = new UserDao();
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// List<User> users = new ArrayList();
// users = ud.findAllUsers();
request.setAttribute("users", new UserDao().findAllUsers());
ServletContext servletContext = getServletContext();
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("userList.jsp");
//RequestDispatcher rd = request.getRequestDispatcher("userList.jsp");
requestDispatcher.forward(request, response);
//rd.forward(request, response);
}
Функция findAllUsers() в классе UserDao:
@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;
}
Я не могу найти ошибку в своем коде, кто-нибудь может объяснить мне, как я мог бы решить эту проблему?
Комментарии:
1. Сохраните весь код, если
service
метод находится в try, и он перехватывается с исключением, а внутри catch вы печатаете трассировку стека, которая покажет номер строки, в которой возникает исключение
Ответ №1:
Это потому, что вы обращаетесь к JSP напрямую с http://.../userList.jsp
URL. Используйте URL, который сопоставлен с UserListServlet
, чтобы сервлет мог установить переменную и выполнить пересылку.
Вы также, вероятно, захотите сделать <%= users.size(); %>
для отображения количества пользователей.
Комментарии:
1. Хорошо, я сделал это, но теперь размер arraylist по-прежнему не отображается (см. скриншот выше) …
2. @SoniaMathews вместо
<%
использования<%=
, как предложено в ответе.