스프링 주요 모델, 스프링 MVC 주요 구성요소(DispatcherServlet, HandlerMappping, Controller, ModelAndView, View, ViewResolver)- 설정하기, ExcelView 예시, 쿼리스트링 기본값 설정(RequestParam, defaultValue), Controller에서 ..

2019. 7. 1. 18:54Spring

---------------------------스프링 주요모델------------------------
        
spring 주요 모델
        spring-core, spring-bean
                - 기본적은 기능을 갖고 있는 스프링 컨테이너 제공
                        - BeanFactory(객체 생성, 객체 조림 지원) 제공
                - 각종 유틸리티 클래스 제공
        spring-context
                - 좀 더 다양한 기능을 갖고 있는 스프링 컨테이너 제공
                        - ApplicationContext(객체 생성, 객체 조림, AOP지원, EJB연동 지원) 제공
                        - ClassPathXmlApplicationContext
                        - FileSystemXmlApplicationContext
                        - GenericXmlApplicationContext
        spring-support
                - JAVA EE 관련 기술과의 연동을 지원
                - 이메일, JMS, JMX 기술 지원
        spring-aop
                - 관점지향 프로그래밍 지원
        spring-expression
                - Spring EL관련 지원
        spirng-oxm
                - Object Xml Mapping 지원
                - 자바객체와 XML간의 변환
        spring-test
                - JUnit을 사용한 스프링 애플리케이션에 대한 단위테스트를 지원
        spring-jdbc
                - JDBC를 이용한 DB 엑세스 작업을 지원한다.
                        - JdbcTemplate를 제공한다.
        spring-orm
                - ORM 프레임워크(ibatis, jpa, hibernate)와 스프링 연동을 지원한다.
        spring-tx
                - 선언적 트랜젝션처리를 지원한다.
        spring-web
                - 웹 애플리케이션에 최적화된 스프링 컨테이너를 제공
                - web.xml에 스프링 컨테이너 관련 설정을 구성하도록 지원
        spring-webmvc
                - MVC 패턴의 웹애플리케이션 개발을 지원한다.
                - @어노테이션을 활용한 MVC 웹애플리케이션 개발 지원(스프링 3.0버전에서 획기적으로 개선)


스프링 MVC의 주요 구성요소
        - DispatcherServlet
                - 서블릿 클래스다.
                - 클라이언트의 URL의 요청을 접수받는다.
                - 요청 URL과 매핑된 요청 핸들러 메소드를 실행한다.
                - 요청 핸들러 메소드의 실행결과로 반환되는 ModelAndView 객체를 분석해서 
                  적절한 View(응답을 제공하는 객체)를 실행한다.
                - 요청접수 -> 요청핸들러 메소드 실행 -> 뷰 실행 작업을 전체적으로 중재한다.
                   * 프론트컨트롤러 역할을 수행하는 서블릿이다.
                - 스프링 컨테이너를 생성한다.
                        * 스프링 MVC에서 사용되는 객체(컨트롤러, 뷰, 뷰리졸브, 인터셉터) 등을
                          생성/조립하는 스프링 컨터이너를 생성한다.
                - 설정
                        

<servlet>
	<servlet-name>app</servlet-name>
	<servlet-class>....Dispatcherservlet</servlet-class>
	<!-- Bean Configuration -->
	<init-param>
		<param-name>contextConfigLocation</param>
		<pram-value>WEB-INF/spring/context.xml</param-value>
	</init-param>
</servlet>
<servlet-mapppig>
	<servlet-name>app</servlet-name>
	<url-pattern>*.do</url-pattern>
