Spring MVC MVC Controller Handler Mapping 2 url

  • Slides: 35
Download presentation

Spring MVC ㅇ 스프링 MVC 흐름 Controller Handler. Mapping 2. url과 매핑되는 Controller 검색

Spring MVC ㅇ 스프링 MVC 흐름 Controller Handler. Mapping 2. url과 매핑되는 Controller 검색 3. 처리할 Controller 리턴 1. 처리요청(url) 클라이언트 8. 결과 출력 View 4. 처리 요청 5. 처리 결과를 Model. And. View로 리턴 Dispatcher. Servlet 7. 결과를 출력할 View 위치 리턴 6. 결과를 출력할 View 검색 View. Resolver

Spring MVC ㅇ 필요 라이브러리 - spring-web. jar - spring-webmvc. jar

Spring MVC ㅇ 필요 라이브러리 - spring-web. jar - spring-webmvc. jar

Spring MVC web. xml … 생략 … <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org. springframework. web. servlet.

Spring MVC web. xml … 생략 … <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org. springframework. web. servlet. Dispatcher. Servlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*. do</url-pattern> </servlet-mapping> … 생략 …

Spring MVC dispatcher-servlet. xml <? xml version="1. 0" encoding="UTF-8"? > <beans xmlns="http: //www. springframework.

Spring MVC dispatcher-servlet. 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" xmlns: context="http: //www. springframework. org/schema/context" xsi: schema. Location="http: //www. springframework. org/schema/beans/spring-beans. xsd http: //www. springframework. org/schema/context/spring-context. xsd"> <context: component-scan base-package="edu. seowon. mvc"> <context: include-filter type="annotation" expression="org. springframework. stereotype. Controller" /> </context: component-scan> <bean id="view. Resolver" class="org. springframework. web. servlet. view. Internal. Resource. View. Resolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=". jsp" /> </beans>

