본문 바로가기

BackEnd/JSP

[JSP 웹 프로그래밍] 웹 MVC

728x90
반응형

1. MVC
   ▷ Model, View, Controller의 약자로, 웹 애플리케이션을 비즈니스 로직, 프레젠테이션로직, 데이터로 분리하는 디자인 패턴
   ▷ 웹 애플리케이션에서는 일반적으로 애플리케이션을 비즈니스 로직, 프레젠테이션, 요청 처리 데이터로 분류
      ▶ 비즈니스 로직은 애플리케이 션의 데이터, 즉 고객, 제품, 주문 정보의 조작에 사용
      ▶ 프레젠테이션은 애플리케이션이 사용자에게 어떻게 표시되는지, 즉 위치, 폰트, 크기
      ▶ 요청 처리 데이터는 비즈니스 로직과 프레젠테이션 파트를 함께 묶는 것

 

◎ MVC 패턴의 구성 요소
   ▷ 모델(model): 애플리케이션의 데이터와 비즈니스 로직을 담는 객체
   ▷ 뷰(view): 사용자에게 모델의 정보(데이터)를 보여주는 역할. 비즈니스 로직을 포함하지 않으며,

        하나의 모델을 다양한 뷰에서 사용
   ▷ 컨트롤러(controller): 모델과 뷰 사이에 어떤 동작이 있을 때 조정하는 역할
      ▶ 웹으로부터 받은 요청에 가장 적합한 모델을 생성하는 것을 처리하는 역할과 사용자에게 응답하는 

          적절한 뷰를 선택하여 해당 모델을 전달하는 역할

 

 

2.1 모델 1
   ▷ 모델 1은 기존의 JSP로만 구현한 웹 애플리케이션으로, 웹 브라우저의 요청을 JSP 페이지가 받아서 처리하는 구조
   ▷ JSP 페이지에 비즈니스 로직을 처리하는 코드와 웹 브라우저에 결과를 출력하는 코드가 섞이는 것
   ▷ 모델 1에서는 JSP가 핵심 역할을 수행

 

 

2.2 모델 2

① 웹 브라우저가 웹 서버에 웹 애플리케이션 실행을 요청하면 웹 서버는 요청을 처리할 수 있는 컨트롤러(서블릿)를 찾아서 요청을 전달
② 컨트롤러(서블릿)는 모델 자바 객체의 메소드를 호출
③ 데이터를 가공하여 값 객체를 생성하거나 JDBC를 사용하여 데이터베이스와의 인터렉션을 통해 값 객체 생성
④ 업무 수행을 마친 결과 값을 컨트롤러에 반환
⑤ 컨트롤러는 모델로부터 받은 결과 값을 뷰에 전달
⑥ JSP는 전달받은 값을 참조해서 출력할 결과를 만들어 웹 서버에 전달하고, 웹 브라우저는 웹서버로 부터 결과 값을 받아 화면에 출력

 

3. web.xml 파일에 서블릿 구성하기
   ▷ <servlet> 요소로 서블릿 클래스 등록하기
      ▶ <servlet>은 웹 애플리케이션에서 사용될 기본 서블릿 객체와 매개변수를 설정하는 요소

 

   ▷ <servlet-mapping> 요소로 요청 URL 패턴 설정하기
      ▶ <servlet-mapping>은 웹 브라우저에서 요청되는 URL과 서블릿 클래스를 매핑하기 위해 URL 패턴을 설정하는 요소

 

◎ 컨트롤러 생성하기
   ▷ 서블릿 클래스 생성하기
      ▶ 서블릿 클래스는 HttpServlet 클래스를 확장하여 생성
      ▶ 생성된 서블릿 클래스는 웹 브라우저에서 전송되는 GET 방식과 POST 방식에 따라 각각 

           doGet( ), doPost( ) 메소드를 통해 요청 작업을 수행한 후 웹 브라우저에 응답


POST : HTTP HEAD 안에 포함해서 전송하므로 안전
GET : URL에 포함할 수 있는 것이 한계가 있음

 

   ▷ 페이지 이동하기
      ▶ 서블릿 클래스에서 웹 브라우저로부터 요청된 처리 결과를 보여줄 응답 페이지로 이동
      ▶ 이때 현재 뷰 페이지에서 이동할 뷰 페이지에 요청 정보를 그대로 전달하며,

           뷰 페이지가 이동해도 처음에 요청된 URL을 계속 유지하기 위해 포워딩 방식을 사용

 

