티스토리 뷰

이제 막 IntelliJ를 사용하기 시작했는데 이클립스와 너무달라서 스프링 프로젝트조차 만들기가 힘들다ㅠㅠ

sts에서 Spring MVC 프로젝트를 생성하면 기본구조가 설정되었는데 IntelliJ는 프로젝트 생성에 Spring MVC가없다. 

(프로젝트 생성부터가 맨붕이다)

인터넷에 있는 다른 예제들보면 Add Framework에서 Spring MVC를 적용하던데 나는 Spring 목록에서 정확히 Spring MVC만 없다.. 이유를 모르겠다. 

다른방법으로 구조는 만들어보아도 404에러만 뜬다...


하루종일 프로젝트 생성 삭제만 반복하면서 터득한 방법을 기록하고자 한다.



순서

  1. 프로젝트생성
  2. 설정( 디펜던시추가 -> web.xml생성 -> root-context와 servlet-context생성 )
  3. 테스트를위해 컨트롤러와 뷰만들기
  4. 톰캣 설정
  5. 구동


1. 프로젝트 생성하기



Maven프로젝트를 선택하고 (Spring이 아니다!!) Create from archetype는 체크해제한다


Next 버튼으로 넘어가자



GroupId와 ArtifactId는 본인설정대로 하면된다.



프로젝트 생성은 간단하게 끝났다 중요한것은 Spring이 아니라 Maven으로 프로젝트를 만드는것이다.

이제 설정을 해보자!





2. 기본설정



우선 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.spring.pjt01</groupId>
<artifactId>pjt01</artifactId>
<version>1.0-SNAPSHOT</version>

<dependencies>
<!-- spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-aop</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

<!-- spring mvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>javax.servlet.jsp.jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>

<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.2</version>
<scope>provided</scope>
</dependency>

<dependency>
<groupId>cglib</groupId>
<artifactId>cglib</artifactId>
<version>2.2.2</version>
</dependency>

<!-- junit test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>

<!-- database -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.4.6</version>
</dependency>

<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.3.2</version>
</dependency>

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>4.3.18.RELEASE</version>
</dependency>

</dependencies>

<repositories>
<repository>
<id>spring-libs-release</id>
<name>Spring Releases</name>
<url>https://repo.spring.io/libs-release</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>

<build>
<finalName>pjt01</finalName>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>utf-8</encoding>
</configuration>
</plugin>
</plugins>
</build>
</project>


디펜던시를 추가했으니 적용을 해야한다. 인텔리제이 우측하단 알림을 눌러준다.


둘다 선택해도된다. 차이점은 Enable Auto-Import는 앞으로진행하면서 import부분을 자동으로 해준다.




이번엔 Web.xml을 만들어보자.


File -> Project Structue를 실행하자. 단축키는 Ctrl + Alt + Shift + R 이다.

Modules에서 +버튼을 누른후 Web을 선택하자



web.xml의 생성경로와 루트 경로를 설정해줘야한다.

경로는 {프로젝트명}\src\main\webapp 으로 설정한다.


1. 프로젝트명\src\main\webapp\WEB-INF\web.xml

2. 프로젝트명\src\main\webapp



이제 만들어진 web.xml을 작성해보자

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">

<display-name>Spring MVC</display-name>

<!-- Root context -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/root-context.xml</param-value>
</context-param>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- servlet context -->
<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/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!-- encoding filter -->
<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>

</web-app>

한글을 위한 인코딩설정과 root-context와 servlet-context설정을 해주었다. 이제 root-context.xml와 servlet-context.xml를 만들어야한다.


WEB-INF에 Spring Config파일로 root-context와 servlet-context를 생성해보자.



root-context.xml은 그냥 놔두고 servlet-context.xml 내용을 작성하자.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

<!-- This tag registers the DefaultAnnotationHandlerMapping and
AnnotationMethodHandlerAdapter beans that are required for Spring MVC -->
<mvc:annotation-driven />
<!-- This tag allows for mapping the DispatcherServlet to "/" -->
<mvc:default-servlet-handler />

<!-- Process annotations on registered beans like @Autowired... -->
<context:annotation-config/>
<!-- 컴포넌트 스캔 -->
<context:component-scan base-package="com.spring.pjt01" />

<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />
</bean>

</beans>


component-scan 경로부분이 오류가 날텐데 프로젝트 생성시 적었던 GroupId를 적어준후 java폴도에 해당 패키지도 추가해줘야 한다.






헤메부분중 하나인데 테스트하기위해 컨트롤러와 뷰를 만들고 실행하면 404에러가뜬다. 컨트롤러 클래스명이 회색으로 되있으면서 'Class {컨트롤러명} is never use' 이라고뜨는게 의심됬었다. 해결방법은 Facets에 context들이 등록이 되있어야했다. 


File -> Project Structue를 실행하자. 단축키는 Ctrl + Alt + Shift + R 이다.

Facets에서 Spring({프로젝트명})을 선택한후 Spring Application Context를 편집해줘야한다. 



root-context.xml과 servlet-context.xml을 체크해준후 OK를 누르면 된다.



이제 설정이 잘 됬는지 컨트롤러와 뷰를 만들어보자



컨트롤러만들기


컨트롤러는 아까만든 패키지에 HomeController.java 파일을 생성한후 작성해보자

package com.spring.pjt01;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HomeController {

@RequestMapping("/home")
public String home(){
return"index";
}
}



뷰만들기


servlet-context.xml에 경로를 /WEB-INF/views/ 로 설정했으니 WEB-INF폴더에 views 폴더를 생성해준후 그안에 index.jsp파일을 생성해준다.

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>home</title>
</head>
<body>
HelloWolrd!!
</body>
</html>


이제 실행해보자!


톰캣을 사용하여 구동시켜야한다. 마지막으로 톰캣만 설정해주면된다. 


Run -> EditConfigurations 를 실행한다.



+ 버튼을 누른후 Tomcat Server 에서 Local을 선택한다.




Cnfigure에서 tomcat경로를 설정해준다. (여기서 중요한게 하단에 Warning인데 이걸 처리안하고 그냥 OK누르면 게속 404오류가 발생한다.)


Warning을 처리하기위해서 Fix를 누른후 처리한다.


Fix를 누르면 창이뜨는데 +버튼을 누른후 Web Application: Exploded에서 From Modules를 선택해준다


sts는 target을사용하고 인텔리제이는 out경로를 사용한다 sts에 익숙한사람은 경로를 프로젝트폴더/target/프로젝트명 으로바꿔주면된다.

war파일도 생성하고싶다면  Web Application: Archive에서 For 'pjt01:war exploded를 선택해준다.

sts경로로 수정하는사람은 프로젝트명/target으로 수정해준다




그리고 OK!!!


톰캣설정이 끝났다 이제 실행해보자 좌측상단의 실행 버튼을 눌러도되고 Shitf + F10을 눌러서 실행해도된다.



/home경로 url로 접속했을때  HelloWolrd가 뜬다면 성공!!



댓글