Мое простое веб-приложение выглядит следующим образом: у меня есть форма JSP (MyForm.JSP
), которая принимает пользовательский ввод и передает его моему первому сервлету ("/myfirstservlet"
).
Этот сервлет обрабатывает вставку SQL введенных пользователем значений в мою таблицу Fruits
, а затем перенаправляет пользователя в мой сервлет результатов ("/results"
).
Мой сервлет результатов затем проверяет параметр "ADD"
и, если "true" (т. Е. Он равен "success"
), он, наконец, перенаправляет пользователя в мой JSP результатов (Results.JSP
), который хранится внутрипуть: WEB-INF/MyFolder/Results.jsp
.
Моя форма JSP (MyForm.JSP
) также хранится внутри пути: WEB-INF/MyFolder/MyForm.jsp
Я сделал так, чтобы пользователь не мог повторно отправить формунажав кнопку обновления на странице результатов JSP, чтобы избежать одновременного ввода в базу данных нескольких записей одних и тех же данных, которые были только что ранее введены.
Теперь моя проблема: как запретить пользователю нажимать на кнопкуКнопка отправки несколько раз в моей форме (MyForm.JSP
), тем самым предотвращая ввод в мою базу данных нескольких строк одних и тех же данных БЕЗ с использованием JavaScript или JQuery?
В основномЯ хочу подтвердить на своем сервере, а не на стороне клиента, что форма была отправлена только ОДИН РАЗ.
Моя форма JSP (MyForm.JSP
):
<form action="myfirstservlet" do="POST">
<input type="text" name="fruit"><br>
<input type="text" name="color"><br>
<input type="submit" value="Submit">
</form>
Мой первый сервлет("/myfirstservlet"
):
protected void doPost(...){
String fruit = request.getParameter("fruit");
String color = request.getParameter("color");
String sql = "INSERT INTO fruits (fruit, color) VALUES" + "(\"" + fruit + "\", \"" + color + "\");";
utilitySQL.sqlInsert(sql); // My utility class that handles sql inserts
response.sendRedirect("results?ADD=SUCCESS");
}
Myсервлет результатов ("/results"
):
protected void doPost(...){
response.setContentType("text/html");
if (request.getParameter("ADD").equals("SUCCESS"))
request.getRequestDispatcher("WEB-INF/MyFolder/Results.jsp").forward(request, response);
}
Мои результаты JSP (Results.JSP
):
<body>
<h1>Results JSP</h1>
//Reads data from MySQL database and prints it as an Array List.
</body>
РЕДАКТИРОВАТЬ: Исправлено мое подготовленное состояние в моем первомсервлет:
protected void doPost(...){
String fruit = request.getParameter("fruit");
String color = request.getParameter("color");
try
{
String sql2 = "INSERT INTO practice (fruit, color) VALUES (?, ?);";
Connection connect = SQLHelperClass.connectOnly();
PreparedStatement pstmt;
pstmt = connect.prepareStatement(sql2);
pstmt.setString(1, fruit);
pstmt.setString(2, color);
pstmt.execute();
response.sendRedirect("results?ADD=success");
}
catch (SQLException e)
{
e.printStackTrace();
}
}