表單重複提交
方法1:
<script type="text/javascript">
var iscommitted=false;
function dosubmit(){
if(!iscommitted){
iscommitted=true;
document.getElementById("tbn").disabled="disabled";
return true;
}else{
return false;
}
}
</script>
<form action="/day07/servlet/doFormServlet" method="post" onsubmit="return dosubmit()">
用戶名:<input type="text" name="username"/>
<input id="btn" type="submit" value="提交"/>
</form>
方法二
<script type="text/javascript">
var iscommitted=false;
function dosubmit(){
if(!iscommitted){
iscommitted=true;
document.getElementById("tbn").disabled="disabled";
return true;
}else{
return false;
}
}
</script>
<form action="/day07/servlet/doFormServlet" method="post" onsubmit="return dosubmit()">
用戶名:<input type="text" name="username"/>
<input id="btn" type="submit" value="提交"/>
<input name="token" type="hidden" value="${token}"/>
</form>
刷新重複提交
方法1:重定向解決
這是shuaxin.jsp
<script src="./js/jquery-1.8.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
function shua(){
var id=$("#id").val();
location.href="<%=request.getContextPath()%>/personServlet?method=add&id="+id;
}
</script>
</head>
<body>
<input type="text" name="id" id="id">
<button onclick="shua()">點我呀</button>
</body>
這是personServlet 用response.sendRedirect
跳轉會改變地址所以可以防止
private void add(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
// TODO Auto-generated method stub
String id = request.getParameter("id");
List list = (List)request.getSession().getAttribute("list");
if(list==null){
list=new ArrayList<String>();
request.getSession().setAttribute("list", list);
}
list.add(id);
request.setAttribute("aa", "你大爺");//得不到因爲用的是重定向只能轉發session的數據
//防止刷新再次提交id;因爲轉發地址不變http://localhost:8080/test_serialize/personServlet?method=add&id=2
response.sendRedirect("/test_serialize/bianli.jsp");
//request.getRequestDispatcher("/bianli.jsp").forward(request, response);
}
這是bianli.jsp
<body>
<c:forEach items="${list }" var="l">
<p>${l}</p>
</c:forEach>
${aa }
//這裏的aa得不到因爲重定向後就無法得到request域中的值只能遍歷session的值
</body>
方法二:session解決
先在shuaxin.jsp給session設值
<%
session.setAttribute("type", "new");
%>
<input type="text" name="id" id="id">
<button onclick="shua()">點我呀</button>
然後在servlet裏取值判斷,轉發到bianli.jsp的時候remove掉sessiontype
的值
String type =(String) request.getSession().getAttribute("type");
if(type==null){
request.getRequestDispatcher("/bianli.jsp").forward(request, response);
}else{
String id = request.getParameter("id");
List list = (List)request.getSession().getAttribute("list");
if(list==null){
list=new ArrayList<String>();
request.getSession().setAttribute("list", list);
}
list.add(id);
request.getSession().removeAttribute("type");
request.getRequestDispatcher("/bianli.jsp").forward(request, response);
}
最後轉發到bianli.jsp中
因爲bianli.jsp沒有給session賦值所以傳到servlet中session爲空那麼就直接跳轉到bianli.jsp中