JSP-форма отправки и проблема с заполнением списка

#java #hibernate #jsp

#java #переход в спящий режим #jsp

Вопрос:

У меня возникла пара проблем с простым приложением JSP. Когда я захожу на страницы добавления или удаления, я могу ввести данные и отправить их, элемент либо добавляется, либо удаляется в / из базы данных, как и должно быть, но вместо того, чтобы возвращать меня на страницу, он отправляет меня на страницу с надписью «Отправлено по адресу: / ToDoList». Я могу использовать кнопку «Назад», чтобы вернуться на страницу, но предполагается, что это просто перезагрузит ту же страницу jsp. Раньше это работало, но я не уверен, что я изменил.

Кроме того, я пытаюсь заполнить таблицу данными из базы данных на странице Показать список (show.jsp), но это выдает мне исключение ConcurrentModificationException, которое я не могу определить. Я действительно не уверен, что я здесь делаю не так. Любая помощь приветствуется. Объект ListItem — это просто int ItemId и string ItemDesc. Следующий код:

добавить.jsp

 <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Add an item</title>
</head>
<body>
<h1>Add an item</h1>
<form action="AddItem" method="post">
	<table>
		<tr><td><input type="text" name="desc" value="" size="100"/></td></tr>
		<tr><td><input type="submit" value="Submit" name="addSub" /></td></tr>
	</table>
</form>
<input type="submit" name="btnAdd" value="Back to menu" onclick="window.location='/ToDoList/index.jsp'">
</body>
</html>  

удалить.jsp

 <%@page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Show list</title>
</head>
<body>
<h1>To-Do List</h1>
<form action="ShowList" method="post">
	<input type="submit" value="Populate">
</form>
	<table>
		<c:forEach var="item" items="${dispList}">
	  		<tr>
	  			<td>${item.itemID}</td>
	  			<td>${item.itemDesc}.</td>
	  		</tr>
		</c:forEach>
	</table>
<input type="submit" name="btnAdd" value="Back to menu" onclick="window.location='/ToDoList/index.jsp'">
</body>
</html>  

показать.jsp

 <%@page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Show list</title>
</head>
<body>
<h1>To-Do List</h1>
<form action="ShowList" method="post">
	<input type="submit" value="Populate">
</form>
	<table>
		<c:forEach var="item" items="${dispList}">
	  		<tr>
	  			<td>${item.itemID}</td>
	  			<td>${item.itemDesc}.</td>
	  		</tr>
		</c:forEach>
	</table>
<input type="submit" name="btnAdd" value="Back to menu" onclick="window.location='/ToDoList/index.jsp'">
</body>
</html>  

ItemList.java

 package todolist;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;

import org.apache.tomcat.util.http.fileupload.util.LimitedInputStream;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.hibernate.query.Query;

public class ItemList {
	List<ListItem> list = new ArrayList<>();
	List<ListItem> tempList = new ArrayList<>();

	public static SessionFactory factory;
	
	public ItemList() {
		super();
	}

	public void addItem(String itemStr) {		
		//list.add(item);
		//list.get(list.size() - 1).setItemNumber(list.size());
		ListItem item = new ListItem(itemStr);
		try {
			factory = new Configuration().configure().buildSessionFactory();
		} catch (Throwable ex) { 
			System.err.println("Failed to create sessionFactory object."   ex);
			throw new ExceptionInInitializerError(ex); 
		}
		Session session = factory.openSession();
	    Transaction tx = null;
	    Integer itemID = null;
	    try {
	       tx = session.beginTransaction();
	       itemID = (Integer) session.save(item);
		   tx.commit();
	    } catch (HibernateException e) {
	    	if (tx!=null) tx.rollback();
	    	e.printStackTrace(); 
		} finally {
			session.close(); 
		}
	}
	
	public void delItem(int itemNbr) {
		try {
			factory = new Configuration().configure().buildSessionFactory();
		} catch (Throwable ex) { 
			System.err.println("Failed to create sessionFactory object."   ex);
			throw new ExceptionInInitializerError(ex); 
		}
	    Session session = factory.openSession();		
	    Transaction tx = null;
	    ListItem item2 = (ListItem)session.get(ListItem.class, itemNbr);
	    try {
	       tx = session.beginTransaction();
	       session.delete(item2); 
	       tx.commit();
	    } catch (HibernateException e) {
	       if (tx!=null) tx.rollback();
	       e.printStackTrace(); 
	    } finally {
	       session.close(); 
	    }
	}
	
	public List<ListItem> getList() {
		try {
			factory = new Configuration().configure().buildSessionFactory();
		} catch (Throwable ex) { 
			System.err.println("Failed to create sessionFactory object."   ex);
			throw new ExceptionInInitializerError(ex); 
		}
		Session session = factory.openSession();
		Transaction tx = null;
	    try {
	      tx = session.beginTransaction();
	      Query<ListItem> queryList = session.createQuery("FROM itemlist");
	      tempList = queryList.list();
	      tx.commit();   
	      } catch (HibernateException e) {
	         if (tx!=null) tx.rollback();
	         e.printStackTrace(); 
	      } finally {
	         session.close(); 
	      }
	    list = tempList;
	    return list;
	}
	
	public int size() {
		return list.size();
	}
}  

AddItem.java

 package todolist;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AddItem
 */
@WebServlet("/AddItem")
public class AddItem extends HttpServlet {
	private static final long serialVersionUID = 1L;
	ItemList list = new ItemList();
    /**
     * @see HttpServlet#HttpServlet()
     */
    public AddItem() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher rd = request.getRequestDispatcher("add.jsp");
		rd.forward(request, response);	
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(request.getParameter("desc")!=null) {
			String desc = request.getParameter("desc");
			list.addItem(desc);
			RequestDispatcher rd = request.getRequestDispatcher("add.jsp");
			rd.forward(request, response);
		}
		
	}

}  

DelItem.java

 package todolist;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.hibernate.HibernateException;

/**
 * Servlet implementation class DelItem
 */
@WebServlet("/DelItem")
public class DelItem extends HttpServlet {
	private static final long serialVersionUID = 1L;
	ItemList list = new ItemList();       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public DelItem() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		RequestDispatcher rd = request.getRequestDispatcher("delete.jsp");
		rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		if(request.getParameter("itemNbr")!=null amp;amp; request.getParameter("itemNbr")!="") {
			int itemNbr = Integer.parseInt(request.getParameter("itemNbr"));
			list.delItem(itemNbr);
			RequestDispatcher rd = request.getRequestDispatcher("delete.jsp");
			rd.forward(request, response);
		}

	}

}  

ShowList.java

 package todolist;

import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class ShowList
 */
@WebServlet("/ShowList")
public class ShowList extends HttpServlet {
	private static final long serialVersionUID = 1L;
	ItemList list2 = new ItemList();
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ShowList() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		RequestDispatcher rd = request.getRequestDispatcher("show.jsp");
        rd.forward(request, response);
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		List<ListItem> tempList = new ArrayList<>();
		tempList = list2.getList();
		request.setAttribute("dispList", tempList);
        RequestDispatcher rd = request.getRequestDispatcher("show.jsp");
        rd.forward(request, response);
	}

}