View 까지의 흐름
1. 클라이언트로부터의 HTTP 요청을 DispatcherServlet 이 받음
2. DispatcherServlet은 HandlerMapping을 통해 요청 URL을 처리 할 Controller를 검색
3. DispatcherServlet은 요청 URL을 처리할 Controller에게 처리를 요청
3. Controller은 요청을 적절히 처리 한 후 ModelAndView를 DispatcherServlet 전달
4. DispatcherServletdms ViewResolver를 통해 처리 결과를 보여줄 View를 검색
5. DispatcherServlet은 처리 결과를 View를 출력
View
DispatcherServlet은 ViewResolver를 사용하여 결과 출력 View 객체를 구함
해당 View 객체를 통해 출력 내용을 생성
ViewResolver
컨트롤러에 지정한 뷰 이름으로 ViewResolver를 통해 객체를 구함
ViewResolver 구현 클래스
InternalResourceViewResolver
-> 뷰 이름으로 JSP, Tiles 연동을 위한 View 객체 리턴
VelocityViewResolver
-> 뷰 이름으로 Velocity 연동을 위한 View 객체 리턴
BeanNameViewResolver
-> 뷰 이름과 동일한 이름을 가지는 빈 객체를 View 객체로 사용
ResourceBundleViewResolver
-> 뷰 이름과 View 객체 매핑 정보 저장을 위해 파일 사용
XmlViewResolver
-> 뷰 이름과 View 객체 매핑 정보 저장을 위해 XML파일 사용
※
스프링 MVC의 구성요소
구성 요소 | 설명 |
DispatcherServlet |
클라이언트의 요청을 전달받음 |
HandlerMapping | 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할지 결정 |
Controller | 클라이언트의 요청을 처리한 뒤 결과를 DispatcherServlet에게 리턴 |
ModelAndView | 컨트롤러가 처리한 결과 정보 및 View 선택에 필요한 정보를 담음 |
ViewResolver | 컨트롤러의 처리 결과를 생성할 View 결정 |
View | 컨트롤러의 처리 결과 화면을 생성 JSP나 Velocity 템플릿 파일 등을 View로 사용 |
1. 클라이언트의 요청을 받을 DispatcherServlet을 web.xml 파일에 설정
2. 클라이언트 요청을 처리할 Controller 작성
3. ViewResolver 설정 (컨트롤러가 전달한 값을 이용해서 응답 화면을 생성할 View를 결정)
4. JSP나 Velocity 등을 이용하여 View 영역의 코드를 작성
(1) DispatcherServlet
package org.kh.member.controller;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class DispatcherServlet
*/
public class DispatcherServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public DispatcherServlet() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String uri = request.getRequestURI();
System.out.println("요청 uri" + uri);
String path = uri.substring(uri.lastIndexOf("/"));
System.out.println("요청 path : " + path);
HandlerMapping handlerMapping = new HandlerMapping();
Controller ctrl = handlerMapping.getController(path);
String viewName = ctrl.handleRequest(request, response);
System.out.println("viewName : " + viewName);
ViewResolver viewResolver = new ViewResolver();
viewResolver.setPrefix("./");
viewResolver.setSuffix(".jsp");
String view = viewResolver.getView(viewName);
response.sendRedirect(view);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
(2) HandlerMapping
package org.kh.member.controller;
import java.util.HashMap;
import java.util.Map;
public class HandlerMapping {
private Map<String, Controller> mappings;
public HandlerMapping() {
mappings = new HashMap<String, Controller>();
mappings.put("/login.do", new LoginController());
}
public Controller getController(String path) {
System.out.println(path + "--------> 검색");
return mappings.get(path);
}
}
(3) Controller
package org.kh.member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public interface Controller {
public String handleRequest(HttpServletRequest request, HttpServletResponse response);
}
package org.kh.member.controller;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kh.member.model.service.MemberService;
import org.kh.member.model.vo.Member;
public class LoginController implements Controller{
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) {
System.out.println("로그인 처리");
String memberId = request.getParameter("memberId");
String memberPw = request.getParameter("memberPw");
Member m = new Member();
m.setMemberId(memberId);
m.setMemberPw(memberPw);
MemberService service = new MemberService();
Member member = service.selectOneMember(m);
if(member != null) {
return "loginSuccess";
}else {
return "loginFailed";
}
}
}
(4) ViewResolver
package org.kh.member.controller;
public class ViewResolver {
private String prefix;
private String suffix;
public void setPrefix(String prefix) {
this.prefix = prefix;
}
public void setSuffix(String suffix) {
this.suffix = suffix;
}
public String getView(String viewName) {
return prefix+viewName+suffix;
}
}
'이공계전문기술연수 > Spring Framework' 카테고리의 다른 글
<이공계기술전문연수> Spring MVC (수행 흐름) (0) | 2019.11.27 |
---|---|
<이공계기술전문연수> Spring (Mybatis 연동) / 동적쿼리 (0) | 2019.11.27 |
<이공계기술전문연수> Spring과 외부 라이브러리 연결 (0) | 2019.11.26 |
<이공계기술전문연수> Spring MVC 설정 (0) | 2019.11.26 |
<이공계기술전문연수> 1. Framework 특징 (0) | 2019.11.19 |