kjh95.tistory.com/311

     

    Spring | Spring MVC의 이해 | 실행환경 준비 | spring tool suite 4.8.0 | maven을 이용한 기본 웹 프로젝트 생

    MVC model2 방식의 변화 : Dispatcher를 집중화 하기 전의 모델 model1은 컨트롤러와 출력의 담당하는 jsp가 하나로 뭉쳐져 있었지만 model2가 되면서 나누어 졌다. MVC model2 방식의 변화 : Dispatcher를 집중..

    kjh95.tistory.com

     


    Spring Dispatcher를 Front Controller로 설정

    MVC를 지원하기 위한 Spring 라이브러리 설치하기

    2가지 방법이 있다.

     

    maven원격 라이브러리 목록 받기 - 방법 1

    목록이 다운로드되면 검색해서 쓸 수 있다.

     

    mvnrepository.com에서 직접 찾아서 pom.xml작성 - 방법 2

    계층적으로 받아진 것을 확인할 수 있다.


    Dispatcher-servlet.xml 파일의 의미와 용도IndexController 작성하기 

     

    프런트 컨트롤러 역할을 하기 위한 sevlet class 설정

     

    Dispatcher 서비스 설정

     

    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"
      metadata-complete="true">
    
      <servlet>
      	<servlet-name>dispatcher</servlet-name>
    	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>dispatcher</servlet-name>
      	<url-pattern>/*</url-pattern>
      </servlet-mapping>
    
    
      <display-name>Welcome to Tomcat</display-name>
      <description>
         Welcome to Tomcat
      </description>
    
    </web-app>

     

    프런트 컨트롤러는 모든 주석을 받아들여야 하며

    어떠한 요청이 와도 프런트 컨트롤러가 mapping하지 않은 url은 절대 나오면 안 된다.

    index.jsp를 실행하면 dispatcher-servlet.xml 가 없어 에러가 뜬다.

    mapping 하는 설정 파일을 만들어주어야 한다.

     

    dispatcher 부분은 web.xml에 지정한 이름이며 -servlet은 예약된 이름이다.


    dispatcher-servlet.xml 작성

    스프링이 사용할 설정들 

    ioc container 설정하기

    docs.spring.io/spring-framework/docs/

     

    Index of /spring-framework/docs

     

    docs.spring.io

     

     

    docs.spring.io/spring-framework/docs/5.2.x/spring-framework-reference/core.html#beans

     

    Core Technologies

    In the preceding scenario, using @Autowired works well and provides the desired modularity, but determining exactly where the autowired bean definitions are declared is still somewhat ambiguous. For example, as a developer looking at ServiceConfig, how do

    docs.spring.io

     

    dispatcher-servlet.xml

    <?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
            https://www.springframework.org/schema/beans/spring-beans.xsd">
    
        <bean id="/index" class="com.newlecture.web.controller.IndexController">  
            <!-- collaborators and configuration for this bean go here -->
        </bean>
    
    </beans>

    컨테이너에 담겨있는 객체들이 사용자가 url로 요청을 하면 컨테이너에서 클래스를 꺼낸다.

    id="/index" url 요청이 오면 class = "com.newlecture.web.controller.IndexController"를 객체화해서 호출


    IndexController 작성하기 

    POJO(Plain Old Java Object) - setter getter로 이루어진 java beans를 뜻한다.

    - 라이브러리나 프레임워크에 강제받지 않는 객체

     

    인덱스 요청에 수반할 수 있는 함수 기능이 있어야 한다. => handleRequest 

    모든 컨트롤러는 디스패처가 정의해놓고 있는 약속을 해야 한다 => controller 인터페이스로  handleRequest 구현

     

     

    인덱스 요청에 수반할 수 있는 함수 기능이 있어야 한다. => handleRequest 

    모든 컨트롤러는 디스패처가 정의해놓고 있는 약속을 해야 한다 => controller 인터페이스로  handleRequest 구현

    디스패처 기능은 스프링이 제공하기에 디스패처를 하기 위한 model과 View를 담아서 준다.

    index.jsp

    IndexController.java

    package com.newlecture.web.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    public class IndexController implements Controller {
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		// TODO Auto-generated method stub
    		ModelAndView mv = new ModelAndView(); //객체생성
    		mv.addObject("data", "Hello Spring MVC~"); //데이터 담음
    		mv.setViewName("index.jsp"); //데이터 담은거 setting
    		
    		return mv;
    	}
    
    }

    IndexController.java 실행

    pojo 클래스라서 tomcat이 읽지 못해서 소스코드를 반환하는 일이 발생하게 된다.

    -> http://localhost:8080/webprj/index 

    web.xml에 *을 빼준다. -> DispatcherServlet을 거치긴 하지만 리소스를 찾다가 리소스가 없는 것들은 리소스를 직접 요 청해 게 해준다.

     

     

    하지만 *을 빼주면 문제가 발생한다

    컨트롤러와 view가 분리되어 있을 경우 실제 애플리케이션에서는 하나가 되어야 한다.

    -> 무조건 컨트롤러를 요청하게 해야 한다.

    사용자가 바로 /index를 요청할 수 있으면 안 된다. -> 요청할 수 없게끔 숨겨놓는 작업을 해야 한다.

     

    WEB-INF/veiw 폴더를 만든다. view폴더에 index.jsp를 옮겨준다.

    이렇게 해준다면 사용자가 요청할 수 없게 된다. (비공개 영역이기 때문에 접근할 수 없다. 하지만 컨트롤러에서는 요청이 가능하다. -> 서버 쪽에서 파일을 요청하기 때문이다.) -> IndexController의 setViewName 경로를 바꿔준다. 

    IndexController.java

    package com.newlecture.web.controller;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.springframework.web.servlet.ModelAndView;
    import org.springframework.web.servlet.mvc.Controller;
    
    public class IndexController implements Controller {
    
    	@Override
    	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    		// TODO Auto-generated method stub
    		ModelAndView mv = new ModelAndView(); //객체생성
    		mv.addObject("data", "Hello Spring MVC~"); //데이터 담음
    		mv.setViewName("/WEB-INF/view/index.jsp"); //데이터 담은거 setting
    		
    		return mv;
    	}
    
    }

    View 페이지를 실행하기 위한 위치설정

    url에 있는 context 경로 제거하기

     

    mapping 주소와 같은 이름의 비어있는 파일을 만들어 준다.

    index

    index를 실행하게 되면 주소가 요청되면 파일 내용과 상관없이 디스패처가 알아서 컨트롤러를 이용해 실행시켜준다.

     

    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기
    loading