IntelliJ Spring MVC 프로젝트 시작하기

hogwarts·2021년 4월 14일
6

Java

목록 보기
1/1

1. 프로젝트 생성하기


Maven프로젝트를 선택하고, JDK버전을 선택한 다음 Next를 누른다.

Name : project name
GroupId : 일반적으로 도메인을 역순으로 사용한다. (e.g. com.apple)
ArtifactId : 일반적으로 프로젝트 이름을 그대로 사용한다.
Version : 말 그대로 버전...

잘 입력 후 Finish를 누르면 프로젝트가 생성된다.🙏


프로젝트가 생성된 후 루트 디렉토리를 우클릭해서 Add Framework Support...를 선택한다.

좌측에 여러가지 프레임워크가 보인다. 그 중 Spring MVC를 선택하고, 우측에서 Configure...를 눌러 원하는 Spring MVC 버전을 선택하고 OK를 누르면 알아서 다운로드 후 프레임워크를 추가한다(사진을 보면 알 수 있듯이 다운로드 되는 파일 4개를 미리 보여준다.).👏

2. 프로젝트 수정하기

거의 뭐... 필수적으로 해줘야 하는 것이다. 안 그러면 실행 해보면 알겠지만 에러가 발생하고 'hello world'를 볼 수 없다.

pom.xml 의존성 설정


우클릭 해서 Generate...를 선택하거나 (⌘ + N)을 누르면 다음과 같이 dependency를 쉽게 추가할 수 있다.👍

Spring boot가 아닌 Spring MVC를 할 것이기 때문에 spring-webmvc를 선택한다.

>를 누르고 위에서 추가한 framework의 버전을 선택해도 되지만, 순서대로 나오지 않아 찾기 힘들 수가 있다. 그럴 경우 그냥 아무거나 선택한 다음 버전을 수정해주면 된다(아래 링크 걸어둔 MVN Repository에서 복사해다 사용해도 된다.).🧐


library 디렉토리를 열어 설치된 버전을 확인한 후 맞게 수정해준다.
참고 : MVN Repository

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

만약 Dependency 'org.springframework:spring-webmvc:4.3.18.RELEASE' not found와 같은 에러가 발생할 경우는 다음과 같이 해결한다.
👉 IntelliJ dependency 에러 해결하기

web.xml 서버 환경설정

앱에 대한 설정을 하는 것으로, 앱 디렉토리가 Eclipse 기반의 STS와는 다르다. 따라서 STS 사용자와 협업이 필요하다면 둘 중 하나를 한 쪽에 맞춰야 한다.🤝

  • WEB 디렉토리
    IntelliJ : /project/web
    STS : /project/src/main/webapp
  • web.xml 경로
    IntelliJ : /project/web/WEB-INF/web.xml
    STS : /project/src/main/webapp/WEB-INF/web.xml
  • applicationContext.xml이 추가되어 있나 확인한다.(STS 경로를 따를 경우는 그에 맞게 수정한다.)
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
  • listener가 추가되어 있나 확인한다.
<listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
  • servlet에 dispatcher-servlet.xml 추가되어 있나 확인한다. 그리고 init-param부분을 추가해준다.
<servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
  • URL 패턴이 정해져 있지 않다. /로 바꿔준다.
<servlet-mapping>
  <servlet-name>dispatcher</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

Tomcat 버전에 Servlet 버전 맞추기!! ⭐️⭐️⭐️
처음 생성하면 web.xml에 web-app 태그에 다음과 같이 자동으로 설정된다.

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"

이는 Servlet 버전으로 Tomcat 버전에 맞춰야한다. 톰캣 8.5를 사용할 것이므로 3_1, 3.1로 바꾼다.
자세한 설명은 다음 링크를 참고할 것. 👉 web.xml 서버 설정에서 Servlet 버전 설정하기

dispatcher-servlet.xml 설정(httpServlet을 상속 받는 servlet으로 컨트롤러 관련 설정)

다음을 beans 태그에 추가한다.

<beans
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="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
"
>

2개씩 쌍으로 생성하고, CDN이기 때문에 철자가 하나라도 틀리면 안 된다. URL에 주소를 직접 입력해서 xsd 파일이 받아지는지 확인해보거나 복붙하자. 🥸

이번에는 beans 태그 하위에 추가한다.

<!-- Annotation -->
<mvc:annotation-driven></mvc:annotation-driven>

<!-- Base package -->
<context:component-scan base-package="Controller"></context:component-scan>

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

다음과 같은 모양이 될 것이다.

<?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:mvc="http://www.springframework.org/schema/mvc"
       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">

  <!-- Annotation -->
  <mvc:annotation-driven></mvc:annotation-driven>

  <!-- Base package -->
  <context:component-scan base-package="Controller"></context:component-scan>

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

여기까지 했다면 base-package에 Controller를 찾을 수 없다고 에러가 발생 할 것이다. 아직 package를 생성하지도, 잡아주지도 않아서 그런다.

3. Controller, View 생성하기

Controller package 생성하기

  1. /project/src/main/java/Controller 패키지를 생성한다. 그리고 package 안에 HomeController 클래스를 생성한다.

  2. 이 클래스를 Controller로 사용하기 위해 annotation을 이용해 Controller로 바꿔주고, Endpoint를 만들어준다.

package Controller;

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

@Controller
public class HomeController {
    
    @RequestMapping(value = "/")
    public String main() {
        return "index";
    }
}

views 생성하기

이제 위에서 넘겨주기로 한 index를 views 안에 넣어줘야한다.

  1. project/web/WEB-INF/views 디렉토리를 생성한다.
  2. 이미 생성된 index.jsp파일을 views안에 넣어준다(index.jsp 에 'Hello world'도 적어주자.).

4. Tomcat 서버 실행하기

  1. http://tomcat.apache.org
    여기서 톰캣을 다운로드 하여 적당한 디렉토리에 압축을 풀어준다. configurations에서 Tomcat Server > Local을 통해 추가한다.

2. Deployment에서 경로를 /로 수정한다.

3. Project Structure > Artifacts 설정하기

오른쪽 사용 가능한 목록에서 Spring MVC를 추가하고, 동일한 버전의 Spring도 함께 추가한다. (반드시 Web Application: Exploded를 선택해야한다. Why? )
만약, 버전이 다를 경우는 아래 사진과 같이 Libraries에 가서 버전을 동일하게 바꾸면 된다.

Spring-5.2.3.RELEASE선택 > Change Version... > Spring-4.3.18.RELEASE로 변경

성공했다면~~~ 🎉

Run 했는데 에러가 날 때 가장 먼저 확인해야 할 것 ⁉️

  • Tomcat 버전에 맞는 Servlet 버전인지, Java 버전인지 확인하기
  • CDN 링크가 정확한지 확인하기(철자 하나만 틀려도 에러가 나는데 찾기 쉽지 않다. 꼭 확인해보기!)

https://mvnrepository.com/search?q=spring

https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-servlet




Reference
1. "MVN Repository", MVN Repository, last modified --latest, accessed Apr. 14. 2021, https://mvnrepository.com/search?q=spring
2. "Web on Servlet Stack", Spring, last modified Apr. 13. 2021, accessed Apr. 14. 2021, https://docs.spring.io/spring-framework/docs/current/reference/html/web.html#mvc-servlet

profile
모르는 코드 10줄 보단 아는 코드 1줄

0개의 댓글