◎ 모델 생성하기
   ▷ 모델은 웹 애플리케이션의 비즈니스 로직을 포함하는 데이터로 웹 애플리케이션의 상태
   ▷ 모델은 데이터베이스에서 데이터를 가져오거나, 웹 애플리케이션에 필요한 서비스를 수행하는

        간단한 자바 클래스로 자바빈즈를 의미
   ▷ 자바빈즈는 데이터를 담을 멤버 변수인 프로퍼티와 데이터를 가져오거나 저장하는 Getter/Setter( ) 메소드로 구성

 


◎ 뷰 생성하기
   ▷ 뷰는 웹 브라우저의 요청을 처리한 결과를 사용자에게 보여주는 JSP 페이지를 의미
   ▷ 뷰는 JSP가 제공하는 태그를 사용하여 컨트롤러가 전송한 모델 데이터를 웹 브라우저에 출력

 

 

◎ MVC를 적용한 로그인 인증하기 예제

1. web.xml 파일(WEB-INF)
<web-app>
...(생략)...
	<servlet>
		<servlet-name>myController</servlet-name>
		<servlet-class>ch18.controller.ControllerServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>myController</servlet-name>
		<url-pattern>/ch18/ControllerServlet</url-pattern>
	</servlet-mapping>
</web-app>​

 

2. 모델 생성하기 : LoginBean.java(src/ch18/model/LoginBean.java)
package ch18.model;

public class LoginBean {
	private String id;
	private String password;
	
	
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
	public boolean validate() {
		if(password.equals("admin"))
			return true;
		else
			return false;
	}	
}​


3. 컨트롤러 생성하기 : ControllerServlet.java(src/ch18/controller/LoginBean.java)

package ch18.controller;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import ch18.model.LoginBean;

public class ControllerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) 
	throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		
		String id = request.getParameter("id");
		String password = request.getParameter("passwd");
		
		LoginBean bean = new LoginBean();
		bean.setId(id);
		bean.setPassword(password);
		request.setAttribute("bean", bean);
		
		boolean status = bean.validate();
		
		if(status) {
			RequestDispatcher rd = request.getRequestDispatcher("mvc_success.jsp");
			rd.forward(request, response);
		} else {
			RequestDispatcher rd = request.getRequestDispatcher("mvc_error.jsp");
			rd.forward(request, response);
		}
	}
	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException{
		doPost(req, resp);
	}
}​

 

4. 뷰 생성하기 : mvc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<form method="post" action="ControllerServlet">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="password" name="passwd">
		<p> <input type="submit" value="전송">
	</form>
</body>
</html>​

 


5. mvc_success.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="ch18.model.LoginBean" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<p> 로그인 성공했습니다
	<p><%
		LoginBean bean = (LoginBean) request.getAttribute("bean");
		out.print("아이디 : " + bean.getId());
	%>
</body>
</html>​


6. mvc_error.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MVC</title>
</head>
<body>
	<p> 아이디와 비밀번호를 확인해주세요
	<%@ include file="mvc.jsp" %>
</body>
</html>​


이 예제는 여러 개의 코드들을 분리해놓고 패스워드가 admin과 일치하면 로그인이 성공하는 예제입니다.

아래의 코드를 통해서 java에 작성했던 조건문의 값이 true인지 false인지 검증하네요!

boolean status = bean.validate();

 

 

MVC(Model, View, Controller)는 웹 애플리케이션을 비즈니스 로직, 프레젠테이션로직, 데이터로 분리하는 디자인입니다.

 

여기서 어떻게 분리하는 것은 이해가 되지만 명확하게 어떻게 사용하는 것인지 잘 모르겠네요,,ㅎㅎ

 

예제를 보면서 다시 파악해 볼게요!!

 

아시는 분들은 댓글부탁드릴게요~~~

 

많은 분들의 피드백은 언제나 환영합니다!  많은 댓글 부탁드려요~~

 

 

728x90
반응형