본문 바로가기

공부/Spring

[Spring] Chapter 9-10장 Intellij에서 스프링 MVC 시작하기(Spring+ Gradle + MVC)

* 초보 웹 개발자를 위한 스프링5 프로그래밍 입문*

 

Chapter 9 내용

  • 간단한 스프링 MVC 

이번 Chapter 9 내용은 MVC 환경 구성하는 내용이였다. 

 

1. 프로젝트 생성

프로젝트 생성

-   프로젝트 생성 시, Gradle에서 java에 체크한 후 프로젝트를 만들어준다.

 

스프링 프레임워크 추가

1. [프로젝트 우클릭]

 - [Add Framework Support] 에서 Spring을 추가한다.

 

2. build.gradle에서 수동으로 추가할 수도 있다.

1
2
3
4
5
     compile group: 'org.springframework', name: 'spring-context', version: '5.2.3.RELEASE'
     compile group: 'org.springframework', name: 'spring-test', version: '5.2.3.RELEASE'
     compile group: 'org.springframework', name: 'spring-tx', version: '5.2.3.RELEASE'
 
 
cs

 

Tomcat 실행하기

1. builder.gradle, plugins에 id 'war'을 추가한다.

- war로 배포파일이 생성된다.

 

 

2. Edit Configurations에서 Tomcat을 추가한다.

- 상단부의 Edit Configurations를 클릭해서 Tomcat을 추가할 수 있다.

- [+버튼] > Tomcat Server > Locale을 선택하고 저장

 

 

 

  3. HTTP 포트를 변경한다.

   - 생성된, Tomcat Server에서 Server -> HTTP port로 이동

  - 9090으로 변경해준다.

  - DB와의 충돌 예방, 9090 포트 말고 안쓰는 포트 확인해서 변경해야한다.

 

 

4. Tomcat Deployment Artifact 설정

- [+ 버튼] > Artifact

- war 파일 지정 후 저장한다.

 

✔✔ Artifact?

Gradle, Maven 등에서 빌드 결과로 나오는 개발 산출물을 Artifact라고 합니다. Java외에 기타 다른 다양한 '산출물'을 Artifact라고 부르며, Delivery 및 Deploy를 위해 최종적으로 관리되는 산출물. Artifact를 모아서 저장하는 공간을 Library 또는 Artifactory 라고 한다.

 

 

 

 

5. Tomcat실행

- 실행 시 정상적으로 connection은 되나,  경로가 url경로에 war파일 경로가 붙는다. 

 

6.  Application context 조정해준다.

- 어플리케이션 실행 시, context 위치를 알 수 있도록 조정준다.

-  [Run/Debug Configurations] >  [Deployment] > Application context 

-  루트 값[/]으로 지정한다.

- 다시, Tomcat을 재구동 시키면, localhost:9090으로 구동된다.

 

 

 

 

2. 스프링 MVC 추가, 스프링 MVC를 위한 설정 XML 파일 생성

- (root-context.xml, servlet-context.xml, web.xml)

 

Spring.webmvc를 추가

1
2
     compile group: 'org.springframework', name: 'spring-webmvc', version: '5.2.3.RELEASE'
cs

 

 webapp 폴더에 필요한 폴더 구조를 생성

- webapp은 HTML,CSS, JS,JSP 등 웹 어플리케이션을 구현하는데 필요한 코드가 위치한다.

- WEB-INFO에는 web.xml 파일이 위치한다.

 

 ✔ 폴더구조

  • src/main/java
  • src/main/webapp
  • src/main/webapp/WEB-INF
  • src/main/webapp/WEB-INF/spring
  • src/main/webapp/WEB-INF/view

 

 

 

root-context.xml, servlet-context.xml,web.xml 세팅 및 등록

 

1. root-context.xml 생성

- root-context는 /WEB-INF/spring폴더 아래에 위치시킨다.

더보기
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

 

 

 

2. servlet-context.xml

servlet-context.xml은  /WEB-INF/spring/appServlet 폴더에 위치

더보기
<?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">
    <mvc:annotation-driven />

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


    <context:component-scan base-package="config"/>


</beans>

 

 

3.  context 등록

- context를 추가하면 configure application context와 같은 메시지가 뜨게된다.

- 셍성한 root-context, sevelet-context  등록한다.

 

 


[참고]

✔ servlet-contex.xml

요청과 관련된 객체를 정의

url과 관련된 controller,  @(어노테이션), ViewResolver, Interceptor, MultipartResolver 등의 설정함

DispatcherServlet과 관련된 설정을 해야함을 알 수 있습니다.

 

 root-context.xml

view와 관련되지 않은 객체를 정의

따라서 Service, DAO, DB등 비즈니스 로직과 관련된 설정을 해줍니다.

 

 web.xml

설정을 위한 설정파일. 여러 xml파일을 인식하도록 각 파일을 가리킴.

 


 

 

4. web.xml 생성

- [File] > [Project Structure] > Facets에서 web.xml을 추가한다

- 만들어지는 경로는 \webapp\WEB-INF\ 아래여야한다.

 

 

 

- web.xml에 root-context와, servlet-context를 등록해준다.

더보기
<?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">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/root-context.xml</param-value>
    </context-param>


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

    <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/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>
</web-app>

 

 

 

5. Controller와 View파일을 만든다.

-  MVC 기반으로 잘 돌아가는지 확인한다.

 

 

- contoller는 XML에서 config폴더를 스캔했기 때문에, config 파일에다가 생성했다.

package config;
 
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
 
@Controller
 
public class HelloController {
 
    @GetMapping("/hello")
    public String hello(Model model,
                        @RequestParam(value = "name", required = falseString name) {
        model.addAttribute("greeting""안녕하세요, " + name);
        System.out.println("hello");
        return "hello";
    }
 
}
 
 
cs

 

결과

 

 


 

✔ Origin 서버가 대상 리소스를 위한 현재의 representation을 찾지 못했거나, 그것이 존재하는지를 밝히려 하지 않습니다.

 

> 파일 구조를 잘못했거나, 해당 설정을 해줘야한다.

> files->settings> build->gradle에서 Bulid,Run Intellj IDEA로 변경

 

 

300x250