💻 뚝딱뚝딱

[개발일지#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