Maven
프로젝트를 선택하고, JDK
버전을 선택한 다음 Next
를 누른다.
Name : project name
GroupId : 일반적으로 도메인을 역순으로 사용한다. (e.g. com.apple)
ArtifactId : 일반적으로 프로젝트 이름을 그대로 사용한다.
Version : 말 그대로 버전...
잘 입력 후 Finish
를 누르면 프로젝트가 생성된다.🙏
프로젝트가 생성된 후 루트 디렉토리를 우클릭
해서 Add Framework Support...
를 선택한다.
좌측에 여러가지 프레임워크가 보인다. 그 중 Spring MVC
를 선택하고, 우측에서 Configure...
를 눌러 원하는 Spring MVC 버전을 선택하고 OK
를 누르면 알아서 다운로드 후 프레임워크를 추가한다(사진을 보면 알 수 있듯이 다운로드 되는 파일 4개를 미리 보여준다.).👏
거의 뭐... 필수적으로 해줘야 하는 것이다. 안 그러면 실행 해보면 알겠지만 에러가 발생하고 'hello world'를 볼 수 없다.
우클릭 해서 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 에러 해결하기
앱에 대한 설정을 하는 것으로, 앱 디렉토리가 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
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
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>
/
로 바꿔준다.<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 버전 설정하기
다음을 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를 생성하지도, 잡아주지도 않아서 그런다.
/project/src/main/java/
에 Controller
패키지를 생성한다. 그리고 package 안에 HomeController
클래스를 생성한다.
이 클래스를 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";
}
}
이제 위에서 넘겨주기로 한 index
를 views 안에 넣어줘야한다.
project/web/WEB-INF/
에 views
디렉토리를 생성한다.index.jsp
파일을 views
안에 넣어준다(index.jsp 에 'Hello world'도 적어주자.).Tomcat Server > Local
을 통해 추가한다./
로 수정한다.
오른쪽 사용 가능한 목록에서 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