Spring MVC

 Spring Framework 에서는 클라이언트의 화면을 표현하기 위한 View와 서비 스를 수행하기 위한 개발 로직 부분(Model)을 나누는 MVC 2 패턴을 지원한다. 또한 Model, View, Controller 사이의 의존 관계를 DI 컨테이너에서 관리 하여 유연한 웹 어플리케이션을 쉽게 구현 및 개발할 수 있다.

 

 

 

Spring MVC 구성 요소

○ Dispatcher Servlet

 클라이언트의 요청을 전달받음 요청에 맞는 컨트롤러가 리턴한 결과값을 View에전달하여 알맞은 응답을 생성

 

○ Handler Mapping

 클라이언트의 요청 URL을어떤 컨트롤러가 처리할지 결정

 

○ Controller

 클라이언트의 요청을 처리한 뒤,결과를 DispatcherServlet에게 리턴

 

○ Model AndView

 컨트롤러가 처리한 결과 정보 및뷰선택에 필요한 정보를 담음

 

○ ViewResolver

 컨트롤러의 처리 결과를 생성할 View를결정

 

○ View

 컨트롤러의 처리 결과 화면을 생성,JSP나Velocity템플릿 파일 등을 View로사용

 

 

Spring 프로젝트 구조

 

 main 폴더

  java               →  우리가 작성하는 .java 파일의 위치
  resources      → 프로젝트 설정에 필요한 xml 등의 설정파일들

  webapp        → 사용자 화면에 표시할 view 관련 파일들과 웹 컨테이너 설정에 필요한 xml 파일들

 

 webapp folder 웹 상의 루트 역할인 webapp 폴더

  resources          →  웹 상에서 사용될 CSS, JS 파일을 저장한다

  classes src         → 에서 작성한 .java 파일을 컴파일하여 만든 .class 파일을 저장한다.

  spring spring    → 의 설정 xml 문서들을 저장한다.

  views                →  HTML, JSP 등 사용자 화면에 보여질 웹 문서를 저장한다.

  web.xml           → 웹 서버에서 사용할 기본 설정을 기록한다

 


 

1. sts에서 프로젝트 생성

File → New → Spring Legacy Project → 프로젝트명 지정 → Templates 항목에서 Spring MVC Project 선택

 

스프링에서 제공해주는 클래스의 패키지명을 입력한다. ( 메인패키지.sub.sub2 지정 )

sub2 패키지명이 자동으로 Context명이 된다.

 

예) com.xxx.app 지정하면 자동으로 app가 context명이 된다.

http://localhost:8090/context명/서블릿맵핑명

http://localhost:8090/app 가 된다.

 


 

 

 

 


 

 

 

 

2. pom.xml 에서 수정

  • spring framework 버전 수정
    <org.springframework-version>3.1.1.RELEASE</org.springframework-version>
    👇
    <org.springframework-version>5.2.25.RELEASE</org.springframework-version>

  • <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
    <source>1.6</source>
    <target>1.6</target>
    👇
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>5.2.25</version>
    <configuration>
    <source>1.8</source>
    <target>1.8</target>

 

 

  • 프로젝트 오른쪽 클릭 후 > maven > update project 선택하면 새롭게 갱신된다.

 

 

 

 


 

 

 

 

3. 디렉토리 구조

  • 이전 서블릿/jsp
    Webcontent → WEB-INF → web.xml (서블릿맵핑, filter 등록)
                        → JSP/html/image/css/js 저장

 

  • 스프링 MVC
    src
       - main
             - webapp (Webcontent와 동일)
                   - WEB-INF (WEB-INF 폴더 내의 파일들은 외부에서 직접 접근이 불가능하다.)
                            - web.xml  (DispachterServlet을 서블릿맵핑( / ), servlet-context.xml을 init-param으로 설정,
                                                root-context.xml을 context-param으로 설정)
                            - views
                                  - *.jsp (외부에서 직접 jsp 접근 금지)

                                     - spring
                                            - appServlet 
                                                          - servlet-context.xml (스프링 설정 파일, 웹과 의존적인 빈들을 등록, @Controller)
                                         
                                                   -  root-context.xml (스프링 설정 파일, DB연동시 필요한 빈 등록, 웹과 독립적인 빈 등록)


 

 

 


 

 

 

4. root-context.xml 복사해서 servlet-context.xml에 덮어쓰기 함


 

 

 

 


 

 

 

5. SpringMVC에서도 MVC 패턴 기반이기 때문에 서블릿이 필요하다.

스프링에서는 서블릿을 생성해서 제공한다. ( DispacherServlet )

web.xml에서 DispachterServlet을 서블릿 맵핑한다. ( 맵핑값: / )

 

요청 URL: http://localhost:8090/context명/서블릿맵핑명

                                    👇

                  http://localhost:8090/app/   ⇒  DispacherServlet이 요청을 받는다.

 


 

 


 

 

6. spring configuration 파일(xml) 등록

  • 이전 xml 등록
    main메서드에서 GenericXmlApplicaton ctx = new GenericXmlApplication(”classpath:com/config/spring-config.xml”);

  • spring mvc 등록
    • DispachterServlet 등록 시 init-param으로 xml을 등록한다.
