💻 뚝딱뚝딱
[개발일지#025] 에러페이지 만들기 (400, 500)
뚜루리
2024. 3. 12. 16:49
728x90
320x100
[참고]
김영한님 스프링 강의를 바탕으로 진행되는 토이프로젝트의 과정을 기록하는 글입니다.
둥근 피드백은 언제나 환영입니다.
[오늘의 개발내용]
1. 에러페이지 만들기
[서론]
스프링부트는 복잡한 에러페이지 구현과정을 다 제공해주기 때문에
400, 500 에러페이지 html을 알맞는 경로에 만들어 주기만 하면 됨.
1. 에러페이지 만들기
- 생성위치는 templates/error/404.html or 500.html
404.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container" style="max-width: 600px">
<div class="py-5 text-center">
<h2>404 오류 화면</h2> </div>
<div>
<p>오류 화면 입니다.</p>
</div>
<hr class="my-4">
</div> <!-- /container -->
</body>
</html>
500.html
<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container" style="max-width: 600px">
<div class="py-5 text-center">
<h2>500 오류 화면~~~</h2> </div>
<div>
<p>오류 화면 입니다.</p>
</div>
<hr class="my-4">
</div> <!-- /container -->
</body>
</html>
[구현]
알맞은 경로에 에러페이지를 넣어주기만 하면 404 혹은 500 에러가 떴을 때 미리 만들어놓은 에러페이지가 뜬다.
(+) loginController 수정
package toyproject.bookbookclub.web.login;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import toyproject.bookbookclub.domain.Members.Member;
import toyproject.bookbookclub.domain.login.LoginForm;
import toyproject.bookbookclub.domain.login.LoginService;
import toyproject.bookbookclub.web.SessionConst;
@Slf4j
@Controller
@RequiredArgsConstructor
public class loginController {
private final LoginService loginService;
@GetMapping("/login")
public String loginForm(@ModelAttribute("loginForm") LoginForm form) {
return "login/loginForm";
}
@PostMapping("/login")
public String login(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult
,@RequestParam(defaultValue = "/") String redirectURL,
HttpServletRequest request) {
if (bindingResult.hasErrors()) {
return "login/loginForm";
}
Member loginMember = loginService.login(form.getLoginId(),
form.getPassword());
log.info("login? {}", loginMember);
if (loginMember == null) {
bindingResult.reject("loginFail", "아이디 또는 비밀번호가 맞지 않습니다.");
return "login/loginForm";
}
//세션이 있으면 있는 세션을 반환, 없으면 신규 세션 생성
HttpSession session = request.getSession();
session.setAttribute(SessionConst.LOGIN_MEMBER, loginMember);
//redirectUrl 적용
return "redirect:" + redirectURL; //전에 요청했던 url로 이동
}
}
- 개발일지#024에서 로그인이 성공하면 무조건 전체 타임라인 리스트가 보이도록 했는데 생각해보니 일단은 먼저 사용자가 요청한 페이지로 이동하는 것이 맞아서 수정!
(+) 댓글 피드백 반영 230315
#025 개발일지에서 클래스 명 첫글자를 소문자로 했다는 댓글 제보가 들어와 수정했다!
미쳐 보지 못한 부분인데 감사합니다 ㅎㅎ
728x90
320x100