SyntaxHighlighter.all(); '에러잡기 & 환경설정' 카테고리의 글 목록 (2 Page) :: 게을러지고 싶어 부지런한 개발자

어느날 잘 돌아가던 프로젝트에서 아래와 같은 에러가 떴다.

 

심각: Servlet.service() for servlet [appServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.PersistenceException: ### Error updating database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is java.sql.SQLException: No suitable driver found for jdbc:log4jdbc:mariadb://localhost:8080...

 

메시지 문구를 보면 log4jdbc를 인식하지 못한다고 의미.

 

문제의 원인은 org.mariadb.jdbc.Driver 대신에 log4jdbc.driver를 쓸 수 있도록 하는 속성이 빠졌기 때문!
log4jdbc.log4j2.properties 파일에 들어가서 아래 내용 중 빠진 것이 있다면 넣어주고 다시 실행해보자!

 

<!-- log4jdbc.log4j2.properties --> 
log4jdbc.drivers=org.mariadb.jdbc.Driver
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

 

 

갑자기 이클립스 pom.xml에 빨간 에러가 잡혀 확인해보니 아래와 같은 에러가 발생했다. 

Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Unable to load the mojo 'resources' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-resources-plugin:2.6' (org.apache.maven.plugins:maven-resources-plugin:2.6:resources:default-resources:process-resources)

org.apache.maven.plugin.PluginExecutionException: Execution default-resources of goal org.apache.maven.plugins:maven-resources-plugin:2.6:resources failed: Unable to load the mojo 'resources' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-resources-plugin:2.6'
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:156)
	at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:331)
	at org.eclipse.m2e.core.internal.embedder.MavenImpl.lambda$7(MavenImpl.java:1342)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
	at org.eclipse.m2e.core.internal.embedder.MavenImpl.execute(MavenImpl.java:1341)
	at org.eclipse.m2e.core.project.configurator.MojoExecutionBuildParticipant.build(MojoExecutionBuildParticipant.java:52)
	at org.eclipse.m2e.core.internal.builder.MavenBuilderImpl.build(MavenBuilderImpl.java:137)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:173)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$1.method(MavenBuilder.java:1)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1$1.call(MavenBuilder.java:116)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:112)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod$1.call(MavenBuilder.java:106)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.executeBare(MavenExecutionContext.java:177)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:151)
	at org.eclipse.m2e.core.internal.embedder.MavenExecutionContext.execute(MavenExecutionContext.java:99)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder$BuildMethod.execute(MavenBuilder.java:87)
	at org.eclipse.m2e.core.internal.builder.MavenBuilder.build(MavenBuilder.java:201)
	at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:833)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:220)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:263)
	at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:316)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:319)
	at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:371)
	at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:392)
	at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:154)
	at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:244)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:63)
Caused by: org.apache.maven.plugin.PluginContainerException: Unable to load the mojo 'resources' (or one of its required components) from the plugin 'org.apache.maven.plugins:maven-resources-plugin:2.6'
	at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:553)
	at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:124)
	... 30 more
Caused by: org.codehaus.plexus.component.repository.exception.ComponentLookupException: java.util.NoSuchElementException
      role: org.apache.maven.plugin.Mojo
  roleHint: org.apache.maven.plugins:maven-resources-plugin:2.6:resources
	at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:267)
	at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:255)
	at org.apache.maven.plugin.internal.DefaultMavenPluginManager.getConfiguredMojo(DefaultMavenPluginManager.java:519)
	... 31 more
Caused by: java.util.NoSuchElementException
	at org.eclipse.sisu.plexus.RealmFilteredBeans$FilteredItr.next(RealmFilteredBeans.java:118)
	at org.eclipse.sisu.plexus.RealmFilteredBeans$FilteredItr.next(RealmFilteredBeans.java:1)
	at org.eclipse.sisu.plexus.DefaultPlexusBeans$Itr.next(DefaultPlexusBeans.java:76)
	at org.eclipse.sisu.plexus.DefaultPlexusBeans$Itr.next(DefaultPlexusBeans.java:1)
	at org.codehaus.plexus.DefaultPlexusContainer.lookup(DefaultPlexusContainer.java:263)
	... 33 more
	pom.xml	/lovepet	line 8	Maven Build Problem

 

 

이클립스 Maven 연동 시 plug in 에러 날 경우에 생긴 에러다. 

해결방법은 pom.xml에 아래의 디펜던시를 추가하자. 

<dependency>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.4.3</version>
</dependency>

이렇게 작성해준 뒤에,

1. 프로젝트 우클릭 > Run As > Maven Install

2. 이클립스 프로젝트 탐색기에서 해당 프로젝트 클릭 후 F5(새로고침)

3. 프로젝트 우클릭 > Maven > Update Project

 

끝!

 

 

 

HTTP상태코드 : 클라이언트가 요청을 할 경우 서버는 요청에 대한 상세 결과를 알려 주는데 그것이 상태코드.  상태코드는 3자리 숫자로 구성되어 있으며, 뒤에 응답 문구가 붙는다. 

 

[HTTP 응답코드 종류 ]

# 100 번대 상태코드:  정보관련
  데이터의 일부를 서버가 받은 상태(처리중인 상태)
  
 # 200 번대 상태코드:  성공관련
200 -----> OK (에러없이 정상처리)
204 -----> 정상처리 되었으나, 서버에 보낼 데이터가 없음

# 300 번대 상태코드: 다른 URL 처리
301 -----> 요청한 URL이 새로 변경되었음 302
302 -----> Found (다른 페이지로 이동)
304 -----> Not Modified(기존의 데이터와 변경된 것이 없음)  


