-
[Spring] 005. Spring MVC 의 개요SsY/Class 2023. 6. 29. 14:02728x90
Spring MVC 의 개요
■■■ Spring MVC ■■■ 1. 웹 개발을 위한 MVC 패턴이 적용된 Spring Framework Spring 에서는 DispatcherServlet 클래스가 컨트롤러 역할을 수행하게 된다. //-- 클라이언트 방문시 직원(view) 직접 만나지 않고 //-- 큰 빌딩의 인포데스크가 관리(dispatcher-servlet) - 해당 회사에 팀 담당자(servlet)에 연락 //-- ---------------- 이게 스프링(프론트 컨트롤러) ---------(사용자 정의 컨트롤러) 2. Spring MVC 의 주요 구성요소 - DispatcherServlet //-- 스프링(프론트 컨트롤러) , 지정되어있는 이름 - HandlerMapping - Controller : 사용자 정의 Controller. 액션 처리. 우리가 작성. - ModelAndView - ViewResolver - view : 결과 출력. 우리가 작성. - web.xml : DispatcherServlet 객체 등록. 우리가 작성. //-- *.action 이라는 주소요청이 온다면 //-- (원래는) 해당 서블릿으로 보내~ //-- → (대신에) 모두 DispatcherServlet 으로 보내 라고 작업하게 됨 - dispatcher-servlet.xml : Controller 객체 등록. 우리가 작성. //-- 프론트 컨트롤러를 제어할 수 있는 작업지시서 작성 하는 곳 //-- 지정되어있는 이름 //-- web.xml 에서 넘어오면 //-- hi.action 이면 해당 사용자 정의 컨트롤러로 가라 //-- bye.action 이면 해당 사용자 정의 컨트롤러로 가라 //-- 이러한 작업들을 기재하게 된다. 3. Spring MVC 실행 흐름 - 사용자 요청 → DispatcherServlet - DispatcherServlet → HandlerMapping 에 주소 분석 요청 //-- ex) hi.action 인지 ... 찾아서 업무 분배 → 특정 컨트롤러에 - DispatcherServlet → 특정 Controller 에 객체 호출 및 결과 수신. 결과는 ModelAndView 객체. ※ ModelAndView 객체 : View 객체 정보와 결과 값이 들어있는 객체 - DispatcherServlet → ViewResolver 에 View 객체 분석 요청. - DispatcherServlet → 특정 View 객체에 Model 객체를 넘겨주고 결과 출력. 4. Spring MVC 에서 우리가 해야할 일 - Controller //-- 사용자 정의 컨트롤러 액션 처리를 담당하는 Controller 클래스 작성 Annotation 을 사용하거나, Controller 인터페이스를 구현하여 작성 - View 결과 출력용 JSP 페이지 작성 - web.xml 서블릿 주소와 DispatcherServlet 객체 등록 - dispatcher-servlet.xml 우리가 작성한 Controller 객체 등록 URL 매핑 주소 등록 ※ Spring 이 스트럿츠를 비롯하여 다양한 웹 프레임워크와 비교적 연동이 잘 되는 편이기는 하지만 서로 다른 두 프레임워크를 연동하기 위해서는 설정의 중복 등 개발과정에서 불편함이 존재할 수 밖에 없다. 따라서, Spring 이 자체적으로 제공하는 MVC 프레임워크를 사용하게 되면 Spring 이 제공하는 AOP, 트랜잭션 처리, IoC/DI 등의 기능을 그대로 사용하면서 MVC 패턴에 기반하여 웹 어플리케이션을 개발할 수 있다. 또한, 다른 프레임워크와 Spring 을 연동하기 위해서 설정을 중복해서 적용해야 한다든지... 하는 개발과정에서 나타나는 불편을 해소할 수 있게 된다.
mvc01
■■■ Spring MVC 프로젝트 실습01 ■■■ ○ Perspective : JavaEE ○ 다이나믹 웹 프로젝트 생성 : mvc01 (STS - 스프링 / 스프링 레거시 / 스프링 부트 / 스프링 MVC ...) ○ 톰캣 서버 등록 및 포트(port)설정 : port 8080 → 8090 → 3306 / URIEncoding="UTF-8" ○ 기타 환경 설정 : 폰트, 줄번호, 편집 포맷, 인코딩방식, 템플릿 등... ○ Spring MVC 환경 설정을 위한 기본적인 라이브러리 등록 : WebContent > WEB-INF > lib 경로에 등록 - 경로1 → C:\s-f-3.0.2-with-docs\dist ·파일1 → org.springframework.aop-3.0.2.RELEASE.jar ·파일2 → org.springframework.asm-3.0.2.RELEASE.jar ·파일3 → org.springframework.beans-3.0.2.RELEASE.jar ·파일4 → org.springframework.context-3.0.2.RELEASE.jar ·파일5 → org.springframework.core-3.0.2.RELEASE.jar ·파일6 → org.springframework.expression-3.0.2.RELEASE.jar ·파일7 → org.springframework.jdbc-3.0.2.RELEASE.jar ·파일8 → org.springframework.transaction-3.0.2.RELEASE.jar ·파일9 → org.springframework.web.servlet-3.0.2.RELEASE.jar ·파일10 → org.springframework.web-3.0.2.RELEASE.jar - 경로2 → C:\s-f-3.0.2-dependencies\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1 ·파일11 → com.springsource.org.apache.commons.logging-1.1.1.jar - 경로3 → C:\oraclexe\app\oracle\product\11.2.0\server\jdbc\lib (오라클 설치 경로) ·파일12 → ojdbc6.jar - 경로4 → C:\Downloads\13_JSTL\jakarta-taglibs-standard-1.1.2\lib ·파일13 → jstl.jar ·파일14 → standard.jar ○ 물리적 파일 구성 - HelloController.java - Hello.jsp - dispatcher-servlet.xml - web.xml - hello.action ※ 『dispatcher-servlet.xml』 파일을 WebContent > WEB-INF 경로에 생성한다 그리고 이 파일의 기본 설정 내용(템플릿)을 구성하기 위해 스프링 DOC 의 내용을 참고해서 작성할 수 있도록 한다. ·경로 : C:\s-f-3.0.2-with-docs\docs\spring-framework-reference\pdf ·파일 : spring-framework-reference.pdf ·내용(위치) : 문서 구조성 425 페이지 (실제 내용 상 450 페이지) ·해당 위치로 이동하면 XML 파일에 대한 샘플 코드가 있다. 이 내용을 복사하여 dispatcher-servelet.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" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="org.springframework.samples.petclinic.web"/> // ... </beans> ======================================================================================= ○ 사용자 최초 요청 주소 http://localhost:3306/mvc01/hello.action
다이나믹 웹 프로젝트 생성 → 서버 → server.xml → preference import → Spring MVC 환경 설정을 위한 라이브러리 등록 → dispatcher-servlet.xml 생성 → 템플릿 내용 넣기 → 파일 구성
※ mvc01 프로젝트의 실행 및 처리 과정 정리 ① 외부요청 http://localhost:3306/mvc01/hello.action → web.xml 관여 (→ Front Controller 등록 → DispatcherServlet 등록) ② DispatcherServlet 요청 접수 → web.xml → DispatcherServlet 등록 web.xml → URL 패턴 등록 → dispatcher-servlet.xml 관여 (→ 사용자 요청 분석 → 특정 컨트롤러 지정) ③ 해당 컨트롤러의 특정 메소드 호출 (액션 처리, ModelAndView 객체 반환) → 사용자의 요청에 적합한 서비스 액션 처리 → 결과 데이터가 들어있는 모델 객체 준비 → View 정보(JSP 페이지 정보) 반환 (→ 여기서는 객체가 아닌 경로 포함된 View 페이지의 이름) ④ View 페이지에서 최종 웹 페이지를 작성 → JSP 페이지 내에서 EL 이나 JSTL 등의 표기 사용 가능 ⑤ 응답 완료
- 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" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> <context:component-scan base-package="org.springframework.samples.petclinic.web" /> <!-- ※ 사용자 정의 Controller 객체 등록 및 URL 매핑 주소 등록 --> <!-- - 『name=""』 속성에 매핑 주소를 등록한다. --> <!-- 이 과정에서 Front Controller 가 갖고있는 확장자의 형태로 구성한다. --> <!-- - 『class=""』 속성은 Controller 객체의 클래스 경로 및 이름을 등록한다. --> <bean name="/hello.action" class="com.test.mvc.HelloController"></bean> </beans>
- HelloController.java
/*================================= HelloController.java - 사용자 정의 컨트롤러 클래스 ================================= */ package com.test.mvc; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.Controller; // ※ Spring MVC 『Controller』 인터페이스를 구현하는 방법을 통해 // 사용자 정의 컨트롤러 클래스를 구성한다. public class HelloController implements Controller { @Override public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception { // 액션 코드 ModelAndView mav = new ModelAndView(); String message = "Hello, SpringMVC World!"; mav.addObject("message", message); mav.setViewName("/WEB-INF/view/Hello.jsp"); return mav; } }
- Hello.jsp
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% request.setCharacterEncoding("UTF-8"); String cp = request.getContextPath(); %> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Hello.jsp</title> <link rel="stylesheet" type="text/css" href="css/main.css"> </head> <body> <div> <h1>${message }</h1> </div> </body> </html>
- web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <display-name>mvc01</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <!-- ※ Spring MVC Framework 등록 --> <!-- → Front Controller 등록 --> <!-- → DispatcherServlet 등록 --> <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>*.action</url-pattern> </servlet-mapping> </web-app>
- hello.action
- 빈 파일 : 최초 요청 주소
- 요청시에 웹컨테이너를 맞이
→ web.xml 이 .action 이면 DispatcherServlet(객체는 xml 이 아니다!!) 으로 찾아가게 함
(스프링컨테이너가 경로를 따라가서 dispatcherservlet의 인스턴스구문을 생성해서 퍼올려놓는것)
→ dispatcher-servlet (객체를 만나기 위해 이용할 뿐)에 들어가면 hello.action 이면 해당 컨트롤러 찾아가~
→ HelloController 가면 액션 코드 대로 행동해~
(request, response 객체를 받아와서 액션)
(ModelAndView 는 유연한 구성으로, 붙여서 구성할 수도 별개로 구성할 수도 있다.)(ex) 문 손잡이)
→ Hello.jsp 는 HelloController 에서 보내준 메세지를 받아 구성된다.
728x90'SsY > Class' 카테고리의 다른 글
[Spring] 007. Spring MVC 관찰(3) : 직원 관리 프로그램 (0) 2023.07.12 [Spring] 006. Spring MVC 관찰(2) (0) 2023.07.03 [jQuery] 002. jQuery 관찰 실습(2) (0) 2023.06.13 [jQuery] 001. jQuery 의 개요 (0) 2023.06.12 [Servlet] 005. MVC 관련 실습(2) (0) 2023.06.08