Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / JSP + Servlets / 9 сообщений из 9, страница 1 из 1
16.02.2015, 23:02
    #38881192
Валисий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
всем добрый вечер!
у меня ситуация: есть jsp, на котором есть таблица товаров (берется из БД). есть сервлет testServlet, с url-ом hello. этот сервлет в методе doGet делает выборку из таблицы товаров и передает это в jsp, а методом doPost принимает данные из формы в jsp, удаляет даные в таблице, и возвращается в jsp.
Код сервлета hello:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
public class TestServlet extends HttpServlet {
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        try {
			List<Tovar> tovars = Factory.getInstance().getTovarDAO().getAllTovary();
	        req.setAttribute("tovary", tovars);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
        getServletContext().getRequestDispatcher("/Tovary.jsp").forward(req, resp);
    }
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Enumeration<String> ids = request.getParameterNames();
		while (ids.hasMoreElements())
		{
			try {
				Factory.getInstance().getTovarDAO().deleteTovarById(Long.parseLong(request.getParameter(ids.nextElement())));
			} catch (NumberFormatException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
        try {
			List<Tovar> tovars = Factory.getInstance().getTovarDAO().getAllTovary();
	        request.setAttribute("tovary", tovars);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		getServletContext().getRequestDispatcher("/Tovary.jsp").forward(request, response);
	}
}



Код jsp:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Goods</title>
</head>
<body>
<p>Pirotechincs for all!</p>
<%@ page import="java.util.*, logic.Tovar" %>
<%
	List<Tovar> tovars = (List<Tovar>) request.getAttribute("tovary");	
%>
<form action="hello" method="post">
<table border='1' width='100%'>
	<tr>
		<th>ID</th>
		<th>Name</th>
		<th>Measure</th>
		<th>Buying price</th>
		<th>Selling price</th>
		<th>Action</th>
	</tr>
<%
for(int i = 0; i < tovars.size(); ++i) { %>
	<tr><td>
    <%= tovars.get(i).getId() %> </td><td>
    <%= tovars.get(i).getName() %> </td><td>
    <%= tovars.get(i).getMeasure() %> </td><td>
    <%= tovars.get(i).getBprice() %> </td><td> 
    <%= tovars.get(i).getSprice() %> </td><td>
    <input type="checkbox" name="a <%= i %> " value= "<%= tovars.get(i).getId() %>">Delete </></td>
<% } %>
</table>
<br>
<input type="submit"/>
</form>
</body>
</html>



В таблице есть столбец с чекбоксами для того, чтобы отметить те записи, которые надо удалить. При нажатии "Отправить" - запрос POST. Сервлет hello принимает этот запрос, удаляет записи из БД, формирует таблицу по новой, и передает это в jsp.
суть вопроса: я зашел по УРЛ hello. первый запуск - все правильно, выборка из таблицы. выбрал записи для удаления, отправил POST - все прекрасно, выделенные записи удалены, таблица сформировалась по новой.
нажимаю кнопку "Обновить" - и идет тот же самый POST, который уже не нужен. мне нужно, чтобы по кнопке "обновить" обновлялась только таблица (то есть, проходили те действия, которые происходят при GET-запросе сервлета hello).
как исправить ситуацию? и вообще, правильно ли так строить архитектуру приложения? я только начинаю работать с сервлетами, поэтому мог сразу неправильно построить архитектуру.
...
Рейтинг: 0 / 0
17.02.2015, 06:24
    #38881258
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
ВалисийВ таблице есть столбец с чекбоксами для того, чтобы отметить те записи, которые надо удалить. При нажатии "Отправить" - запрос POST. Сервлет hello принимает этот запрос, удаляет записи из БД, формирует таблицу по новой, и передает это в jsp.
суть вопроса: я зашел по УРЛ hello. первый запуск - все правильно, выборка из таблицы. выбрал записи для удаления, отправил POST - все прекрасно, выделенные записи удалены, таблица сформировалась по новой.
нажимаю кнопку "Обновить" - и идет тот же самый POST, который уже не нужен. мне нужно, чтобы по кнопке "обновить" обновлялась только таблица (то есть, проходили те действия, которые происходят при GET-запросе сервлета hello).

Все правильно!
Обновить посылает последний отображенный запрос к серверу.

Валисийкак исправить ситуацию? и вообще, правильно ли так строить архитектуру приложения? я только начинаю работать с сервлетами, поэтому мог сразу неправильно построить архитектуру.

Ну вообще JSP, это не "стильно, модно, молодежно".
Сейчас мода на клиент написан на JavaScript, данные берутся из REST-ов.
(Причем берется фреймворк типа Angular'а)

Т.е. Клиент HTML + js, сервер REST (на чем угодно).
Запросы на сервер отправляются ч/з Ajax.

Применительно к вашей задаче.
1) Находите любую js библиотеку для работы с grid'ом. Обычно в них есть возможности для манипуляции с данными (добавить, изменить, удалить)
2) Смотрите какой JSON-формат принимает grid. Под него пишите сервлет реализующий REST-сервис.
...
4) PROFIT
...
Рейтинг: 0 / 0
17.02.2015, 14:11
    #38881742
