Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
Archives
Today
Total
관리 메뉴

한바다

스프링부트 실행시 html자원을 찾지 못하는 오류 본문

servlet

스프링부트 실행시 html자원을 찾지 못하는 오류

한바다진화 2024. 6. 24. 19:39

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  INFO 4156 --- [hanbatang] [nio-8090-exec-1] o.s.web.servlet.DispatcherServlet        : 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에서만 확인할 수 있던 회원가입 페이지가 서버에서 동작하고 실행되니 새롭고 신기했다!!

비록 처음에 오류 투성이고 막막했지만 하나씩 어디서부터 문제인지 오류를 해결해가면서 오류를 반가워하는

습관을 가지면 참 좋겠다고 생각했다!!

 

오류야 너무 미워하지 않을께 ~~!!