.jsp 연습하기 - MVC

오늘·2021년 5월 24일
0

웹 페이지 연습

목록 보기
18/35

MVC

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

MVC 패턴의 구성 요소

  1. 모델 (model) : 애플리케이션의 데이터와 비즈니스 로직을 담는 객체
  2. 뷰(view) : 사용자에게 모델의 정보(데이터)를 보여주는 역할.
    비즈니스 로직을 포함하지는 않으며, 하나의 모델을 다양한 뷰에서 사용한다
  3. 컨트롤러(controller) : 모델과 뷰 사이 어떤 동작이 있을 때 조정하는 역할
    웹으로부터 받은 요청에 가장 적합한 모델을 생성하고 처리하는 역할
    사용자에게 응답하는 적절한 뷰를 선택해 해당 모델을 전달하는 역할

모델 1

  • 기존의 JSP로만 구현한 웹 애플리케이션으로 웹 브라우저의 요청을 받아 처리하는 구조
  • JSP 페이지에 비즈니스 로직을 처리하는 코드와 웹 브라우저에 결과를 출력하는 코드가 섞이게 된다.
  • JSP와 JAVA 코드 등을 분리하지 않고 단순하니, 짜기는 쉬우나 유지보수하기 어렵고, 협업하기 쉽지 않다.

모델 2

  • 클라이언트의 요청 처리, 응답 처리, 비즈니스 로직 처리 부분을 모듈화한 구조
  • 웹 브라우저의 요청이 들어오면 모든 처리를 JSP페이지가 담당하는 모델 1과 달리 아래와 같이 나뉘어 웹 브라우저가 요청한 작업을 처리한다.
    -> 요청에 대한 로직을 처리할 javaBeans
    -> 자바 클래스인 모델
    -> 요청 결과를 출력하는 JSP 페이지 (뷰)
    -> 모든 흐름을 제어하는 서블릿인 컨트롤러

web.xml 파일에 서블릿 구성하기

  1. <servlet> 요소로 서블릿 클래스 등록하기
    <servlet은 웹 애플리케이션에서 사용될 기본 서블릿 객체와 매개변수를 설정하는 요소이다.

매개변수 부분 (<init-param></init-param>)은 생략 가능

<servlet>
	<servlet-name> 서블릿 이름 </servlet-name>
	<servlet-class>서블릿 클래스(패키지 이름.클래스 =>사용할 자바 파일 명)</servlet-class>
	<init-param>
		<param-name> 매개변수 이름 </param-name>
		<param-value> 매개변수 값 </param-value>
	</init-param>
</servlet>
  1. <servlet-mapping>요소로 URL 패턴 설정하기
    웹 브라우저에서 요청되는 URL과 서블릿 클래스를 매핑하기 위해 URL 패턴을 설정하는 요소
<servlet-mapping>
	<servlet-name> 서블릿 이름 </servlet-name>
	<url-pattern> 요청할 URL 패턴 </url-pattern>
</servlet-mapping>

-> 이때 요청할 URL 패턴에서
"http://localhost:9001/JSPBook/index.jsp 를 하고 싶다면 실제로 작성할 모습은
"http://localhost:9001/JSPBook" 부분은 생략하고 "/"만 쓴다.
그렇게만 해도 /JSPBook의 모든 하위 경로를 서블릿 클래스로 처리할 수 있기 때문이다.


예제 : MVC를 적용한 로그인 인증

  1. web.xml
	<servlet>
		<servlet-name> myController </servlet-name>
		<servlet-class>Ch18.com.controller.ControllerServlet</servlet-class>
	</servlet>
	
	<servlet-mapping>
		<servlet-name> myController </servlet-name>
		<url-pattern> /Ch18/ControllerServlet </url-pattern>
	</servlet-mapping>
  1. 모델 생성하기 (LoginBean.java)
package Ch18.com.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 (id.equals("admin") && password.equals("1234")) {
			return true;
		} else {
			return false;
		}
	}
}
  1. 컨트롤러 생성하기 (ControllerServlet.java)
package Ch18.com.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.com.model.LoginBean;

public class ControllerServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	@Override
	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);
	}
}
  1. 뷰 생성하기 (mvc.jsp)
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<<html>
<head>

<title>뷰 부분</title>
</head>
<body>
	<form action="ControllerServlet" method="post">
		<p> 아이디 : <input type="text" name="id">
		<p> 비밀번호 : <input type="password" name="passwd">
		<p> <input type="submit" value="전송">
	</form>
</body>
</html>
  1. 로그인 성공했습니다
<%@page import="Ch18.com.model.LoginBean"%>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<body>
	<p> 로그인 성공했습니다
	<p>
	<%
		LoginBean bean = (LoginBean) request.getAttribute("bean");
		out.print("아이디 : " + bean.getId() + "<br>");
		out.print("비밀번호 : " + bean.getPassword());
	%>
</body>
</html>
  1. 로그인 실패
<%@page import="Ch18.com.model.LoginBean"%>
<%@ page language="java" contentType="text/html; charset=utf-8"%>
<!DOCTYPE html>
<html>
<head>

<title>Insert title here</title>
</head>
<body>
	<p> 아이디와 비밀번호를 확인해주세요
	<%@ include file="mvc.jsp"	%>
</body>
</html>

뷰에서 실행
설정하지 않은 값 전송 시 결과는 아래와 같다 설정한 값을 전송 시


어렵다.

이걸 이용해 게시판을 사용한다는 데 역시 좀 더 공부해야겠다.


etc...

웹 프로젝트 내보내기 : export
웹 프로젝트 가져오기 : import
파일 형식 : war

자바 프로젝트 내보내기 : export
자바 프로젝트 가져오기 : import
파일 형식 : jar

사용자가 만든 자바 파일을 라이브러리로 등록하고 싶다
= jar로 만들어서 배포하고 싶다

0개의 댓글