새로고침해도 페이지 오류가 나지 않도록 하는 법 (redirect 사용해보기)

2024. 2. 29. 22:14· LANGUAGE/└ Java

환경 : Spring Tool Suite4, DBeaver

 

 페이지를 활용하여 데이터베이스에 데이터를 삽입한 후, 페이지 새로고침을 하게 되면 오류페이지가 발생한다. 

이미 삽입한 데이터를 또 삽입할 수 없을 뿐더러, 한 번 사용한 페이지에 재접근할 수 없기 때문인데, 이를 해결할 방법을 알아보자.


  - HtmlController.java

@Controller
@RequestMapping("/student")
public class StudentController {

	@Autowired
	private StudentDao dao;
	
	@GetMapping("/insert")//GET 방식 - 일반적인 주소를 이용한 접근
	public String insert1() {
		return "/WEB-INF/views/student/insert1.jsp";
	}
	
	@PostMapping("/insert")//POST 방식 - Form을 이용한 데이터 전송 접근
	public String insert2(@ModelAttribute StudentDto dto) {
		dao.insert(dto);
		return "redirect:insert3";
	}
	
	@RequestMapping("/insert3")
	public String insert3() {
		return "/WEB-INF/views/student/insertSuccess.jsp";
	}
}

 

  - insert.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>학생 등록 페이지</h1>

<%-- 
	절대경로
	<form action="/student/insertSuccess"></form>
	
	상대경로
	<form action="insertSuccess"></form>
--%>

<form action="insert" method="post">
	학교 <input name="studentSchool" type="text"> <br><br>
	이름 <input name="studentName" type="text"> <br><br>
	학년 <input name="studentGrade" type="text"> <br><br>
	반 <input name="studentClass" type="text"> <br><br>
	<button>학생등록</button>
</form>

 

 - insertSuccess.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<h1>학생 등록 완료!</h1>

(설명)

	@GetMapping("/insert")//GET 방식 - 일반적인 주소를 이용한 접근
	public String insert1() {
		return "/WEB-INF/views/student/insert1.jsp";
	}
	
	@PostMapping("/insert")//POST 방식 - Form을 이용한 데이터 전송 접근
	public String insert2(@ModelAttribute StudentDto dto) {
		dao.insert(dto);
		return "redirect:insert3";
	}
	
	@RequestMapping("/insert3")
	public String insert3() {
		return "/WEB-INF/views/student/insertSuccess.jsp";
	}

    (+) 같은 경로인 /insert를 받되, 데이터를 받는 방식을 Get 방식과 Post 방식으로 사용한다 

              → 그냥 URL로 페이지 접속 시 insert1() 메소드에 접속된다 (GET)

              → 데이터를 입력했을 경우 insert2() 메소드에 접속된다 (POST)

                   그런데, 여기서 insert2() 메소드는 insert3() 메소드로 redirect를 수행하게 된다

                   그렇게 넘어온 데이터가 insert3()의 리턴값인 경로로 들어가게 되고, 데이터 삽입을 수행한다.

                   그렇게 되면 새로고침을 해도 오류가 나지 않는것을 확인할 수 있다.


[ GET / POST 방식 ]

- 자세한 설명은 다른 글에 있습니다.

 

 간단히 설명하자면, 두 방식 모두 서버에 요청을 하는 메서드이다. 

단, GET 방식URL에 데이터를 붙여보내고

POST 방식BODY에 데이터를 넣어 숨겨 보낸다. 


[ HTTP REDIRECT란? ]

 

  •  브라우저에게 다른 URL(길, 방향)을 지시할 수 있는 것
  •  리다이렉트를 사용하는
        └ 결제 → 로그인하고 결제하시오 → 로그인 페이지로 이동 됨(리다이렉트) → 로그인 완료 → 다시 결제창으로

     참고: https://webstone.tistory.com/65

 

 

 

 

 

 

 

개인 공부 기록용입니다:)

728x90