본문 바로가기

서버/Servlet-JSP
MVC, JSP model

// MVC ( Model , View, Controller)

Model > 하나의 계층에서 또다른 계층으로 데이터를 전달하는 역할 > 데이터(데이터 관련 업무-자바) 담당
View > 출력 업무 담당(HTML 코드-JSP)
Controller > 입력과 제어 담당(자바 코드) > 전체 업무 통제 역할

1. JSP Model 1

2. JSP Model 2 


// Model1

    - HTML + CSS +JavaScript + Java + Servlet + JSP = *.jsp              
    - <% java code %> + client code
    - 코드가 뒤엉켜서 불편


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!--controller--> 
<% 
	int num = 0;
	String num_ = request.getParameter("n");
	if(num_ != null && !num_.equals(""))
		num = Integer.valueOf(num_);
	
	String result;
	
	if(num%2 != 0) { 
	    result = "홀수";
	}
	else {
	    result = "짝수";
	}
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> spaghetti </title>
</head>
<body>
	<%=result%>입니다. <!-- 출력: view / 출력 데이터 result: model -->
</body>
</html>

// Model 2

- 컨트롤러와 뷰가 물리적으로 분리된 방식

- Servlet: 자바 코드 작성
- JSP: 클라이언트 코드 작성                    
- 디자인 패턴: MVC 패턴 기반 구현

※ jsp 파일은 WEB-INF에 넣어서 바로 실행이 불가능하게 한다. 

- dispatcher(디스패쳐)

- redirect : 현재 작업 내용과 전혀 상관 없이 새로운 요청을 하는 것

- forward : 현재 작업한 내용을 이어갈 수 있도록 공유하는 것


※컨트롤러(java)에서 실행하기!


package com.sorrel012.web;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
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("/spag")
public class Spag extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	int num = 0;
	String num_ = request.getParameter("n");
	if(num_ != null && !num_.equals("")) {
	    num = Integer.valueOf(num_);
	}

	String result;

	if(num%2 != 0) {
	    result = "홀수";
	}
	else {
	    result = "짝수";
	}

	request.setAttribute("result", result);

	RequestDispatcher dispatcher
	= request.getRequestDispatcher("spag.jsp");
	dispatcher.forward(request, response);

    }
}

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> spaghetti </title>
</head>
<body>
	<%= request.getAttribute("result") %>입니다.
</body>
</html>