[Spring] Setting

좋지 않은 방법이지만, 지식이 전혀 없는 상태에서 인터넷 보고 해보기.

STS 설치

Eclipse 기반으로 만든 것으로 보임. spring.io 에서 다운로드 후 압축 풀면 끝.

프로젝트 생성

  • File > New > Dynamic web project

WebContent 디렉토리 아래 index.html 파일 생성 후 body에 hello 넣기.

Run

무작정 Run 해보기. Choose an existing server 선택 후 실행.

브라우저에서 localhost 접속해보니 에러가 난다.

localhost:8080 해보니 Pivotal tc Server가 뜬다. 일단 서버 구동은 잘 되고 있다.

좀 더 인터넷 검색해보니 그 아래 프로젝트 명을 입력해줘야 한다고 한다.

http://localhost:8080/hello

여기서는 page 생성된 것을 확인.

Tomcat

여기저기 보니 spring은 보통 tomcat에 연동하는 것으로 보인다.

7.0 버전이 안정적이라는 것 같다. 다운로드 한다.

  1. 7.0.81 64bit windows zip 버전으로 받고
  2. 압축 풀고
  3. STS에서 Window > Preferences > Server > Runtime Environments > Add > Apache > Apache Tomcat v7.0 > Next > Browse > 설치한 경로 찾아주고 Finish
  4. File > New > Other > Server > Apache > Tomcat v7.0 Server

다음, Server perspective에서 Pivotal tc Server에 연결되어 있던 hello project를 끊고 Tomcat에 Add를 통해 연결하려 하였으나, 아래와 같은 에러메시지 발생.

"There are no resources that can be added or removed from the server."

새로 Project hello2를 생성해본다. Target runtime에서 Apache를 선택하니 Dynamic web module version3.0으로 바뀐다.

Apache 7.0에서 3.1을 지원하지 않는 것인가 싶다.

아래 사이트에서 확인해보니 저게 아마 Servlet version인가 싶다.

https://tomcat.apache.org/whichversion.html

실행 후, http://localhost:8080/hello2 에 가보니 잘 나온다.

다른 방법으로 해보기

Project 생성 시 New Spring Legacy Project를 사용하여 만들어보자.

Project name을 적당히 넣고 Templates에서 Spring MVC Project를 선택 후 Next.

패키지명에 적당히 com.my.hello를 넣고 완료.

실행해보면 세 개의 에러가 난다.

1
Description Resource Path Location Type
Archive for required library: 'C:/Users/xxx/.m2/repository/org/springframework/spring-aop/3.1.1.RELEASE/spring-aop-3.1.1.RELEASE.jar' in project 'Hello' cannot be read or is not a valid ZIP file Hello Build path Build Path Problem
2
The project cannot be built until build path errors are resolved Hello Unknown Java Problem
3
The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path home.jsp /Hello/src/main/webapp/WEB-INF/views line 1 JSP Problem

으음… pom.xml을 열고. 아래 3.1.14.3.10 으로 변경한다.

<org.springframework-version>3.1.1.RELEASE</org.springframework-version>

다음은 Java를 1.8로 바꾼다. (PC 환경에 맞춰서…)

  1. 생성한 Project를 우클릭 > Properties
  2. Project Facets > Java를 1.8로 바꾼다.

여기까지의 조치로 세 개의 에러 중 두 개는 없어졌는데 마지막 것이 남아있다.

아래와 같이 설정하여 에러는 모두 없어졌으나 페이지는 아직 보이지 않는다.

  1. 생성한 Project를 우클릭 > Properties
  2. Project Facets > 우측의 Runtimes 탭 > Apache Tomcat v7.0 선택 > Apply and Close

한참 고생하다가 다른 사이트에서 MAVEN에 대한 언급이 있었으나 STS를 사용하면 그냥 지원하는 줄 알고 설치를 안 했었다.

그래서 MAVEN 문제인가? 싶어서 설치해 보았다.

여기에서 에서 MAVEN을 받아서 압축을 풀고, 경로를 환경 변수의 PATH에 추가해준다.

잘 설치되었는지 확인을 위해서는 cmd를 다시 열고 mvn -version을 입력해보면 된다.

하지만 이게 문제가 아니었다.

한참 헤매다가 Console쪽에서 Tomcat의 에러로 보이는 것들을 찾았다.

심각: Unable to process Jar entry [org/apache/taglibs/standard/tag/rt/sql/DateParamTag.class] from Jar [jar:file:/D:/2018/Dev/Workspace/Workspace_spring/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/hello/WEB-INF/lib/jstl-1.2.jar!/] for annotations

이에 대해 아래의 글들을 찾았다.

jstl-1.2.jar를 검색해보니 https://mvnrepository.com/artifact/javax.servlet/jstl/1.2 를 찾았고 JSTL에 대해서는 이런 사이트를 찾았고

http://gangzzang.tistory.com/entry/JSP-JSTLJSP-Standard-Tag-Library-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EC%B6%94%EA%B0%80

그래서 이 경로의 파일을 바꿔치기 했다.

C:\Users\사용자\.m2\repository\javax\servlet\jstl\1.2

이 에러는 해결되었다. 다음 에러를 보자.

[SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:hello' did not find a matching property.

이건 https://blog.outsider.ne.kr/559 를 따라서 고쳤다.

  • Servers perspective에서 Tomcat server 더블 클릭 후 Server OptionPublish module contexts to separate XML files를 체크.
Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener
java.lang.NoClassDefFoundError: org/apache/log4j/Level

이 문제도 아래 사이트를 참고하여 해결했다.

pom.xmllog4j-slf4j 에 대한 내용을 dependency에 추가하는 것이다.

여기까지 하고 프로젝트 재시작을 해보니 페이지가 뜬다.

남은 TOMCAT 에러 로그는 놔두기로 한다.

페이지는 잘 떴으나 이제 깨지는 문자가 있다. 나름 인코딩을 UTF-8로 다 맞췄는데 뭐가 문제일까 싶었다.

아래 사이트를 따라 web.xml에 아래 코드를 추가해보았다.

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

그래도 안 된다.

그 다음 servlet-context.xml 에 아래 코드를 추가해 보라는 글을 보고 따라해본다.

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="contentType" value="text/html; charset=UTF-8"/>
</beans:bean>

이것도 안 된다.

다음은 home.jsp 파일에 아래 코드를 추가해본다.

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8"%>

이건 된다. 한글이 나온다.

jsp 파일에 직접 추가해주는 것 만으로 위의 web.xml, servlet-context.xml 에서의 삽질은 필요하지 않다.

참조

Share