# 400 번대 상태코드: 클라이언트 관련 에러 
400 -----> Bad Request (클라이언트 요청에 문제가 있기떄문에 서버에서 인식할 수 없음 )
403 -----> Forbidden (서버에서 허락되지 않음. 접근 권한 없음) 
404 -----> Not Found(요청 URL을 찾을 수 없음) 
406 -----> 전송 방식이 허락되지 않음(REST방식에서 자주 나타나는 상태코드)

# 500 번대 상태코드: 서버 관련 에러
500 -----> Internal Server Error (서버에서 처리시 문제가 발생(프로그램 내부적인 오류) )
502 -----> 게이트웨이, 프록시 상태의 문제(과부하)
503 -----> 일시적인 서비스 중단 상태
504 -----> 지정된 처리시간이 지나서 처리되지 못하는 경우 

 

[ HTTP Method 종류 ]

GET

POST

PUT

DELETE

PATCH

HEAD

CONNECT

OPTIONS
TRACE

Custom

 

 

pom.xml에 servlet 부분 버전이 3이상인 경우, web.xml에서도 버전을 기존2.5에서 3.0으로 변경해주어야 함

 

또한, 프로젝트 우클릭>properties>project facets>Dynamic Web Module 역시 3.0으로 동일하게 맞춰주어야 함.

 

 

 

 

 

그림과 함께 다시 말하자면,,

- pom.xml의 버전을 3.1.0으로 올린 경우 (artifcatId도 servlet-api에서 javax.servlet-api로 변경)

 

 

- web.xml의 version도 3.0으로 변경

- 프로젝트 우클릭>properties>Project Facets> Dynamic Web Module도 3.0으로 

 

 

 

-추가로org.eclipse.wst.common.project.facte.core.xml에서도 3.0으로 되어있는지 체크

(ctrl + shift + R 누르고 파일명 입력하면 바로 찾을 수 있음) 

Maven Resource Filtering 사용 시에 "An error occured while filtering resources " 오류가 발생하는 경우는

실행은 잘되나 오류라고 나오는 건데요.

 

이때 프로젝트 우클릭 > Maven > Update Project를 눌러 업데이트 수행하면 에러가 사라집니다. 

 

이클립스 자체 버그인 것 같음. 

이클립스에서 스프링 MVC 프로젝트를 하나 만든 뒤 처음 기본적으로 해주어야 하는 환경설정이 있다. 

 

1) Tomcat 연결 

-현재 Tomcat9까지 나온 것으로 알고 있지만, 아직 현업에서는 7에서 8.5까지를 많이 쓰는 것 같다. 

https://tomcat.apache.org/ 에 가서 tomcat 8.5를 다운 (64비트 또는 32비트_자신의 컴퓨터에 해당하는 것으로 다운)

 

 

2) 스프링 MVC 환경설정  

기본적으로 Spring MVC 프로젝트를 만들면 Spring Framework의 버전은 3.1.1이다.

이것을 4이상으로 변경합니다

 

기본 환경

  - Spring Framework 3.1.1
  - java version 1.6

  - servlet-api 2.5
  - jsp-api 2.1

  - Maven compiler
    source 1.6
    target 1.6

 

변경 될 환경

 - Spring Framework 4.3.4
 - java version 1.8

 - servlet-api 3.0
 - jsp-api 2.2
 

 - Maven compiler (source 1.8  &  target 1.8)
 

1)pom.xml에서 스프링버전 & 자바버전 변경

 

-프로젝트 안에 pom.xml 연 뒤 아래처럼 스프링 버전과 자바 버전을 업그레이드 시켜줄 것 

 

 

2) pom.xm에서 servlet-api버전 & jsp-api 버전 변경

-artifact도 servlet-api 에서 javax.servlet-api로 변경 

 

 

2-1) Servlet 스펙이 변경 되면 web.xml의 xsd 버전도 그에 맞춰 변경해야 함 

(버전 2.0에서 3.0으로 변경)

 

 

3) pom.xml에서 maven compiler 설정의 source와 target을 1.8로 변경

 

 

4) 프로젝트 설정도 변경  (프로젝트 우클릭 > Properties 클릭)

 

4-1) 

 

4-2) Java Build Path > Libraries > JRE System Library를 JavaSE-1.8로 변경 

 

4-3) Java Compiler  클릭

-위에서 Java Build Path가 제대로 되었다면 JavaSE-1.8로 설정되어있을 것 

 

4-4) Project Facets > Dynamic Web Module은 3.0으로, Java는 1.8로 설정

 

 

5) 최종적으로 프로젝트 우클릭 > Maven > Update Project로 설정 내용을 적용 

방법 1) 

cmd창 켜서 이클립스가 깔린 경로로 간 뒤 

eclipse -clearPersistedState 입력 후 이클립스 재실행

 

 

방법 2) 

이클립스를 실행할 때 로고만 뜨고 workspace 화면이 실행되지 않고 이클립스가 종료 된다면,

최종 화면 상태를 저장하지 못했을 때 발생하는 문제이다.

이때 해결 방법은 workspace의 설정 파일을 삭제해줘야 한다.

..\workspace\.metadata\.plugins\org.eclipse.e4.workbench

위 파일을 삭제한 후 이클립스를 재실행하면 정상적으로 실행된다.

이클립스 상단에 Window > Preferences > "encoding"이라고 아래와같이 쳐보자 (왼쪽 상단에 typing)

 

 진한 글씨로 된 곳에 모두 UTF-8로 지정하면 됨 

 

( Content Types > Java Class File > Default encoding 란에 "UTF-8" 입력 > Update)

( Content Types > Text > Default encoding 란에 "UTF-8" 입력 > Update)

( Workspace > 아래 쪽에 Text file encoding타입 "UTF-8" 선택 ) 

(나머지  Web과 관련된 Files 들: 클릭 > Encoding > "UTF-8" 선택 ) 

+ Recent posts