한바다
스프링부트 실행시 html자원을 찾지 못하는 오류 본문
✅ error(type=Not Found, status=404)
스프링부트 실행히 위와 같은 404 오류가 떳다. 404 오류는 HTTP오류 코드 증 하나로, 브라우저가 요청한 페이지를
찾을 수 없는 오류이다. 스프링부트 서버가 해당url 요청을 해석할 수 없기 때문에 이와 같은 오류가 발생하였다.
▶ 이럴경우 컨트롤러를 작서하여 URL에 대한 매핑을 추가하면 해결할 수 있다.
✔️우선 오류에만 초점을 두지 않고 처음부터 차근차근 확인하기로 하였다.
스프링부트에 작성한 구조에 잘못 있는지 하나하나 체크 하였다.
src/main/java -자바코드 작성하는 곳
src/main/resources - 자바파일을 제외한 HTML, CSS, 자바스크립트,환경파일 등을 저장하는 공간
나는 우선 자바코드 작성하는 곳은 회원가입컨트롤러까지만 작성하였고
resource에는 static-css,image,js 작성하였고
static밑에 templates에는 매퍼 폴더와 xml, memberRegister.html을 작성하였으므로 스프링부트 구조에는 문제가 없었다.
두번째 확인한 것은 html페이지에 이상이 있는 건지 컨트롤러에서 url매핑이 안되는 것인지 확인하였다.
아 그리고 타임리프적용은 데이터베이스 값을 받아와야 할 때이므로 패스 하였다.
컨트롤라 자바페이지에 아래와 같은 코드를 입력 하였다.
@Controller
public class registermemberController {
@GetMapping("/")
public void index() {
System.out.println("index");
}
}
[코드설명]
▶ registermemberController에 @Controller 에너테이션을 적용하면 registermemberController 클래스는 스프링부트의
컨트롤러가 되고 그리고 index메서드의 @GetMapping애너테이션은 요청된 URL("/")과의 매핑을 담당한다.
브라우저가 URL을 요청하면 스프링부트는 요청페이지와 매팽되는 메서드를 찾아 실행한다.
✅ 오류코드
(type=Internal Server Error, status=500) 500 오류가 발생 하였다.
이번에는 404가 아닌 500 오류 코드로 바뀌었다. 왜 바뀐거지... 뭐가 문제인겆. 좀더 나은 오류의 발전인가, 오류의 진화인가
싶었다. 위 상황에서 해당URL 요청했을 때 오류코드에
2024-06-24T16:28:38.696+09:00[0;39m [32m INFO[0;39m [35m4156[0;39m [2m---[0;39m [2m[hanbatang] [nio-8090-exec-1][0;39m [2m[0;39m[36mo.s.web.servlet.DispatcherServlet [0;39m [2m:[0;39m Completed initialization in 1 ms
index 메서드가 호출되긴 했지만 오류가 발생 한 것이다. 원래 URL과 매핑된 메서드는 결과값을 리턴해야 하는데 아무값도
리턴하지 않아 이와같은 오류가 발생하였다.
위 오류를 수정하고자 아래 코드를 실행 하였다.
@Controller
public class registermemberController {
@GetMapping("/")
@ResponseBody
pulic String index() {
return "index";
}
}
[코드설명]
▶ 'index'라는 문자열을 브라우저에 출력하기 위해 index 메서드의 리턴 자료형을 String으로 변경하고 문자열을
'index'를 리턴했다. @ResponseBody 에너테이션은 URL 요청에 대한 응답으로 문자열을 리턴하라는 의미이다.
위와 같이 수정 해당 URL로 화면을 확인해보니 화면에 index가 찍혔다!!
그렇다면 이제 컨트롤러는 해결이 된 것이였다. 이제 내가 작성한 제이쿼리, css,부트스트랩이 적용된 html
화면을 볼 수 있겠지 하면서 해당 URL로 향했다!! 그런데 아래와 같은 오류 코드가 떳다
✅ 오류코드
An error happened during template parsing (template: "class path resource [templates/registerMember.html]" - line 16, col 1) org.thymeleaf.exceptions.TemplateInputException: An error happened during template parsing (template: "class path resource [templates/registerMember.html]" - line 16, col 1)
▶스트링부트 실행시 html자원에 접근하지 못하는 오류가 떳다 ! 이제 문제되는 페이지는 html화면 이었다.
html화면에 어떤 코드가 오류를 발생시킨 것인지. html 페이지를 싹다 지워 버리고 AAA라는 문자열만 입력해 보았다.
확인시 정상적으로 노출 되었다...
그리고 html코드만 작성 후 동작->정상, html코드+부트스트랩+css->정상,,,제이쿼리 코드 입력시 오류화면 발생
제이쿼리에서 말썽이 생긴 것이다.
[수정 전 코드]
<script src="js/javascrip.js"></script>
[수정 후 코드]
<script src="/js/javascrip.js"></script>
‘/’표시를 누락한 것이였다. 수정 후 코드를 작성하니 html페이지가 정상 노출되었다.
내pc에서만 확인할 수 있던 회원가입 페이지가 서버에서 동작하고 실행되니 새롭고 신기했다!!
비록 처음에 오류 투성이고 막막했지만 하나씩 어디서부터 문제인지 오류를 해결해가면서 오류를 반가워하는
습관을 가지면 참 좋겠다고 생각했다!!
오류야 너무 미워하지 않을께 ~~!!