Валисий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
Я понимаю, что все правильно (должен уйти последний запрос). А как бы мне так сделать, чтобы при обновлении запрос не уходил? Может, надо архитектуру перестроить как-то?
Давайте пока что не будем говорить о JS-библиотеках. У меня задача - это сделать с использованием JSP+Servlets. Я еще в этой теме плаваю. Куда уж тут о библиотеках говорить)
...
Рейтинг: 0 / 0
17.02.2015, 14:31
    #38881776
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
Валисий, попробуйте заменить это

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
try {
			List<Tovar> tovars = Factory.getInstance().getTovarDAO().getAllTovary();
	        request.setAttribute("tovary", tovars);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		getServletContext().getRequestDispatcher("/Tovary.jsp").forward(request, response);
	}



на это

Код: java
1.
response.sendRedirect("/Tovary.jsp");



Идея в том что после удаления, вы инициируете редирект, что есть с точки зрения бразуера абсолютно новый реквест, который сохранится в хистори последним. Тогда по ф5 он и будет вызываться
...
Рейтинг: 0 / 0
17.02.2015, 14:46
    #38881803
Валисий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
Спасибо, попробую! По результатам отпишусь.
...
Рейтинг: 0 / 0
17.02.2015, 14:59
    #38881816
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
Валисий,
либо вместо try на сервере, на клиенте
JS
Код: javascript
1.
location.reload(false);


после Отправить.
...
Рейтинг: 0 / 0
17.02.2015, 15:08
    #38881829
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
хотя если сохранился в истории....тогда на тебе все варианты редиректа)
на JS (location navigate history)
================
1,
1 <script language=”javascript” type=”text/javascript”>
2 window.location.href=”login.jsp?backurl=”+window.location.href;
3 </script>

2,
1 <script language=”javascript”>
2 alert(”back”);
3 window.history.back(-1);
4 </script>

3,
1 <script language=”javascript”>
2 window.navigate(”top.jsp”);
3 </script>

4,
1 <script language=”JavaScript”>
2 self.location=”top.htm”;
3 </script>

5,
view source
print?
1 <script language=”javascript”>
2 alert(”Access Violation”);
3 top.location=”error.jsp”;
4 </script>
...
Рейтинг: 0 / 0
18.02.2015, 00:31
    #38882346
Валисий
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
Помогло:
Код: java
1.
response.sendRedirect("/Tovary.jsp");


Только пришлось кое-что поменять:
Код: java
1.
response.sendRedirect("/ServletDemo/hello");


Потому что у меня Tovary.jsp в файле web.xml никак не отражен. Там только сервлет TestServlet, c URL hello.
...
Рейтинг: 0 / 0
18.02.2015, 01:56
    #38882362
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
JSP + Servlets
все правильно, там надо было ссылку на сервлет, я просто понятия не имел как он у вас обзывается:)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / JSP + Servlets / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]