Spring MVC Test. Controller. java @Controller public class Test. Controller { @Request. Mapping("/first. do")

Spring MVC Test. Controller. java @Controller public class Test. Controller { @Request. Mapping("/first. do") public Model. And. View first() { Model. And. View mav = new Model. And. View(); mav. set. View. Name("first"); mav. add. Object("var", "FIRST"); return mav; } } @Request. Mapping("/second. do") public String second(Model model) { model. add. Attribute("var", "SECOND"); return "second"; }

Spring MVC first. jsp <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <!DOCTYPE html>

Spring MVC first. jsp <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>First</title> </head> <body> First : : ${var} </body> </html>

Spring MVC second. jsp <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <!DOCTYPE html>

Spring MVC second. jsp <%@ page language="java" content. Type="text/html; charset=UTF-8" page. Encoding="UTF-8"%> <!DOCTYPE html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Second</title> </head> <body> Second : : ${var} </body> </html>

Spring MVC Service ㅇ 기존 Model 2 : Controller Model(DAO) DB ㅇ 스프링 :

Spring MVC Service ㅇ 기존 Model 2 : Controller Model(DAO) DB ㅇ 스프링 : Controller Service Model(DAO) DB 비즈니스 로직 처리 / 트랜잭션 단위 / 여러 개의 DAO를 호출 request Client Controller Forward response View (JSP) Service Dao (Model) DB

Spring MVC 연습 web. xml … 생략 … <servlet> </servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org. springframework.

Spring MVC 연습 web. xml … 생략 … <servlet> </servlet> <servlet-name>dispatcher</servlet-name> <servlet-class> org. springframework. web. servlet. Dispatcher. Servlet </servlet-class> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>*. do</url-pattern> </servlet-mapping> … 생략 …

Spring MVC 연습 dispatcher-servlet. xml <? xml version="1. 0" encoding="UTF-8"? > <beans xmlns="http: //www.

Spring MVC 연습 dispatcher-servlet. 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" xmlns: context="http: //www. springframework. org/schema/context" xsi: schema. Location="http: //www. springframework. org/schema/beans/spring-beans. xsd http: //www. springframework. org/schema/context/spring-context. xsd"> <context: component-scan base-package="mvc. spring" /> <bean id="view. Resolver" class="org. springframework. web. servlet. view. Internal. Resource. View. Resolver"> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=". jsp" /> </beans>

Spring MVC 연습 Hello. Controller. java @Controller public class Hello. Controller { @Autowired private

Spring MVC 연습 Hello. Controller. java @Controller public class Hello. Controller { @Autowired private Hello. Service hello. Service; @Request. Mapping("intro/hello") public Model. And. View hello() { Model. And. View mav = new Model. And. View(); String value = null; value = "Hello " + hello. Service. get. Name(); mav. add. Object("value", value); mav. set. View. Name("hello"); } } return mav;

Spring MVC 연습 Hello. Service. java @Service public class Hello. Service { @Autowired private

Spring MVC 연습 Hello. Service. java @Service public class Hello. Service { @Autowired private Hello. Dao hello. Dao; } public String get. Name() { String name = hello. Dao. select. Member(); return name; }

Spring MVC 연습 Hello. Dao. java @Repository public class Hello. Dao { public String

Spring MVC 연습 Hello. Dao. java @Repository public class Hello. Dao { public String select. Member() { return "SPRING"; } }

Spring MVC 한글처리 ㅇ web. xml <filter> <filter-name>encoding. Filter</filter-name> <filter-class> org. springframework. web. filter.

Spring MVC 한글처리 ㅇ web. xml <filter> <filter-name>encoding. Filter</filter-name> <filter-class> org. springframework. web. filter. Character. Encoding. Filter </filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encoding. Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

컨트롤러 메소드 파라미터 @Request. Mapping 속성 요청조건 지원 버전 value URL 패턴 3. 0

컨트롤러 메소드 파라미터 @Request. Mapping 속성 요청조건 지원 버전 value URL 패턴 3. 0 이상 method HTTP 요청 메소드 3. 0 이상 params 파라미터 3. 0 이상 headers HTTP 헤더 3. 0 이상 consumes Content-Type 헤더 3. 1 이상 produces Accept 헤더 3. 1 이상

컨트롤러 메소드 파라미터 @Request. Mapping ㅇ value @Request. Mapping(“/hello”) @Request. Mapping({“/hello”, “/hello/”, “hello. *”})

컨트롤러 메소드 파라미터 @Request. Mapping ㅇ value @Request. Mapping(“/hello”) @Request. Mapping({“/hello”, “/hello/”, “hello. *”}) @Request. Mapping(“main*”) @Request. Mapping(“/admin/*/user”) @Request. Mapping(“/admin/**/user”) ㅇ method @Request. Mapping(value=“/hello. do”, method=Request. Method. GET) @Request. Mapping(value=“/hello. do”, method=Request. Method. POST) ㅇ params @Request. Mapping(value=“/hello. do”, params=“type”) params=“type=admin”) params=“/user/edit”) params=“!type”) ㅇ headers @Request. Mapping(value=“/hello. do”, headers=“Content-Type=text/*”)

컨트롤러 메소드 파라미터 @Request. Mapping ㅇ consumes @Request. Mapping(consumes=“application/json”) @Request. Mapping(consumes={“application/json”, “multipart/form-data”}) ※ @Request.

컨트롤러 메소드 파라미터 @Request. Mapping ㅇ consumes @Request. Mapping(consumes=“application/json”) @Request. Mapping(consumes={“application/json”, “multipart/form-data”}) ※ @Request. Mapping(headers=“Content-Type=application/json”) ㅇ produces @Request. Mapping(produces=“text/html”) @Request. Mapping(produces={“text/html”, “application/json”}) ※ @Request. Mapping(headers=“Accept=application/json”)

컨트롤러 메소드 파라미터 @Request. Param ㅇ 요청주소 http: //localhost/list. do? current. Page=1&search. Text=abcd @Controller

컨트롤러 메소드 파라미터 @Request. Param ㅇ 요청주소 http: //localhost/list. do? current. Page=1&search. Text=abcd @Controller public class List. Controller { @Request. Mapping(“list. do”) public Model. And. View list(@Request. Param(“current. Page”) int current. Page, @Request. Param(“search. Text”) String search. Text) {. . . } } @Request. Param을 지정하는 경우 반드시 요청 주소에 해당 파라미터가 존재해야 됨 필수 파라미터로 쓰지 않으려면 requeired를 false로 변경 null을 지정 못하는 타입은 default. Value로 사용 ex) @Request. Param(value=“search. Text”, required=false) String search. Text @Request. Param(value=“current. Page”, default. Value=“ 1”) int current. Page

컨트롤러 메소드 파라미터 @Cookie. Value @Request. Mapping(“/cookie/view. do”) public String view(@Cookie. Value(“auth”) String auth.

컨트롤러 메소드 파라미터 @Cookie. Value @Request. Mapping(“/cookie/view. do”) public String view(@Cookie. Value(“auth”) String auth. Value) {. . . } 해당 쿠키가 존재하지 않으면 500 에러 발생 쿠키가 필수가 아닌 경우 required 속성을 false로 지정 default. Value를 사용하여 기본값 지정 가능

컨트롤러 메소드 파라미터 @Request. Header @Request. Mapping(“/header/check. do”) public String check(@Request. Header(“Accept-Language”) String language.

컨트롤러 메소드 파라미터 @Request. Header @Request. Mapping(“/header/check. do”) public String check(@Request. Header(“Accept-Language”) String language. Header) {. . . } 해당 헤더가 존재하지 않으면 500 에러 발생 쿠키가 필수가 아닌 경우 required 속성을 false로 지정 default. Value를 사용하여 기본값 지정 가능

컨트롤러 메소드 파라미터 ㅇ 서블릿 API 직접 사용 - javax. servlet. http. Http. Servlet.

컨트롤러 메소드 파라미터 ㅇ 서블릿 API 직접 사용 - javax. servlet. http. Http. Servlet. Request / javax. servlet. Servlet. Request - javax. servlet. http. Http. Servlet. Response / javax. servlet. Servlet. Response - javax. servlet. http. Http. Session @Request. Mapping(“/anything. do”) public Model. And. View anything(Http. Servlet. Request request, Http. Servlet. Response response, Http. Session session) {. . . }

뷰 이름 명시적 지정 ㅇ Model. And. View @Request. Mapping(“/main. do”) public Model. And.

뷰 이름 명시적 지정 ㅇ Model. And. View @Request. Mapping(“/main. do”) public Model. And. View main() { Model. And. View mav = new Model. And. View(); mav. set. View. Name(“main”); return mav; } ㅇ String @Request. Mapping(“/main. do”) public String main() { return “admin/main”; }

뷰 이름 자동 지정 ㅇ Request. To. View. Name. Translator 를 이용하여 URL로부터 뷰

뷰 이름 자동 지정 ㅇ Request. To. View. Name. Translator 를 이용하여 URL로부터 뷰 이름 결정 - 리턴 타입이 Model 또는 Map 인 경우 - 리턴 타입이 void 이면서 Servlet. Response 또는 Http. Servlet. Response 타입의 파라미터가 없는 경우 @Request. Mapping(“/search/list. do”) public Map<String, Object> search. List() { Map<String, Object> map = new Hash. Map<String, Object>(); return map; } /search/list. do search/list

리다이렉트 뷰 ㅇ redirect: /bbs/list : 현재 서블릿 컨텍스트에 대한 상대적인 경로 ㅇ redirect:

리다이렉트 뷰 ㅇ redirect: /bbs/list : 현재 서블릿 컨텍스트에 대한 상대적인 경로 ㅇ redirect: http: //localhost/bbs/list : 절대 경로 사용 예) Model. And. View mav = new Model. And. View(); mav. set. View. Name(“redirect: /list. do”); return mav;

뷰로 전달되는 모델 데이터 ㅇ @Request. Mapping이 적용된 메소드가 Model. And. View / Model

뷰로 전달되는 모델 데이터 ㅇ @Request. Mapping이 적용된 메소드가 Model. And. View / Model / Map을 리턴하는 경우 해당 객체에 담긴 모델 데이터가 뷰로 전달 ㅇ @Request. Mapping이 적용된 메소드가 가지는 파라미터(클래스) ㅇ @Model. Attribute가 적용된 메소드가 리턴한 객체 @Request. Mapping(“/search/game. do”) @Model. Attribute(“search. Type. List”) public Model. And. View search( public List<Search. Type> search. Type. List() { List<Search. Type> options @Model. Attribute(“command”) SC sc, = new Array. List<Search. Type>(); Model. Map model) { option. add(new Search. Type(1, “전체”)); . . . option. add(new Search. Type(2, “아이템”)); } option. add(new Search. Type(3, “캐릭터”)); return options; }

Model. And. View 모델 설정 ㅇ set. View. Name(String view. Name) 뷰 이름 지정

Model. And. View 모델 설정 ㅇ set. View. Name(String view. Name) 뷰 이름 지정 ㅇ add. Object(String key, Object value) 해당 key로 value 지정 ㅇ add. All. Objects(Map<String, ? > map) Map 타입 객체 지정

@Path. Variable – URI 템플릿 ㅇ @Request. Mapping 값으로 {템플릿 변수} 사용 ㅇ @Path.

@Path. Variable – URI 템플릿 ㅇ @Request. Mapping 값으로 {템플릿 변수} 사용 ㅇ @Path. Variable를 이용해서 {템플릿 변수}와 동일한 이름을 갖는 파라미터 추가 @Request. Mapping(“/game/users/{user. Id}/characters/{character. Id}”) public String character. Info(@Path. Variable String user. Id, @Path. Variable String character. Id, Model. Map model) { model. add. Attribute(“user. Id”, user. Id); model. add. Attribute(“character. Id”, character. Id); return “game/chracter/{character. Id}”; }

@Response. Body ㅇ return String @Request. Mapping(value=“/ajax/hello. do") @Response. Body public String ajax. Hello

@Response. Body ㅇ return String @Request. Mapping(value=“/ajax/hello. do") @Response. Body public String ajax. Hello () { return “<html><body>Hello</body></html>”; } ㅇ Message. Converter <bean class="org. springframework. web. servlet. mvc. annotation. Annotation. Method. Handler. Adapter"> <property name="message. Converters"> <list> <bean class="org. springframework. http. converter. String. Http. Message. Converter" /> </list> </property> </bean>

@Response. Body ㅇ return Map @Request. Mapping("/ajax/get. Data. do") @Response. Body public Map<String, Object>

@Response. Body ㅇ return Map @Request. Mapping("/ajax/get. Data. do") @Response. Body public Map<String, Object> ajax. Get. Data() { Map<String, Object> map = new Hash. Map<String, Object>(); map. put("a", 1); map. put(“b", "abcd"); List<String> list = new Array. List<String>(); list. add("HI"); list. add("HELLO"); map. put("list", list); return map; } ㅇ Message. Converter <bean class="org. springframework. web. servlet. mvc. annotation. Annotation. Method. Handler. Adapter"> <property name="message. Converters"> <list> <bean class="org. springframework. http. converter. json. Mapping. Jackson. Http. Message. Converter" /> </list> </property> </bean>

Message. Converter ㅇ Byte. Array. Http. Message. Converter - Request : HTTP 본문을 byte

Message. Converter ㅇ Byte. Array. Http. Message. Converter - Request : HTTP 본문을 byte 배열로 변경 - Response : Content-Type 을 octet-stream 으로 변경 ㅇ String. Http. Message. Converter - Request : HTTP 본문을 String 으로 변경 - Response : Content-Type 을 text/plain으로 변경 ㅇ Form. Http. Message. Converter - application/x-www-form-urlencoded로 정의된 폼 데이터를 주고 받을때 사용 ㅇ Source. Http. Message. Converter - application/xml, application*+xml, text/xml 지원 - XML 문서를 Dom. Source, SAXSource, Stream. Source 전환시 사용 위 4가지 Message. Converter 기본 등록

Message. Converter ㅇ Jaxb 2 Root. Element. Http. Message. Converter - JAXB 2의 @Xml.

Message. Converter ㅇ Jaxb 2 Root. Element. Http. Message. Converter - JAXB 2의 @Xml. Root. Element와 @Xml. Type 이 붙은 클래스를 이용해서 XML과 오브젝트 사이의 메시지 변환 지원 - JAXB 2의 스키마 컴파일러를 통해 생성된 바인딩용 클래스를 이용하여 XML과 오브젝트 변환 ㅇ Marsharlling. Http. Message. Converter - Marshaller와 Unmarsharller를 이용해서 XML 문서와 자바 오브젝트 변환 ㅇ Mapping. Jackson. Http. Message. Converter - 자바 오브젝트와 JSON 자동 변환 위 3가지 Message. Converter 등록 시 기본 컨버터 자동 등록되지 않음