JSP/Resubmit Protection

JSP Form Resubmission Protection

Soul-Learner 2014. 8. 1. 11:14

폼전송 후 새로고침이나 되돌아가기 명령시 폼이 다시 전송되는 현상 방지


폼 전송시 서버측에서 서블릿이나 JSP 를 이용하여 처리한 후에 특정 JSP로 forward 한 경우에는 브라우저에서 콘트롤러의 웹경로를 기억하기 때문에 되돌아가기나 새로고침을 수행하면 폼이 다시 전송되거나 다시 전송할 의사를 묻는 경고창이 열린다.

브라우저가 서버측 콘트롤러의 웹경로를 기억하지 못하도록 하면 이러한 문제는 발생하지 않는다

즉, forward 를 사용하면 웹브라우저가 콘트롤러의 웹경로를 기억하므로 forward 로 연결하지 않고 response.sendRedirect()으로 연결하면 된다.


폼을 가진 JSP

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

response.setHeader("Cache-Control","no-cache"); 

response.setHeader("Pragma","no-cache"); 

response.setDateHeader ("Expires", -1);

%>

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE"> 

<META HTTP-EQUIV="Expires" CONTENT="-1">

<title>No Cache setting</title>

</head>

<body>


<form action="form_proc.jsp" method="post">

아이디 <input type="text" name="id">

<input type="submit" value="전 송">

</form>


</body>

</html>



폼을 처리하는 콘트롤러(form_proc.jsp)

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<%

String id = request.getParameter("id");

System.out.println("id="+id);

response.sendRedirect("main.jsp");

%>




처리 후 응답에 사용되는 JSP(main.jsp)

<%@ page language="java" contentType="text/html; charset=EUC-KR"

    pageEncoding="EUC-KR"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="EUC-KR">

<title>메인 페이지</title>

</head>

<body>

여기는 메인 페이지

</body>

</html>