회원가입 후 로그인 페이지로 redirect하려는데 404 에러가 나서 정리해봤다.
회원가입 페이지 ('/member/join.do')
로그인 페이지 ('/login/login.do')
@Controller
@RequestMapping(value= "/member")
public class MemberController {
@PostMapping("/join.do")
public String memberJoin(Member member) {
memberService.join(member);
return "redirect:login/login.do";
}
}
내가 예상한 결과
회원가입 후 '/login/login.do' 였는데...
return "redirect:login/login.do"; (X)
return "redirect:/login/login.do"; (O)
redirect: 뒤에 "/"로 시작하지 않으면 @RequestMapping 경로를 기준으로 Redirect 된다.
"redirect:" 뒤에 완전한 URL을 적는다면, 해당 URL로 Redirect 된다.
출처: https://best421.tistory.com/53 [Updates available:티스토리]
내 경우 redirect: 옆에 /(슬래시)가 빠져있었기때문에
@RequestMapping(value="/member") 가 참고되어 url에 붙었던 것이다.
@PostMapping("/join.do")
public String memberJoin(Member member) {
memberService.join(member);
String path = "/login/login.do";
return "redirect:" + path;
}
이렇게 수정해주면 잘 이동한다.
회원가입 후 로그인 페이지로 이동할 때 Forward 대신 Redirect를 쓰는 이유.
Redirect는 Web Container로 명령이 들어오면, 웹 브라우저에게 다른 페이지로 이동하라고 명령을 내립니다.
그러면 웹 브라우저는 URL을 지시된 주소로 바꾸고 해당 주소로 이동합니다.
다른 웹 컨테이너에 있는 주소로 이동하며 새로운 페이지에서는 Request와 Response 객체가 새롭게 생성됩니다.
최초 요청 받은 url1에서 클라이언트에 redirect할 url2를 반환하고,
클라이언트에서는 새로운 요청을 생성하여 url2에 다시 요청을 보낸다.
따라서 최초에 생성된 Response Request 객체는 유효하지 않고 새롭게 생성되는 것이다.
그래서 회원가입시 새로고침을 눌러도 회원가입 요청 정보는 존재하지않으므로 여러번 회원가입되지 않는다.
그래서 시스템에 변화가 생기는 요청(회원가입, 글쓰기 등)의 경우 redirection을 사용하는것이 바람직하다.
출처: https://mangkyu.tistory.com/51 [MangKyu's Diary:티스토리]
'자바' 카테고리의 다른 글
[자바의 정석] ch2-11 기본형의 종류와 범위 (0) | 2022.11.20 |
---|---|
[Java] Optional<T> isPresent, ifPresent 사용법 (0) | 2022.08.28 |
[백준 1152] 자바 단어의 개수 (0) | 2022.08.13 |
[java]LinkedList (0) | 2021.12.02 |
Hashmap 관련함수 (0) | 2021.11.24 |