SPRING WEB MVC FRAMEWORK MVC JSP JS http
SPRING WEB MVC FRAMEWORK 장안대학교 인터 넷정보통신과
MVC 모 델 JSP간 복잡한 이동 JS http 요청 JS JSP PP JSP http 응답 db JSP서 DB 직접 접 근 HTML+Java http 요청 JS JS PPJS P http 응답 JS Jav JS PPa Bea n db MVC 모델 1 일관된 응답요청관리 http 요청 http 응답 Servlet JS ) (Controll P er MVC 모델 2 JS JSJS PP(View P ) JSJS Bean PP (Mode ) db l 67
Spring Web MVC (2) � � � Web. Application. Context 인터페이스는 Application. Context 인터페이스를 웹 환경 에 서 Io. C 컨테이너를 사용할 수 있도록 기능을 확장한 인터페이스이다. 스프링 MVC 서블릿 컨테이너에는 Web. Application. Context 인터페이스를 구현 하 여 2 종류의 웹 Io. C 컨테이너(Web. Application. Context )를 생성한다 Context. Loader. Listener에 의해서 Root Web. Application. Context가 만들어지 고 Dispatcher. Servlet이 생성될 때 Dispatcher. Servlet이 직접 관리하는 Web. Application. Context이 생성되어 Root Web. Application. Context을 상속한 다. 70
Web. Application. Conte 인터페이스를 웹 환경에서 사용할 수 있도록 필요한 기능을 확장 xt. Application. Context 한 인터페이스 � � Web. Application. Context 인터페이스를 구현하여 2 종류의 웹 환경 스프링 Io. C 컨테이 너 (Webapplication. Context)를 생성한다. � Context. Loader. Listener는 Root Webapplication. Context를 생성하고 Dispatcher. Servlet은 전용 Webapplication. Context을 생성한다. � Dispatcher. Servlet Webapplication. Context는 먼저 생성된 Root Webapplication. Context의 빈을 상속받아 사용할 수 있다. � Dispatcher. Servlet Webapplication. Context는 여러 개 생성될 수 있으며 빈은 상호간 공유할 수 없다. 그러나 Root Webapplication. Context의 빈은 상속하여 모두 사용할 수 있다. Dispatcher. Serv let Context. Loader. Listener Dispatcher. Servlet Context Application. Conte xt 요 청 Web. Application. Conte xt Context 71
Spring 웹 프로젝트 환경 구성 � JRE 설치 � JDK(Java Development Kit) 설치 � PATH 설정 : C: Program FilesJavajdk 1. 8. 0bin � CLASSPATH 설정 : C: Program FilesJavajre 8lib � Jre는 바이트코드(xxx. class)를 찾아 실행한다. 바이트코드를 찾을 위치나 파일을 모두 등록한다. JAVA_HOME 설정 : C: Program FilesJavajdk 1. 8. 0 � Tomcat JSP 컨테이너 설치 � Apache 웹 서버 설치 및 Tomcat 연동 (개발 환경에서는 불필요) � Eclipse 설치 � Eclipse에 tomcat 서버 연동 � STS(Spring Tool Suite) 설치 72
Spring 설치 (STS: Spring Tool Suite) 설 STS(Spring 치 Tool Suite) 설치 STS는 이클립스에서 스프링을 개발을 편리하 게 하는 개발도구이다. 스프링에서는 STS를 다 음과 같이 정의한다. (http: //spring. io/tools) 이클립스에서 STS설치. 1. 상단의 Help > Eclipse Marketplace를 선택한 다. 2. Marketplace에서 STS를 검색한다. STS(Spring Tool Suite) 설치확인 1) File > New > Others>Spring 확인 73
Maven project 구성 1. File > new> other > Spring Legacy project > (1) next > 3. 입력 2. 선택 75
76 Maven project 구성 (1) 1. 입력 com. jang. doc 76
Web Io. C 컨테이너 구성방 법 web. xml Context. Loader. Listener와 Dispatcher. Servlet는 각각 별도의 Web. Applicaton. Context를 생성 이 Context. Loader. Listener 가 되고 Dispatcher. Servlet Web. Applicaton. Context 빈을 상 Web. Applicaton. Context은 속 Dispatcher. Servlet은 bean을 생성하고 Client 요청을 bean에 연결하며 처리 결과 를 view에 할당한다. [servlet-name]servlet. xml servlet-context. xml application. Context*. xml root-context. xml 78
Dispatcher. Servlet 등록 (Web. xml ) Context. Loader. Listener 등 ------------------------------------------------록 <listener> <listener-class>org. springframework. web. context. Context. Loader. Listener</listener-class> </listener> <context-param> <param-name>context. Config. Location</param-name> <param-value>/WEB-INF/application. Context*. xml</paramvalue> </context- -------------------------------------------------param> ∎ listener 스프링 Web. Application 시작과 종료시에 발생하는 이벤트를 처리하는 클래스 Context. Loader. Listener 는 root Application. Context 생성 및 초기화 ∎ 자동설정 Application. Contex 클래스 - Xml. Web. Application. Context XML 설정화일 위치 - /WEB-INF/application. Context. xml ∎ context. Config. Location 하나 이상의 설정 화일을 사용할 경우 <context-param> 태그 안에 여러 줄에 입력하거나 공백으로 분리 <param-value> /WEB-INF/root-context. xml /WEB-INF/application. Context. xml </param-value> 81
Dispatcher. Servlet 등록 ) -s(Web. xml --e-r-v-l-e--t-등---록-----------------------------------------<servlet> <servlet-name>Spring. Hello</servlet-name> <servlet-class>org. springframework. web. servlet. Dispatcher. Servlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>context. Config. Location</param-name> <param-value>/WEB-INF/Spring. Hello-servlet. xml </param-value> </init-param> </servlet> ------------------------------------------------- • 서블릿 이름을 다르게하면 하나의 웹 어플리케이션에 여러 개의 Dispatcher. Servlet을 등록 할 수 있다. • 자동 설정: XML 설정화일 위치 - /WEB-INF/ [servlet-name]-servlet. xml • <load-on-startup> - 서블릿 컨테이너가 등록된 서블릿을 생성하고 초기화하는 순서 • 하나 이상의 설정 화일을 사용할 경우 <init-param> 태그 안에 여러 줄에 입력하거나 공백으로 분리 82
Io. C 컨테이너 생성 - web. xml 기본 Root Web. Applicaton. Context 구 성 Dispatcher. Servlet 과 Servlet Web. Applicaton. Context 구 성 Dispatcher. Servlet이 여러 개 일때 로 숫자 가 작은 것부터 먼저 로딩 Dispatcher. Servlet이 요청 받을 URL 패턴지 정 예: *. do 83
Web. xml 추가 -한글처 3. 실행 결과 확인 리 <!-- utf-8 filter --> <filter-name>encoding. Filter</filter-name> <filterclass>org. springframework. web. filter. Charact er. Encoding. Filter</filter-class> <init-param> 1. <context-param> 위에 추가 <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <!-- force. Encoding true 값을 주지 않을 경우 강 제 인코딩 하지 않는다 --> <init-param> <param-name>force. Encoding</param-name> 2. url 멀티미디어 파일 패턴 매칭 마지막 </web-app> 위에 추가 <param-value>true</param-value> </init-param> <servlet-mapping> </filter> <servlet-name>default</servlet<filter-mapping> name> <filter-name>encoding. Filter</filter-name> <url-pattern>*. css</url-pattern> <url-pattern>/*</url-pattern> </filter-mapping> <url-pattern>*. js</url-pattern> </servlet-mapping> <url-pattern>*. gif</url-pattern> servlet-context. xml 파일에 다음 등 록 <mvc: default-servlet-handler /> 84
root-context. xml 작 성 <? xml version="1. 0" encoding="UTF-8"? > <beans xmlns="http: //www. springframework. org/schema/beans" xmlns: xsi="http: //www. w 3. org/2001/XMLSchema-instance" xsi: schema. Location="http: //www. springframework. org/schema/bea ns http: //www. springframework. org/schema/beans/springbeans. xsd"> <!-- Root Context: defines shared resources visible to all other web components --> </beans> 여러 Dispatcher. Servlet Web. Applicaton. Context 에서 공유할 빈 생 성 예: Datasource등 DB 관련빈 , 서비스 계층 등 저장소에 관련 된빈 85
servlet-context. xml 작 성 여러 Dispatcher. Servlet Web. Applicaton. Context 에서 공유할 생 성 예: Datasource등 DB 관련빈 , 서비스 계층 등 저장소 관련 된 빈 86
Repository (저장 소) 메이븐에서는 디폴트로 http: //repo 1. maven. org/maven 2/ 에 있는 � repository 를 참고 � <dependency>에 따라서 추가할 원격 Repository 위치를 검색하여 지정 � Oracle ojdbc 6는 위의 위치에 없으므로 다음의 별도 지정 장소 지정 <repositories> <repository> <id>codelds</id> <url>https: //code. lds. org/nexus/content/groups/main-repo</url> </repository> </repositories> Ojdbc 6 넣을때 꼭 입력 93
M 2 Eclipse 프로젝트 Layout 변 경POM 변경 내용 적용 � Project 우 클릭 > Maven > Update Maven Project > OK � � 실행 � 프로젝트명>우클릭>Run As>Run on Server 98
Controller 와 View 99
Controller 와 View 100
Controller 생 성 102
Controller 주요 구성 요 소 1. @Controller 와 @Request. Mappi ng 애노테이션 2. 파라미터 와 Mode l 3. 반환값 103
View (hello. jsp) 생 성 1. 입 력 1. jsp 오른쪽 클릭>new >jsp 104
View 작성 (hello. jsp) EL(Expression Language) jsp 표현식: message라는 이름의 객체를 출 력 <%= message %> ${ } 실행 및 결과 확인 105
Controller : @Request. Mapping 방 법 @Controller public class Hello. Controller { @Request. Mapping("/hello") public String hello. World(Model model) { model. add. Attribute("message", "안녕하세요. . . Spring 시작합 니다!"); return "hello"; } 생략하면 get 방식 @Request. Mapping(value="/hello", method = Request. Method. GET ) public String hello. World(Model model) { … } @Request. Mapping(value=“/hello/{owner. Id}", method = Request. Method. GET ) public String helloland(@Path. Variable String owner. Id, Model model) { … } URI 템플릿 변수 owner. Id 지정 } URI 템플릿 변수의 값 사용 @Path. Variable 어노테이션 사 용/owners/fred 요청 변수 owner. Id의 값은 fred 예: 107
Controller : View 데이터 전달 � � @Request. Mapping 메서드가 Model. And. View 리턴하는 경우 이들에 담긴 모델 데이터가 뷰에 전 달 된다. @Request. Mapping 메서드에서 Model, Model. Map, Map이 파라메터로 전달되거나 생성하며 return 값에 지정하지않더라도 암시적으로 뷰에 전달 된다. Model View dispatche rservlet Controller Model 커맨드(Command) 객체 or DTO(Vo) 객체 Hellworld( @Model. Attribute("form. Data") User user ) @Model. Attribute 생략 가능 <form: form model. Attribute="form. Data" method="post" action="login. do"> 112
� View: JSTL(Java. Server Pages Standard Tag Library) 독립적인 개발자들은 많은 사용자 정의 JSP 태그 라이브러리 <%@ taglib= %>를 만들었 음 � � HTML 태그에서는 일반 언어의 반복, 조건 등의 제어가 어렵다. � JSP 에서 <% 자바 소스 %>와 같은 스크립팅을 이용해야 한다. � HTML 코드와 섞여 혼란스럽다. jsp 2. 0 에서 el 과 JSTL 도입 � EL(Expression Language) : <%= abc %>를 ${abc} 로 간단하게 사용 � 표준태그 라이브러리 JSTL(Java. Server Pages Standard Tag Library): HTML 태그에서도 일반 언어의 반복, 조건 등의 제어를 가능 하도록 사용자 정의 JSP 태그 라이브러리(JSR 52)개발 예: Core에서 c를 이용해 <%= if%>문을 <c: if>, <%=for%>문을 <c: for. Each>로 대체하여 사용 � � Spring JSTL 태그 라이브러리 제공 � <%@ taglib prefix="spring" uri="http: //www. springframework. org/tags"%> � <%@ taglib prefix="form" uri="http: //www. springframework. org/tags/form"%> jstl<%@ 라이브러리는 maven pom 기본 설정에 포함됨 taglib prefix="c" uri="http: //java. sun. com/jsp/jstl/core"%> <%@ taglib prefix="f" uri="http: //java. sun. com/jsp/jstl/fmt" %> <%@ taglib prefix="spring" uri="http: //www. springframework. org/tags"%> <%@ taglib prefix="form" uri="http: //www. springframework. org/tags/form"%> 113
xml 설정을 이용한 빈 등록(과거로의 회귀) � servlet-context. xml의 주요 기능 � Io. C 컨테이너(Servlet Web. Applicaton. Context)에 생성되어야 하는 객체(beans)를 선언 � 객체 등록을 컴포넌트 자동 스캔을 사용하지 않고 XML로 직접 생성 <!-- Controller --> <beans: bean id="hello. Controller" class="com. jang. doc. controller. Hello. Controller"></beans: bean> 115
Spring MVC 처리의 흐 름 웹브라우져 Handler. Mapping 컨트롤러 선택 요청 2 3 1 처리위임 Model. And. View URL 처리요 청 /hello. do 5 messag e: r r r 4 뷰 선택요청 Model. And. View messag 6 e: 결과물 출력 r r 117
Io. C 컨테이너 초기화 과정: Window > Show View>console parent: Root Web. Application. Context 118
Error message import org. springframework. web. servlet. Model. And. View 사용 다른 컴퓨터에서 작성했던 Project를 Import 하면 다른 컴퓨터에서 사용하던 Jre, Tomcat 환경이 변경되었으므로 에러가 발생함 프로젝트명 오른쪽 클릭 > Build. Path > Config Build. Path >Library 탭 > Add liblary > Server Runtime >tomcat 9 이미 한번 실행한 후 폴더 이름을 Rename 한 경우 Server에서 생성된 해 당 프로젝트 인스턴스를 지우고 다시 실행 IOException parsing XML document from Servlet. Context resource [/WEB-INF/Web. Helloservlet. xml]; nested exception is java. io. File. Not. Found. Exception: Could not open Servlet. Context resource [/WEB-INF/Web. Hello-servlet. xml] Error creating bean with name 'handler. Mapping' defined in Servlet. Context resource [/WEB-INF/Web. Hello-servlet. xml]: No bean named 'hello. Controllerr' is defined 경고: No mapping found for HTTP request with URI [/Web. Hello/hell 2. do] in Dispatcher. Servlet with name 'Web. Hello' 119
Dispatcher. Servle t /hello Handler. Mapping Handler. Adapter /hello Controlle r Service Repositor y View. Resolver hello. jsp hello. World( ) ”hello“: Model ”hello“ ”/WEB-INF/views/hello. jsp" Model 화 면 121
- Slides: 57