Post
요청을 처리한 뒤 Redirect
를 통해 Get
요청으로 변환하는 패턴을 말합니다. 멱등성
보장을 위해 사용됩니다. PRG패턴을 사용하지 않을 때 Post요청을 새로고침하면 이전의 요청이 다시 한번 전송되는 문제가 발생할 수 있습니다. Servlet환경이라면
@NoArgsConstructor
public class OrderController extends HttpServlet { // /order로 매핑된 상태
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try {
response.sendRedirect("/order"); // 아래 있는 doGet을 호출하게 됨
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
RequestDispatcher rd = request.getRequestDispatcher(LabelFormat.PREFIX.label() + fileName + LabelFormat.SUFFIX.label());
rd.forward(request, response);
}
}
Spring환경이라면
@Controller
class TestController {
@PostMapping("/pay")
public String pay(){
// 결제 로직
return "redirect:/success"; // get요청으로 redirect
}
@GetMapping("/success")
public String success(){
return "success";
}
}