인프런 커뮤니티 질문&답변

권진우님의 프로필 이미지

작성한 질문수

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술

단순하고 실용적인 컨트롤러 - v4

v3, v4 컨트롤러부터 작동하지않습니다

작성

·

267

0

안녕하세요? 강의 잘 듣고 있습니다.

실습 진행중 v2까지는 문제가 없다가 v3부터 해결되지않는 문제에 봉착해서 하루정도 씨름하다가 문의남깁니다.

v3부터 회원가입, 회원목록 링크를 클릭하면 정상적인 URL로 이동함에도 불구하고 404에러(강의 내용 중 controller가 null이면 띄워주기로한 페이지)가 발생하여 코드 곳곳에 uri를 sout으로 찍어보았고 문제가 생기는 원인은 대략 파악하였습니다. 하지만 거기서 문제를 해결하는데 실패하여 조언을 구하고싶습니다.

1. ControllerMap의 key에 viewPath가 Param으로 전달되어 controller == null 이 됨.

2.  requestURI 요청이 어디서 잘못되었는지 파악하기 위해 코드 곳곳에 sout으로 찍어본 결과, 링크를 클릭한 뒤 requestURI값이 한번은 정상 URI, 두번째는  viewPath가 포함된 URI (/front-controller/v3/members/WEB-INF/views/new-form.jsp)가 출력되었습니다. 이 과정에서 controller는 null이 되어 오류페이지를 반환하였는데 반해 프론트컨트롤러의 service메소드의 끝단에서 requestURI와 controller를 찍어본 결과 정상적으로 값이 할당되었습니다.

이 과정에서 처음엔 실습 과정에서 코드를 잘못 작성해 처음에 정상 requestURI가 할당되었지만 view로 forward된 request가 viewPath를 포함해서 requestURI가 재할당되어 controller를 불러올때 문제가 생기는 것으로 추측했지만 코드는 예제와 동일하였고 이곳저곳 살펴보다 더이상 알기 힘들어 이렇게 질문남깁니다.

혹시 몰라 build, out폴더도 지워보고 캐시도 삭제해보았는데 크게 달라지는 것은 없었습니다.

자꾸 이상한 질문들을 올려 죄송합니다 ㅠㅠ

답변 2

1

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. 권진우님

WEB-INF 코드에서 앞에 /를 추가해주셔야 합니다.

이전 코드

private MyView viewResolver(String viewName) {
return new MyView("WEB-INF/views/" + viewName + ".jsp");
}

변경 코드

private MyView viewResolver(String viewName) {
return new MyView("/WEB-INF/views/" + viewName + ".jsp");
}

감사합니다.

권진우님의 프로필 이미지
권진우
질문자

정말 감사합니다 ㅠㅠ 

이런 간단한 오타때문에 시간을 허비하신거에 대해서 정말 죄송스럽습니다...

정말 컴파일타임에 잡히지 않는 에러는 이런 간단한거에도 엄청난 시간이 뺏기는거 같아 컴파일에러가 얼마나 소중한지 다시금 느끼는거 같습니다.

다시 한 번 답변 감사드립니다.

0

안녕하세요. 권진우

전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 권한 문제 꼭 확인해주세요

추가로 다음 내용도 코멘트 부탁드립니다.

1. 실행 방법을 알려주세요.
2. 어떻게 문제를 확인할 수 있는지 자세한 설명을 남겨주세요.

감사합니다

권진우님의 프로필 이미지
권진우
질문자

https://drive.google.com/file/d/1COBTdJs7CLvHHc63HYyRb1b2Gy_3YXEY/view?usp=sharing

1. 예제와 동일합니다.

2. sout으로 문제가 발생한 것으로 예측되는 지점에 콘솔 출력이 되도록 해놓았습니다. app을 실행하신 후 v3, v4 링크를 클릭해주시면됩니다.

번거로우실텐데 감사합니다~