환경
Eclipse IDE
Java 1.8
Tomcat 8.0
maven 3.3.9
준비
JDK 다운로드 및 설치(환경변수에 path,CLASSPATH 설정, JAVA_HOME 설정)
JAVA_HOME : C:\Program Files\Java\jdk1.8.0_161(설치경로)
CLASSPATH : %JAVA_HOME%\lib
path : %JAVA_HOME%\bin
확인 : cmd에서 java -version, javac
WAS Tomcat 다운로드 및 압축해제(환경변수에 CATALINA_HOME 설정(설정안함))
Eclipse > Window > Preferences > Server > Runtime Environment에 톰캣 디렉토리 지정
Eclipse 서버탭에서 서버 추가
Maven 다운로드 및 압축해제
maven 설치 폴더 > conf > settings.xml에서 localRepository 경로를 변경 (default : ${user.home}/.m2/repository)
Eclipse > Window > Preferences > Maven > User Settings 변경 확인(D:\Java Ref\Maven\apache-maven-3.3.9\conf\settings.xml)
maven은 컴파일 결과가 target 폴더 하위에 생기며 SVN 형상관리에서 제외 패턴 설정 필요!
Eclipse > Window > Preferences > Team > Ignored Resources 에 */target/* 패턴 추가
Eclipse 확장 (Help > Eclipse Marketplace)
STS(Spring Tool Suite) Eclipse 버전에 맞춰 설치
Maven Integration(Maven Integration for Eclipse WTP) Eclipse 버전에 맞춰 설치
SVN (Subversion) 필요시 설치, 설치후 eclipse 재시작시 connector 설치 진행 안되면 수동설치 필요(bug)
JSDT (JQuery 어시시트 기능) 필요시 설치
기본 프로젝트 생성
File > New > Other 를 선택
Spring > Spring Project를 선택
프로젝트 이름 입력
package를 입력 - package는 최소 3레벨 이상 ( [1레벨].[2레벨].[3레벨] )로 구성하게끔 되어있다.
경고 발생시 '프로젝트 우클릭 > Properties > Project Facets' 에서 java 버전 수정하면 사라짐 (default 1.6)
finish를 누르면 프로젝트 생성과 함께 필요한 library를 maven을 자동으로 다운 받는다.
maven이 다운받은 library는 프로젝트 하위 Maven Dependencies 에서 확인할 수 있다.
maven의 라이브러리의 관리는 모두 (target > ... > META-INF 하위에 존재)pom.xml에서 관리된다.
프로젝트 환경 설정
server 선택 : 프로젝트 Properties > Libraries 탭에서 Add Library > Server Runtime > Apache tomcat8을 선택 후 Finish
Project Facets 변경 : 프로젝트 Properties > Prject Facets 에서 Dynamic Web module 3.1, Java 1.8로 바꾼후 OK
build jre버전 변경 : 프로젝트 Properties > Java Build Path > JRE System Libray Edit버튼클릭 javaSE-1.8을 선택 후 Finish
src/main/resources 하위폴더를 java 이외의 파일을 패키지가 아닌 폴더 형태로 표현되게 하기위해 프로젝트 Properties > Java Build Path > Source 탭 에서 Excluded 항목 선택하여 Exclusion pattern에 **를 입력하여 추가한다.
기본 spring project 분석
폴더 구조
src/main/java는 java 파일이 모여있는 디렉토리이다
src/main/resources는 스프링 설정 파일이나 쿼리가 저장될 디렉토리이다.
src/test/...는 TDD(Test Driven Development)와 같은 test 기반의 개발 방법론 사용시 사용하는 폴더
src/main/webapp 메이븐의 기본 폴더이다. jsp 및 js 등 파일이 포함된다.
src/main/webapp/WEB-INF/spring에 있는 servlet-context.xml, root-context.xml은 서블릿(Servlet)관련 설정파일이다.
설정 파일
web.xml (Deploment Descriptor 이다. WAS가 구동될 때 WEB-INF 디렉토리에 존재하는 web.xml을 읽고, app 설정을 구성한다.)
tomcat이 최초 구동될때 web.xml을 읽고, 그에 해당하는 웹 애플리케이션 설정을 구성한다
servlet-context.xml
서블릿 관련 설정파일 이다.
자동으로 prefix와 suffix를 붙여주는 설정 부분
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
스프링에서 사용하는 bean을 일일이 xml에 선언하지 않고도 필요한 것을 어노테이션(Annotation)을 자동으로 인식하게 하는 역할을 하는 설정 부분
<context:component-scan base-package="com.sun.webs" />
@ResponseBody 방식으로 데이터 전달시 Message Converter설정이 필요
(프로젝트 charset 설정으로는 한글깨짐 해결안 됨(Header에 기본 charset이 적용되어서 전달됨)
spring 프로젝트 (기본 설정 변경)
기본 폴더 변경
src/main/java 하위 com.company.apps 폴더를 apps만 남기고 정리
apps 하위에 controller, service, dao, vo 패키지 생성
common 하위에 logger, util 생성
src/main/resource 하위에 config, config.spring 폴더 생성
src/test/resource 하위에 com.company.apps 폴더를 apps만 남기고 정리(차후 필요 없을까/?)
src/main/webapps/WEB-INF/spring 폴더명 config로 변경, appServlet 폴더 삭제하고 servlet-context.xml은 action-servlet.xml으로 이름변경 함.
직관적인 탐색을 위해 시작페이지 위치 변경함. 기존 default(src/main/webapps/WEB-INF/views)에서 컨트롤러로 호출이 아닌 src/main/webapps에 index.jsp 파일을 생성하여, 시작시 컨트롤러 호출 없이 시작페이지 호출 되도록 함
web.xml의 <web-app></web-app> 태그 사이에 추가하여 시작페이지 설정
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
필터 설정 (CharSet : UTF-8 설정 포함)
web.xml의 <web-app></web-app> 태그 사이에 추가
<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>*.do</url-pattern>
</filter-mapping>
Web.xml spring 설정 변경 (db접속 정보 등을 위한 contextConfigLocation을 설정)
root-context.xml은 추후 다른곳에서 설정될 예정이므로 web.xml파일 contextConfigLocation항목 <param-value></param-value>안에 있던 /WEB-INF/spring/root-context.xml 부분은 삭제 (root-context.xml은 모든 서블릿과 필터에서 사용되는 루트 스프링 컨테이너에 대한 설정임)
web.xml의 <context-param> 설정을 특정 폴더에 있는 설정파일을 모두 읽어오는 방식으로 변경(확장성 고려)
<param-value>classpath*:config/spring/context-*.xml</param-value> 으로 변경
src/main/resource 밑에 config/spring폴더 생성하여 context- 로 시작하는 설정 파일을 만들어 사용
Web.xml servlet 설정 변경 <servlet>...</servlet>
interceptor 설정, DispatcherServlet 설정은 동일레벨에 설정 되어야 하며, 이후 action-servlet.xml에 interceptor 설정하여 사용하나 별도 설정 파일로 분리 할 수도 있다(interceptor-servlet.xml) 설정 파일 저장 폴더 이름의 직관성을 위해 기본 WEB-INF/spring 폴더를 삭제하고 WEB-INF/config 폴더를 생성하여 사용함!
서블릿에 어떤한 요청을 할때 .do를 통해서만 요청을 전달하고, 다른 방식의 요청은 허락되지 않도록 함
<url-pattern>/</url-pattern> 에서 <url-pattern>*.do</url-pattern>로 변경
(보통 스프링에서는 servlet 설정이 .do로 되어있음)
dispatcher의 설정인 contextConfigLocation 위치 및 이름 변경
contextConfigLocation의 path를 /WEB-INF/spring/appServlet/servlet-context.xml에서 /WEB-INF/config/action-servlet.xml로 변경
web.xml의 <servlet> 설정을 특정 폴더에 있는 설정파일을 모두 읽어오는 방식으로 변경(확장성 고려)
<param-value>/WEB-INF/config/*-servlet.xml</param-value> 으로 변경
Log4j 및 interceptor 설정 변경
pom.xml에 Log4j 추가 하고 src/main/resource/ 위치에 log4j.xml 설정을 필요에 맞게 변경 함!
interceptor 설정
Interceptor는 Controller가 요청되기 전에 수행된다. (즉, Interceptor는 DispatcherServlet과 같은 위치에 등록이 되어야 정상적으로 수행이 된다. )
LoggerInterceptor class에 전처리기(preHandle)와 후처리기(postHandle)의 메서드를 등록
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class LoggerInterceptor extends HandlerInterceptorAdapter{
protected Log log = LogFactory.getLog(LoggerInterceptor.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (log.isDebugEnabled()) {
log.debug("====================================== START ======================================");
log.debug(" Request URI \t: " + request.getRequestURI());
}
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
if (log.isDebugEnabled()) {
log.debug("====================================== END ======================================\n");
}
}
}
action-servlet.xml에 intercptor 설정 추가
1
2
3
4
5
6
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" /> <!-- 전체("/**")URL에서 동작 -->
<bean id="loggerInterceptor" class="webs.common.logger.LoggerInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
폴더구조 수정
src/test/java , src/test/resources package삭제
src/main/webapps/WEB-INF/ 경로의 config 폴더 추가하고 spring 폴더 삭제
src/main/resources/ 경로의 config/spring 폴더 추가
프로젝트 java version 수정 (eclipse tip 항목 참조)
spring pom.xml 기본 환경 업그래이드
기본 환경 > 업그레이드 환경
Spring Framework 3.1.1 >> Spring Framework 4.3.4
java version 1.6 >> java version 1.8
Maven compiler
source 1.6 >> source 1.8
target 1.6 >> target 1.8
servlet-api 2.5 >> servlet-api 3.0
jsp-api 2.1 >> jsp-api 2.2
프로젝트 > right click > maven update 슈행
서블릿 스펙이 변경되면 web.xml 파일의 DTD 도 버전에 맞게 수정