</servlet-mapping>




        - HandlerMapping
                - 인터페이스다.
                - 요청URL과 매핑된 컨트롤러 혹은 요청 핸들러 메소드를 찾아서 DispatcherServlet에게
                  제공한다.
                        - BeanNamerUrlHandlerMapping, RequestMappingHandlerMapping을 DispatcherServlet을 
                          기본 핸들러 매핑객체로 사용한다.
                           * 핸들러매핑과 관련된 특별한 설정을 필요하지 않다.


        - Controller
                - 사용자의 요청을 실질적으로 처리하는 클래스다.
                - 개발자 직접 구현해야 한다.
                - 여러 개의 요청행들러메소드로 구성되어 있다.
                   * 각각의 요청행들러메소드는 특정요청URL과 매핑되어 있다.
                - 요청 파라미터의 유효성 체크, 업무로직의 실행, 뷰의 전달할 데이터 설정,
                  뷰의 결정 등의 작업을 수행한다.



        - ModelAndView
                - 모델객체(뷰에 제공할 데이터를 포함하고 있는 객체)와 
                  이동할 뷰 페이지(혹은 뷰객체) 정보를 담는 객체
                - 요청행들러메소드의 실행결과로 DispatcherServlet에게 제공된다.
                   * 요청핸들러메소드가 아래와 같은 경우라도 최종적으로 ModelAndView가 반환된다.
                        public String list(Model model){
                                List employee = employeeService.getAllEmployees();
                                model.addAttribute("employees", employees);
                                return "employee/list";
                        }
        
                   * HandlerAdapter
                        - 인터페이스다.
                           * RequestMappingHanderAdapter가 기본 핸들러어댑터다.
                        - 요청핸들러메소드를 실행과 관련된 모든 처리를 담당한다.
                           * 요청파라미터를 분석해서 매개변수로 전달
                           * 폼입력값 유효성 체크
                           * 요청핸들러 메소드 실행
                           * 반환값을 분석해서 ModelAndView객체로 만들어서 DispatcherServlet에 반환


        - View
                - 인터페이스다.
                - 모델의 데이터를 다양한 응답컨텐츠로 변환해서 클라이언트에 제동한다.
                  * JSP는 뷰가 아니다. 뷰페이지 혹은 뷰템플릿이다.
                - 대표적인 View
                        - internalResourceView, JstlView
                                JSP를 실행해서 HTML을 응답으로 제공한다.
                        - RedirectView
                                재요청할 URL을 응답으로 제공한다.
                        - MappingJacksonView
                                JSON 형식으로 텍스트 데이터를 응답으로 제공한다.
                        - MarshallingView
                                XML 형식의 텍스트 데이터를 응답으로 제공한다.
                        - AbstractExcelView
                                엑셀문서를 응답으로 제공한다.
                        - AbstractPdfView
                                PDF 문서를 응답으로 제공한다.


        - ViewResolver
                - 인터페이스다
                - 요청핸들러메소드의 실행결과로 획득된 ModelAndView에 View객체가 null인 경우
                  뷰이름(주로 jsp페이지 명, 재요청URL)을 분석해서DispatcherServlet에게
                  적절한 View객체를 제공한다.
                - 대표적인 ViewResoler 클래스
                        - internalResourceViewResolver
                                JSP기반의 웹 애플리케이션을 만들때 주로 사용되는 뷰리졸브다.
                                뷰이름이 jsp 페이지 이름인 경우 -> return "main"
                                        InternalResourceView, JstlView를 제공한다.
                                        "/WEB-INF/view/" + "main" + ".jsp"에 해강하는 jsp를 실행하는 View를 제공
                                뷰이름이 재요청인URL인 경우 -> return "refirect:list.do"
                                        RedirectView를 제공한다.
                        - 설정 예

<bean id="viewResolver" class="....InternalResourceViewResolver">
	<property name="prefix" value="/WEB-INF/views/"></property>
	<property name="suffix" value=".jsp"></property>
</bean>

 


                        

 

 

 

예시) DispatcherServlet (web.xml)설정하기

 

 

 

 

뷰리졸버(ViewResolver )는 
        요청행들러 메소드가 뷰이름만 반환하거나, 
        요청핸들러 메소드가 뷰이름만 설정된 ModelAndView를 반환하거나, 
        요청핸들러 메소드의 반환값이 void인 경우  
InternalResourceView 객체를 DispatcherServlet에게 제공하는 객체다. 

InternalResourceViewResolver는 반환된 뷰이름에 prefix지정된 값과 suffix로 지정된 값을  
앞뒤로 붙여서 완전한 jsp페이지 경로를 완성한다. 
완성된 그 경로를 포함하고있는 InternalResourceView를 DispatcherServlet에게 제공한다. 

DispatcherServlet은 InternalResourceView를 실행시켜서 JSP로 내부이동하고, 
JSP의 실행결과로 생성된 HTML이 응답으로 보내진다.

 

 

 

예시) mvc-context.xml 설정하기

 

 

 

 

예시) Controller의 View와 ViewResolver를 통해 불러오기

 

 

 

 

예시) Excel 파일로 내보내기, ExcelView 사용하기

 

1. pom.xml에 poi 라이브러리를 추가한다.

 

2. ExcelView를 생산한다. 

 

3. 컨트롤러에 설정을 한다.

 

4. 확인해본다.

 

 

 

 

 

페이지 열때 쿼리스트링 값이 없을때 디폴트(Default value) 값 설정하기

        - 쿼리스트링에서 값이 없을 경우 사용하면 NullpointException 에러가 안날수있다.

        사용방법

                매개변수 안에다가 밑에와 처럼 쓴다.

                @RequestParam(value="받아올값", required = true or false, defaultValue = "기본값 설정") 

                required 는 값이 꼭 있어야하면 ture, 없어도 되면 false를 쓴다.

                deraultValue는 required값이 false일때만 쓴다.

 

 

 

예시) 페이지 열때 쿼리스트링 값이 없을때 디폴트(Default value) 값 설정하기

 

 

 

 

 

 

메소드 요청방식으로 구분하여 RequestMapping하기

        - 같은 url이어도 메소드의 요청방식 (action 방식)으로 구분을 하여 사용할 수 있다.

        사용방법

                @RequestMapping(value="/사용할url", method = RequestMethod.메소드 요청방식(GET 또는 POST))

 

 

 

 

 

예시) 같은 url을 가지지만 메소드 요청방식(action 방식)으로 구분하기

 

 

  1) GET 방식

 

 

 

  2) POST방식 

 

 

 

 

pom.xml : 프로젝트와 관련된 설정
- 프로젝트명, 프로젝트 버전, 프로젝트에서 사용되는 라이브러리 의존성

web.xml : 웹어플리케이션과 관련된 정보가 설정된 파일
- 초기화 파라미터, 세션 관련 설정, 오류페이지 관련 설정, 에러페이지와 관련된 설정 등

context.xml : 스프링 빈 설정파일
- 객체 생성, 객체 조립관련 설정
servlet, mvc : 웹과 관련된 빈(컨트롤러 뷰 뷰리졸브 등)
root : 웹과 무관한 것들