<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>

 

                         - 멀티 xml 등록이 가능하다.   <param-value> 안에 여러개 등록.

<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
			/WEB-INF/spring/appServlet/test-context.xml
	  		/WEB-INF/spring/appServlet/test-context.xml
		</param-value>
   	  </init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

 

                         - 멀티 xml 등록 시 *로 지정 가능하다.

<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/*-context.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>

 

 

 

 

  • root-context.xml 등록시 <context-param>으로 등록하고 ContextLoaderListener로 활성화 시킨다.

<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>

 

 

 

 


 

 

 

 

7. Spring MVC 아키텍쳐 ★

       브라우저 --------->  MyServlet---> XXXService --> XXXDAO ----> 오라클                     
                      <-----                       <---                    <--                         
                      jsp선택

 

 

  • Spring MVC 요청 URL
    http://localhost:8090/컨텍스트명/서블릿맵핑/요청맵핑
    예> http://localhost:8090/app/요청맵핑
    ⇒ 스프링에서는 DispatcherServlet 라는 서블릿을 제공하기 때문에 요청처리 및 응답처리를 서블릿에서 처리할 수 없다.
    ⇒ 대신 Controller 클래스가 이전 서블릿에서 했던 요청처리 및 응답처리를 한다.

         http://localhost:8090/app/요청맵핑값  ==> 요청맵핑값에 의해서 실제로 처리되는 XXXController 선택이 된다.

         http://localhost:8090/app/del --> DeleteController
         http://localhost:8090/app/add --> InsertController                                                                            
                                                                              @Controller           @Service         @Repository
 브라우저 ---------> DispatcherServlet(제공) -----> XXXController ---> XXXService --> XXXDAO ----> 오라클
                                                                    <-----                         <---                     <--    
                                                                   jsp 선택

 

 

 


 

 

8. Controller 클래스

  • POJO(Plain Old Java Object) 기반 ( 어떤 클래스 및 인터페이스를 상속받거나 구현하지 않은 순수한 클래스)
  • 반드시 @Controller 어노테이션을 지정한다.
  • 웹 클라이언트에서 들어온 요청을 해당 비즈니스 로직으로 분기시켜주고, 수행 결과의 응답을 해주는 Dispatcher 역할을 한다.

    예) 저장하는 기능
@Controller
public class InsertController{

   //url의 요청맵핑값과 Controller안의 특정메서드를 묶어야 된다.
    @RequestMapping(”/add”)
    public void insert(){
         // 저장기능
    }
}

 

예) 삭제하는 기능

@Controller
public class DeleteController{
           
     //url의 요청맵핑값(/로 시작) 과 Controller안의 특정메서드를 묶어야 된다.
     @RequestMapping(”/del”)
     public void delete(){
        // 삭제기능
     }
}

 

⇒ 모든 기능을 하나의 Controller에서 처리할 수도 있다. (일반적인 코드)


 

 

 

 

 

 

@RequestMapping("/")

웹 클라이언트에서 들어온 요청에 해당하는 비즈니스 로직을 찾아주는 역할

주의할 점은 요청 맵핑값은 반드시 /로 시작해야 되고 유일한 값이어야 된다.

 @Controller
      public class DeptController{

	   //url의 요청맵핑값(del)과 Controller안의 특정메서드를 묶어야 된다.	
	   // 요청url: http://localhost:8090/app/del
	    @RequestMapping("/del")
	    public String delete(){
	          //요청처리 ( 삭제기능 )
		
		  //응답처리 : 보여줄 jsp 설정 (  /WEB-INF/views/main.jsp )
		  return "/WEB-INF/views/main.jsp";  // 이전 서블릿의 forward 기능과 동일
	    }

            // 요청url: http://localhost:8090/app/add
	    @RequestMapping("/add")  
	    public String insert(){
		 // 요청처리 (저장기능)

		 //응답처리 : 보여줄 jsp 설정   (  /WEB-INF/views/list.jsp )
		 return "/WEB-INF/views/list.jsp";  // 이전 서블릿의 forward 기능과 동일
	    }
      }
        // 이전 서블릿에서의 forward 기능
       reqeust.getRequestDispatcher("/WEB-INF/views/list.jsp").forward(request, response);

 

 

 

 

 

  • JSP 생성 및 작성 후, controller에서 보여줄 jsp로 return값 작성

src/main/webapp/WEB-INF/views 아래에 jsp 파일 생성

 

 

 

 

  • 반드시 xml에 빈으로 등록해야 된다.
    • 첫번째 방법 : 명시적으로 <bean> 이용
    • 두번째 방법 : component-scan 
  • 반드시 servlet-context에 빈으로 등록해야 한다.

 

 

 

 

 


 

 

 

 

 

'Framework > SPRING FRAMEWORK' 카테고리의 다른 글

@RequestMapping - URL 패턴 이용  (0) 2023.09.14
Multi  (0) 2023.09.14
Transaction 처리  (0) 2023.09.13
Spring에서의 MyBatis 연동  (1) 2023.08.31
(사용자가 만든) bean들을 등록없이 객체 생성하는 방법  (0) 2023.08.31
xoo | 수진