스프링 레거시로 만들고 싶은게 생겨서 새로 프로젝트를 만든다.
ide는 eclipse 2020-09 버전
당연히 market으로 스프링이 설치되어있고 perspective는 spring으로 선택되어있어야 한다.
프로젝트 생성
File > New > Spring Legacy Project 선택
프로젝트명을 입력해주고 Spring MVC Project 선택 > Next 누르면
패키지명 입력하는게 나오는데 com.회사명.프로젝트명이 국룰이다.
입력 후 Finish 클릭
조금 기다리면 프로젝트가 생성된다.
프로젝트 구조를 나중에 자기가 편한대로 세팅해주자
프로젝트 기본 수정
먼저 pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.poozim</groupId>
<artifactId>jobcall</artifactId>
<name>jobcall</name>
<packaging>war</packaging>
<version>1.0.0-BUILD-SNAPSHOT</version>
<properties>
<maven.compiler.encoding>UTF-8</maven.compiler.encoding>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java-version>1.8</java-version>
<org.springframework-version>5.2.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.7.5</org.slf4j-version>
<jackson.version>2.9.6</jackson.version>
</properties>
<dependencies>
<!-- Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework-version}</version>
<exclusions>
<!-- Exclude Commons Logging in favor of SLF4j -->
<exclusion>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework-version}</version>
</dependency>
<!-- AspectJ -->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjrt</artifactId>
<version>${org.aspectj-version}</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${org.slf4j-version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jcl-over-slf4j</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${org.slf4j-version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.15</version>
<exclusions>
<exclusion>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
</exclusion>
<exclusion>
<groupId>javax.jms</groupId>
<artifactId>jms</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jdmk</groupId>
<artifactId>jmxtools</artifactId>
</exclusion>
<exclusion>
<groupId>com.sun.jmx</groupId>
<artifactId>jmxri</artifactId>
</exclusion>
</exclusions>
<scope>runtime</scope>
</dependency>
<!-- @Inject -->
<dependency>
<groupId>javax.inject</groupId>
<artifactId>javax.inject</artifactId>
<version>1</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.7</version>
<scope>test</scope>
</dependency>
<!-- added dependencies -->
<dependency>
<groupId>org.sitemesh</groupId>
<artifactId>sitemesh</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.mobile</groupId>
<artifactId>spring-mobile-device</artifactId>
<version>1.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.35</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.5</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<compilerArgument>-Xlint:all</compilerArgument>
<showWarnings>true</showWarnings>
<showDeprecation>true</showDeprecation>
</configuration>
</plugin>
</plugins>
</build>
</project>
Maven으로 dependency를 관리하기 때문에 버전 관련 해서는 https://mvnrepository.com/ 에서 확인하면 된다.
대략적으로 보면
java-version은 1.7부터가 괜찮기 때문에 1.8로 설정해준다. 예시로 1.6이면 switch구문에 String못함
spring버전을 5.대로 설정해주었고
메뉴별 데코레이터를 위한 sitemesh
모바일 대비 device
DB연결을 위한 mysql, dbcp
json을 위해 jackson,
lombok, gso
Multipartfile을 위해 fileupload와 io를 추가해주었다.
web.xml에 utf-8인코딩 필터 추가
<!-- Character encoding : UTF-8 -->
<filter>
<filter-name>characterEncodingFilter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- /Character encoding : UTF-8 -->
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/*context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
web.xml에 인코딩 필터로 utf-8설정을 해주고
appServlet에 db연결 xml도 추가할 계획이어서 param-value값을 *context.xml로 수정했다.
root-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView" />
</beans>
multipart와 jsonview를 사용하기위해 Bean등록을 해주고
프로젝트 구조를 조금 바꾸었는데
나는 webapp밑에 정적파일 디렉토리와 jsp를 따로 두고싶기 때문에 기존의 views를 지우고 구조를 변경했다.
때문에 servlet-context에서 설정되어있던 viewResolver와 resource 매핑 값을 수정해야한다.
servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/**" location="/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/jsp/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.poozim.jobcall" />
</beans:beans>
추가할게 많지만 일단 저장 후 서버에 돌려보자.
pom.xml에 수정이 생긴다면 꼭 maven update를 해주어야한다.
프로젝트 우클릭 > maven > update project > ok
이제 서버에 프로젝트를 올리고 돌려본다.
server 목록에서 new > server를 눌러준다.
server가 이클립스 하단에 없다면 Window탭 > show views > Server클릭
톰캣은 역시 v8.5이상이 제맛이다. v9.0로 해준후 네임은 프로젝트명과 동일하게 입력 후 Next를 누르면
(Finish 누르고 나중에 서버에 프로젝트를 추가해도 된다)
Available의 프로젝트 목록중 골라서 Add버튼으로 서버에올릴 프로젝트를 추가시키면 된다.
이후 Finish를 누르면
서버 목록에 방금 생성한 서버와 프로젝트가 올라가 있는걸 볼 수 있다.
서버 설정이 필요하기때문에 더블 클릭
서버 설정이 나오는데 개인적으로 80국룰 admin port는 8005 ajp는 8009로 하는데 ajp는 없으므로 패스.
수정 후 세이브 해주고 Modules 탭으로 간다
Edit을 눌러서
path를 /로 수정, Auto reloading을 체크해제하고 OK를 해준다. 개인적으로 서버는 직접 리로드 시키는걸 선호한다.
역시 세이브 후 서버를 시작해주도록 한다.
원하는 서버를 선택하고 빨간 밑줄로 표시한 재생버튼을 누르면 서버가 시작된다. 참고로 왼쪽 벌레는 디버깅 모드 시작이다.
콘솔에 서버가 시작되었다는 문구가 뜨면 브라우저를켜서 localhost를 들어가보자
home.jsp가 잘 뜨는걸 볼 수 있다.utf-8의 인코딩이 안되었다면 한글이 ?로 떴을 것이다.
resource mapping도 잘 수정되었는지 넣어둔 테스트 이미지도 확인.
'Spring' 카테고리의 다른 글
Spring MVC JPA 적용하기 (spirng-data-jpa) (0) | 2021.10.21 |
---|---|
Spring XSS Filter 개발 및 적용 (3) | 2021.10.19 |
Spring Bean Scope 빈 스코프 (0) | 2021.10.12 |
Spring AOP (Aspect Oriented Programming) (0) | 2021.10.12 |
Spring DI(의존성 주입)와 IoC(제어의 역전) (0) | 2021.10.11 |