Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
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
Archives
Today
Total
관리 메뉴

한바다

[톰캣실행오류]Starting Tomcat v10.1 Server at localhost' has encountered a problem 본문

카테고리 없음

[톰캣실행오류]Starting Tomcat v10.1 Server at localhost' has encountered a problem

한바다주인공 2025. 4. 8. 19:21

 

📘  톰캣 서버가 정상적으로 시작되지 못한 오류 📘

 'Starting Tomcat v10.1 Server at localhost' has encountered a problem.
Server Tomcat v10.1 Server at localhost failed to start.

✅ 위와 같은 오류의 원인은 여러가지가 있을 수 있다

🧩 1. [포트 충돌]

해결 방법1

-  Eclipse > servers 뷰에서 Tomcat 더블 클릭

-  아래쪽의 Ports 섹션 확인

-  HTTP/1.1의 포트를 8081, 9090 등 다른 숫자로 변경 후 저장 후 서버 재시작!

해결 방법2

- CMD 관리자 권한으로 열고 아래와 같은 명령어를 입력하여 해당포트를 종료시킨다!

 

🧩 2. [이전 실행 기록 충돌] – 캐시 문제

-  서번 완전히 제거 : Server 탭에서 톰캣 우클릭 →  Delete(Remove only) 

 

-  Workspace 클릭 : 상단메뉴 Project > Clean

- 서버 재추가 : Servers 탭 → 우클릭 → New → Server → Tomcat선택 → 다시 설정

 

🧩 3. [톰캣 설정 파일 손상]

-  톰캣 폴더 안의 conf/server.xml 열기

-  <Connect port="8080".../>라인을 찾기

-  포트가 다른 곳에서 이미 사용 중인 포트인지 확인

 

🧩 4. [환경 변수 / JAVA 설정 문제]

-  JDK 경로가 잘못됐거나 누락되었는지 확인

-  이클립스에서 window > preferences > Java > Installed JREs 확인

- 올바른 JDK가 선택되어 있는지 확인

 

 

📘 추가로 콘솔 에러창을 확인하니 java.lang.IllegalArgumentException:오류를 확인하였다

❗ 핵심 오류 원인:

java.lang.IllegalArgumentException:  
이름이 [ProductController]과 [ch08.ProductController]인 두 서블릿들 모두  
url-pattern [/pcontrol]에 매핑되어 있는데, 이는 허용되지 않습니다.

 

즉  URl매핑이 중복 된 것이다

🔁 @WebServlet("/pcontrol")이 중복 선언됨

: 같은 URL에 연결된 서블릿이 프로젝트 안에 두개 이상 존재

🔁 web.xml과 @WebServlet 둘 다 같은 URL로 매핑됨

: 즉 설정이 겹침

 

ProductController 서블릿을 생성할 시 url매핑에서 '/pcontro'로 저장을 하고 아래 코드에서

@WebServlet 중복 등록이 되었다!! 

 

✅ 해결 방법

프로젝트 우클릭> New > Servlet 에서 'Create Servlet'에서 작성한 부분은 수정이 안된다고 하여

(한 번 생성한 서블릿은 해당 팝업창으로 다시 수정할 수는 없고 해당창은 서블릿 새로 만들 때만 사용 가능하고, 

 이후에는 수정이 불가)

컨트롤러에서 작성한 WebServlet 어노테이션을 주석 처리 하니 정상적으로 톰캣이 작동 하였다.

 

더불어 📄 web.xml에 아래와 같은 <url-pattern>에서 같은 경로를 지정하고 있는지 확인한다

<servlet>
  <servlet-name>ProductController</servlet-name>
  <servlet-class>ch08.ProductController</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>ProductController</servlet-name>
  <url-pattern>/pcontrol</url-pattern>
</servlet-mapping>

🔧 해결법:

위와 같을 시  @WebServlet을 사용할 거면 web.xml의 해당 서블릿 매핑은 사용한다

즉 둘 다 쓰지 말고 한쪽만 사용 한다

 

▶ 위와 같이 정리 된 후 서버 클릭 후 재 시작한다!

 

📘 위 오류가 해결이 된 후 두번째 오류가 발생 하였다!

 

상품목록이 떠야 하는데 F12를 눌러보니 console에서도 에러가 발생하고 있었다.

즉 실제 JSP화면이 빈 테이블만 보이는 현상이었다

🔍 원인 분석

JSP는 정상적으로 열리지만, 해당코드 반복문에서 <c:forEach>가 실행되지 않아 데이터가 보이지 않는 상태였다.

<c:forEach var="p" varStatus="i" items="${projects}">

 

✅ 🔍 핵심 원인: 변수 이름 불일치 (projects → product)

👉 jsp에서는 ${project}를 찾는데, Controller에서는 아래와 같이 product라는 이름으로 코딩이 되어 있었다.

request.setAttribute("product", service.findAll());

 

✅ 해결 방법

JSP에서 item="${product}"로 수정한다

<c:forEach var="p" varStatus="i" items="${product}">

▶ 이렇게 하면 컨트롤러에서 넘긴 product라는 이름으로 리스트를 JSP에서 잘 받을 수 있다

 

🧠  더불어 MVC구조에서 JSP는 직접 실행하는 게 아니라, 컨트롤러를 통해 데이터를 받아야 동작한다!

       서블릿 실행에서 톰캣은 항상 서블릿 또는 web.xml을 통해 실행되어야 한다

        request.setAttribute 데이터를 JSP에 전달하려면 컨트롤러에서 먼저 세팅해줘야 한다