这是最简单的解决方案
<%@page import="java.util.*"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%!
//This List is just for demonstration purposes
List<String> names = new ArrayList<String>();
%>
<%
if(request.getParameter("name")!=null ){
names.add(request.getParameter("name"));
session.setAttribute("nameList", names);
//Here you put your database insert code
//Whenever the code execution reaches this line ,
//then it means that you have a new page submission
//and not a refresh or f5 case
response.sendRedirect("index.jsp");
}
%>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form action="index.jsp" method="post">
<input type="text" id="name" name="name"/>
</form>
<p>
<table>
<c:forEach items="${nameList}" var="element">
<tr>
<td>Name: <c:out value="${element}"/> </td>
</tr>
</c:forEach>
</table>
</p>
</body>
</html>
诀窍在于response.sendRedirect("index.jsp");
. 这使得null
所有请求参数。如果f5
orrefresh
被命中,则if
永远不会执行。如果是正常提交,则if
执行 并调用 response.sendRedirect("index.jsp");
.
总之,您真正需要做的就是:
1) 检查if(request.getParameter("name")!=null )
2)如果以上是真的,那么做数据库插入
3)如果以上是真的,那么response.sendRedirect("index.jsp");
更新
if(request.getParameter("name")!=null ){
DbUtility.addNameToDb(request.getParameter("name"));
ArrayList<String> currentList = DbUtility.getAllNamesFromDb();
session.setAttribute("nameList", currentList);
response.sendRedirect("index.jsp");
}
你只需要实现这两种方法。这addNameToDb(String)
将insert
在您的数据库中生成。并且getAllNamesFromDb()
将返回一个ArrayList<String>
对象,该对象将代表您数据库中的条目。(并且您不再需要names
我之前在第一个答案中介绍的列表)