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
개인 공부 기록용입니다:)
'· LANGUAGE > └ Java' 카테고리의 다른 글
[ Java ] swagger(springdoc) 사용하기 (+예제 실습) (0) | 2024.05.12 |
---|---|
[ Java / Database ] 최종 로그인 시간 기록하기 (0) | 2024.03.19 |
[ Java ] TreeSet 기본 구조 이해 및 실습 (0) | 2024.02.16 |
[ Spring / Java ] DecimalFromat() 메서드 (0) | 2024.02.13 |
[ Java / Spring ] @RequestParam (0) | 2024.02.07 |