AbstractController을 이용한 스프링 컨트롤러 작성
web.xml
spring3 index.html index.htm index.jsp default.html default.htm default.jsp org.springframework.web.context.ContextLoaderListener dispatcher org.springframework.web.servlet.DispatcherServlet 1 dispatcher *.action encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /*
com.hello.HelloService
package com.hello; public class HelloService { public String getMessage() { String msg = null; int h = Calendar.getInstance().get(Calendar.HOUR_OF_DAY); if(h>=6 && h<9) msg = "좋은 아침"; else if(h>=9 && h<13) msg = "오전 수업 시간"; else if(h>=13 && h<14) msg = "점심"; else if(h>=14 && h<18) msg = "오후수업시간"; else msg = "자유시간"; return msg; } }
dispatcher-servlet.xml
com.hello.HelloController
package com.hello; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class HelloController extends AbstractController { private HelloService helloService; public void setHelloService(HelloService helloService) { this.helloService = helloService; } @Override protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { ModelAndView mav = new ModelAndView(); mav.setViewName("hello/result"); mav.addObject("msg", helloService.getMessage()); return mav; //혹은 req.setAttribute("msg", helloService); return new ModelAndView("hello/result"); } }
WEB-INF/hello/result.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ page trimDirectiveWhitespaces="true" %> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% String cp = request.getContextPath(); request.setCharacterEncoding("utf-8"); %>Insert title here 스프링을 이용한 첫번째 MVC2 패턴 프로그래밍
${msg}
설명
1. 클라이언트가 hello.action 요청
2. xml → dispatcher 호출
dispatcher org.springframework.web.servlet.DispatcherServlet dispatcher *.action
3. dispatcher → beanNameUrlHandlerMapping
//order : 실행되는 매핑의 순서를 결정
beanNameUrlHandlerMapping은 클라이언트가 요청한 uri를 전달받는다.
전달받은 uri로 해당작업을 수행할 컨트롤러를 검색
* 매핑은 생성된 컨트롤러의 이름을 검색함.
....
4. 매핑은 컨트롤러 객체를 리턴하고 dispatcher는 다시 해당 컨트롤러의 handleRequestInternal 메서드 호출
5. 호출된 컨트롤러는 프로그램된 구문을 실행하고 ModelAndView객체를 리턴한다.
public class HelloController extends AbstractController { private HelloService helloService; public void setHelloService(HelloService helloService) { this.helloService = helloService; } @Override protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception { /*ModelAndView mav = new ModelAndView(); mav.setViewName("hello/result"); mav.addObject("msg", helloService.getMessage()); return mav;*/ req.setAttribute("msg", helloService.getMessage()); return new ModelAndView("hello/result"); } }
AbstractController ac = new HelloController(); ac.handleRequestInternal() //User user = new UserImpl() //user.result();
6. ModelAndView를 리턴받은 dispatcher는 resolver를 호출한다. (인자값으로 컨트롤러의 리턴값)
7. resolver는 prefix + "viewName" + suffix를 리턴
8. 최종적으로 dispatcher가 해당 view로 포워딩
MultiActionController을 이용한 스프링 컨트롤러 작성
예제
web.xml
spring3 index.html index.htm index.jsp default.html default.htm default.jsp org.springframework.web.context.ContextLoaderListener dispatcher org.springframework.web.servlet.DispatcherServlet 1 dispatcher *.action encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /*
com.bbs.Board
package com.bbs; public class Board { private int num; private String name, subject, content, created; public int getNum() { return num; } public void setNum(int num) { this.num = num; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public String getCreated() { return created; } public void setCreated(String created) { this.created = created; } }
dispatcher-servlet.xml
//property : private String name, 즉 인스턴스변수 //props : properties bbs.boardController //여기서 bbs.boardController는 value //아래에 bean으로 생성할 객체 bbs.boardController를 찾아간다.//props : properties //propsResolver의 인스턴스변수 mappings에 각 key에 해당된 value 할당list createdForm createdSubmit
com.bbs.BoardController
package com.bbs; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; public class BoardController extends MultiActionController { public ModelAndView list(HttpServletRequest req, HttpServletResponse resp) throws Exception { return new ModelAndView("bbs/list"); } public ModelAndView createdForm(HttpServletRequest req, HttpServletResponse resp) throws Exception { return new ModelAndView("bbs/write"); } public ModelAndView createdSubmit(HttpServletRequest req, HttpServletResponse resp) throws Exception { return new ModelAndView("bbs/write_ok"); } }
view
list.jsp 게시판 리스트
글쓰기
write.jsp
write_ok.jsp 입력한 내용
이름 : ${dto.name}
제목 : ${dto.subject}
내용 : ${dto.content}
뒤로가기
설명
1. WEB-INF/web.xml
dispatcher org.springframework.web.servlet.DispatcherServlet dispatcher *.action
1) 기본적으로 스프링환경설정파일은 서블릿이름-servlet.xml 이다.
→ dispatcher-servlet.xml
2) 클라이언트가 *.action 으로 요청하면 DispatcherServlet이 처리를 담당한다.
2. MultiActionController을 이용한 스프링 컨트롤러 작성
- MultiActionController는 하나의 컨트롤러를 이용하여 여러 요청을 처리할수 있다. 예를 들어 게시판에서 글리스트, 글쓰기폼, 글저장, 글보기, 글수정폼, 글수정완료, 글삭제등의 여러 요청을 하나의 컨트롤러로 처리할수 있다.
- 클라이언트가 *.action 으로 요청할 경우 흐름
1) DispatcherServlet이 클라이언트의 요청을 받는다.
2) HandlerMapping이 클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다.
3) 결정된 컨트롤러는 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에 알려준다.
4) ViewResolver는 처리 결과를 보여줄 View를 결정한다.
5) View는 처리 결과를 보여줄 응답을 생성한다.
- 프로그램 작성
1) service 클래스를 작성한다.(비지니즈 로직을 처리)
2) MultiActionController를 상속받은 controller를 작성 한다.
요청을 받아 처리할 메소드명은 프로그래머가 임의로 지정하며 다음의 형식을 따른다.
public [ModelAndView|Map|void] 메서드이름 (HttpServletRequest req, HttpServletResponse resp, [HttpSession|Command]) [throws Exception] { ... ... } (1) return type : ModelAndView, Map, void 중 하나 (2) argument : 1- HttpServletRequest 2- HttpServletResponse 3- 선택적이며 HttpSession 또는 Command 4- Command (3) ModelAndView는 컨트롤러의 처리 결과를 보여줄 뷰와 뷰에 전달할 값을 저장할 용도로 사용된다.
- dispatcher-servlet.xml 에서 환경 설정
1) HandlerMapping 설정
bbs.boardController
클라이언트가 /bbs/*.action 형식으로 요청하면 bbs.boardController 라는 id를 가진 컨트롤러가 요청을 처리한다.
2) ViewResolver 설정
3) MethodNameResolver 등록
어떤 메소드가 클라이언트의 요청을 처리할 것인지 결정한다.
MultiActionController에서는 반드시 필요 하다.
list createdForm createdSubmit
4) 컨트롤러 및 서비스 객체 생성
'JSP > JspServlet' 카테고리의 다른 글
tag : core (0) | 2013.08.16 |
---|---|
서버 도메인 확인 (0) | 2013.08.16 |
MVC 관련 핸들러 매핑 및 컨트롤러 (0) | 2013.07.29 |
액션 태그와 커스텀 태그 (0) | 2013.07.29 |
파입업로드/다운로드 (0) | 2013.07.29 |