intellij를 실행시키고, Creat New Project를 클릭한다.
*스프링 프로젝트 생성 시, Maven프로젝트에 spring을 추가해주는 방법과, spring프로젝트에 maven을 적용하는 방법이 있는데, 여기서는 Maven프로젝트에 spring을 추가하는 방법을 사용하겠다.
왼 편에서, maven을 클릭해주면, JDK가 설치되어있을 시, 자동으로 Project SDK가 설정되어있다. Create from archetype을 체크해제하고 Next를 누른다.
GroupId와 ArtifactId를 적어주고 Next를 누른다. 여기서 GroupId는 자신의 여러 프로젝트 간 식별자 역할을 하고, ArtifactId는 버전정보를 생략한 jar 파일의 이름이다. 둘 다 맘대로 적어주면 된다.
프로젝트 이름(기본적으로는 artifactId와 동일한 값이다)과 프로젝트를 저장할 위치를 설정해준다.
finish를 누르면 maven 프로젝트가 아래와 같이 생성된다.
왼편하단에 아래와같은 알림이 뜨면, Enable Auto-import를 눌러준다.
이제 여기에 spring을 추가할 것이다.
프로젝트 폴더에서 오른쪽 클릭을 하여 Add Framework Support...를 클릭한다.
왼 편에서, spring 하위의 Spring MVC를 선택하고 ok를 누른다.
그럼 아래와 같이 web이라는 디렉토리가 생긴다.
이 구조로 사용해도 아무런 문제가 없지만, 여기서는 구조를 조금 바꾸어주려고한다.
만들어진 web을 webapp으로 바꾸어주고, webapp 디렉토리를 src - main 으로 옮겨준다.
File - Project Structure을 눌러준다.
왼 편의 Facets(1)를 클릭 후, 옆의 Web(2)을 눌러주고, Web Resource Directory(3)를 더블 클릭해준다.
아까 webapp 디렉토리의 위치를 옮겨주었기 때문에, 여기도 그 경로로 바꿔주어야한다. 바꿔준 후, Apply를 눌러 적용시킨다.
이제 라이브러리를 추가할 것이다.
왼 편의 Artifacts를 클릭하고, WEB-INF를 우클릭하여 lib
이라는 디렉토리를 생성한다. 그 후, 오른편의 spring의 하위에 있는 Spring과 Spring MVC를 더블 클릭하여 lib 디렉토리 밑으로 옮긴다.
마지막으로 tomcat을 설정해준다.
Add configuration을 눌러준다.
+를 눌러 Tomcat Server -> Local을 클릭한다.
Configure...을 누른 후, Tomcat Home 부분에 tomcat이 설치된 디렉토리를 설정해준다.
그럼, Application server가 설정되고, Name을 원하는대로 바꾼다음, 아래 그림처럼 warning이 발생하면 fix를 눌러준다.
Application context 경로를 '/' 로 바꿔준다.
그리고 나서, 실행시켜보면, 실행이 됨을 볼 수 있다.
(src - main - webapp - index.jsp 가 보여지는 화면이다.)
src - main - webapp - WEB-INF - web.xml의 안의 *.form을 /로 바꿔준다.
bean을 자동으로 등록시켜주기 위해 annotation을 활성화 시켜주고, 특정 annotation(@Component @Controller @Service @Repository)이 붙어있는 class들을 자동으로 스캔하여 bean으로 등록하게 해줄 것이다.
<mvc:annotation-driven></mvc:annotation-driven>
로 annotation을 활성화해준다.
<context:component-scan base-package="Controller"></context:component-scan>
으로 스캔할수 있게 해준다. base-package에 적어주는 디렉토리의 하위 디렉토리는 모두 스캔대상이다. 여기서는 src-main-java 하위에 Controller라는 패키지를 임의로 만들고 그 패키지를 base-package로 설정한 예제이다.
여기서는 src - main - webapp 에 새로 views 디렉토리를 만들어 관리해보려고한다. src - main - webapp 하위에 새로 views 디렉토리를 만들고, dispatcher-servlet.xml에 아래 코드를 추가해준다.
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
여기서 prefix의 value가 /views/이므로 src - main - webapp - views에서 view파일을 탐색하겠다는 뜻이다.
suffix의 value가 .jsp이므로 예를들어 controller에서 "home"이라는 string이 return 되면, .jsp를 붙여 home.jsp를 src - main - webapp - views에서 탐색하여 화면에 띄워준다는 의미이다.
변경된 dispatcher-servlet.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"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">
<mvc:annotation-driven></mvc:annotation-driven> <!-- Annotation 활성화 -->
<context:component-scan base-package="Controller"></context:component-scan> <!-- Component 패키지 지정 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/views/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>
임의로 하나의 Controller와 View 페이지를 만들어서 띄워보려고 한다.
먼저 위에서 만들어놓은 src - main - java - controller 안에 homeController.java 클래스를 만들어보겠다.
@RequestMapping이라는 annotation으로 "/" 요청이 오면, home이라는 String을 return하도록 만들었다.
src - main - webapp - views에 home.jsp를 만들어준다.
그 후 실행시켜준다.
만약 실행 시 아래와같은 오류가 발생하면
pom.xml에 아래의 구문을 추가해준다.
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>