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)는 웹 애플리케이션을 비즈니스 로직, 프레젠테이션로직, 데이터로 분리하는 디자인입니다.
여기서 어떻게 분리하는 것은 이해가 되지만 명확하게 어떻게 사용하는 것인지 잘 모르겠네요,,ㅎㅎ
예제를 보면서 다시 파악해 볼게요!!
아시는 분들은 댓글부탁드릴게요~~~
많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~
'BackEnd > JSP' 카테고리의 다른 글
[JSP 웹 프로그래밍] JSP 표준 태그 라이브러리 2 (sql 태그, function 태그) (0) | 2023.03.12 |
---|---|
[JSP 웹 프로그래밍] JSP 표준 태그 라이브러리 1 (Core 태그) (0) | 2023.03.12 |
[JSP 웹 프로그래밍] JDBC 데이터베이스와 JSP 연동 3 (쿼리문 실행 결과 값 가져오기) (1) | 2023.03.12 |
[JSP 웹 프로그래밍] JDBC 데이터베이스와 JSP 연동 2 (데이터베이스 쿼리 실행) (1) | 2023.03.12 |
[JSP 웹 프로그래밍] JDBC 데이터베이스와 JSP 연동 1 (JDBC 드라이버 로딩, DBMS 접속) (1) | 2023.03.12 |