MVC 패턴, SERVLET 개념

꿈꾸는하늘·2024년 3월 20일

JSP

목록 보기
5/25

MVC 패턴

  • Model

    Model은 데이터를 가진 객체로 애플리케이션이 포함해야 할 데이터가 무엇인지를 정의한다. Model에서 데이터의 수정이나 조작이 발생하면 Controller와 View를 통해서 클라이언트에게 해당 데이터의 결과를 제공한다.

    • Model의 특징
      사용자가 편집하길 원하는 모든 데이터를 가지고 있어야만 한다.
      View나 Controller에 대해 어떤 정보도 알지 않아야 한다.
      변경이 발생하면 변경 통지에 대한 처리 방법을 구현해야 한다.
  • View

    View는 Model을 통해서 클라이언트에게 데이터와 함께 화면을 나타내는 인터페이스 요소이다.
    (예) Main.jsp, Login.jsp 처럼 화면에 나타나는 페이지

    • View의 특징
      Model이 가지고 있는 정보를 따로 저장하면 안 된다.
      Model이나 Controller와 같이 다른 구성 요소를 몰라야 한다.
      변경이 일어나면 변경 통지에 대한 처리 방법을 구현해야 한다.
  • Controller

    Model과 View 사이를 이어주는 역할로서 클라이언트가 접근한 URL에 따라서 클라이언트의 요청사항을 파악하여 Model을 통해 DB에서 요청사항에 맞는 데이터를 가져오고 해당 데이터를 View를 통해 클라이언트에게 제공한다.
    (예) RegisterProcess.jsp, LoginProcess.jsp 처럼 데이터를 view에 입출력하는 과정

    • Controller의 특징
      Model과 View에 대해서 알아야 한다.
      Model과 View의 변경을 모니터링해야 된다.

* Servlet 서블릿이란?

: 자바로 웹 애플리케이션을 개발 할 수 있도록 만든 기술, 서버 단에서 클라이언트의 요청을 받아 처리한 후 응답하는 역할을 함

  • 특징 : 클라이언트 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
    MV 모델에서 컨트롤러 역할을 함
    모든 메서드는 스레드로 동작함
    javax.servlet.http 패키지의 HttpServlet 클래스를 상속받음

* 동작 방식

: @WebServlet("")에 어떤 요청이 들어왔을 때 해당 서블릿을 호출할 것인지 작성한다.
이 때, 꼭 제일 앞에 /를 붙여줘야함.
ex) @WebServlet("/main") : 클라이언트로부터 main에 대한 요청이 들어오면 해당 서블릿을 사용한다는 뜻

* 서블릿 작성 규칙

  1. javax.servlet, javax.servlet.http, javaio 패키지를 import 해줌
  2. 서블릿 클래스는 ★반드시★ public으로 선언하고 HttpServlet을 상속한다.
  3. 클라이언트의 요청을 처리하기위해 필요한 doGet() 메서드나 doPost() 메서드를 오버라이딩 해준다. 필요에 따라 doGet()만 필요할 수도, doPost()만 필요할 수도, 둘 다 필요할 수도 있다.
  4. doGet() 또는 doPost()는 ServletException과 IOException 예외를 던지도록 선언해준다.
  5. doGet() 또는 doPost() 메서드를 호출할 때의 매개변수는 HttpServletRequest와 HttpServletResponse를 사용하는데 나는 간단하게 작성하기 위해 변수로 HttpServletRequest req, HttpServletResponse resp를 주로 사용할 예정.

* 서블릿 매핑

크게 두가지 방식이 있음. 첫 번째로 web.xml에 직접 맵핑해주는 방법이 있는데 매번 web.xml에 맵핑을 해주는게 번거롭다고 판단되어 두 번째 방법인 @WebServlet 어노테이션을 작성하여 맵핑하는 방법을 선호하게 될 것 같다.
첫번째 방법)web.xml에 직접 맵핑(아래 코드를 web.xml에 추가하는 방법)

  <servlet>
  	<servlet-name>HelloServlet</servlet-name>
  	<servlet-class>servlet.HelloServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
  	<servlet-name>HelloServlet</servlet-name>
  	<url-pattern>/HelloServlet.do</url-pattern>
  </servlet-mapping>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>HelloServlet.jsp</h1>
<strong>${message }</strong>
<a href="./HelloServlet.do">바로가기</a>
</body>
</html>

두번째 방법)

package servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AnnoMapping.do")
public class AnnoMapping extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		req.setAttribute("message", "@WebServlet으로 매핑");
		req.getRequestDispatcher("./AnnoMapping.jsp").forward(req, resp);
	}

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	}

}
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<body>
<h1>HelloServlet.jsp</h1>
<strong>${message }</strong>
<a href="${pageContext.request.contextPath }/AnnoMapping.do">바로가기</a>
</body>
</html>



DAO로 구현한 게시판 Servlet으로 구현시 게시판을 get방식과 post방식으로 크게 나눠보기


Servlet class 내에서 application, session 객체 생성 메소드

0개의 댓글