Notice
Recent Posts
Recent Comments
Link
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Tags more
Archives
Today
Total
관리 메뉴

개발공부 일지

학원수업_43day [HTML,CSS,JSP,Servlet(10day) - Model2-MVC / forward, redirect] 본문

학원수업/Web(HMTL,CSS,JSP,Servlet)

학원수업_43day [HTML,CSS,JSP,Servlet(10day) - Model2-MVC / forward, redirect]

짜몽- 2022. 9. 30. 09:13

*전날 복습*

Model - Singleton Design Pattern

Controller - Front Controller -Design Pattern

View - EL 과 JSTL

javascript  Ajax / JSON


 

음식 만드는건 -> model

서빙하는건 view

 

Model2

Controller : select -> 요청분석, Model 과 view 제어

view : jsp -> 화면제공

Model: Java bean -> 비즈니스로직과 Data Access Logic

 

설계구조 아키텍쳐


MVC 란?

 Model : Business Logic 과 Data Access Logic 을 담당 / Java Component(or Bean ) 가 담당 ( DAO, Service, VO , DTO .. )

 View : client 에게 response 즉 응답을 담당 , 화면 표현 / JSP 가 담당

 Controller : client 의 request를 분석, Model 과 연동 ,
                연동결과를 적절한 View를 선택(forward or redirect)해 응답하게 한다 / Servlet 이 담당

MVC 패턴

 

* Software Architecture 소프트웨어 아키텍쳐 


: 소프트웨어 아키텍쳐(설계구조 or 설계양식)는 소프트웨어 구성 요소(component or java bean) 들 사이의 
관계를 표현하는 것을 말함 
    
초기 개발 방식 :  Servlet or JSP    ↔   Database   
 ex ) 샘플예제 : step1-jsp-db.jsp 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"   import="java.sql.*"%>
<%
	// member db 에 접근해 회원수를 보여주는 웹페이지 	
	Connection con=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:xe","scott","tiger");
	String sql="select count(*) from member";
	PreparedStatement pstmt=con.prepareStatement(sql);
	ResultSet rs=pstmt.executeQuery();
	rs.next();
	int count=rs.getInt(1);
	rs.close();
	pstmt.close();
	con.close();
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>web 초기 개발 방식</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container pt-3">
<h4>회원수 <%=count %></h4>
</div>
</body>
</html>

 

Model 1 Architecture :  

JSP      Java Beans    ↔   Database 

샘플예제 :      step2-model1.jsp    MemberDAO 

 

<%@page import="model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Model1 설계방식 적용</title>
 <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/css/bootstrap.min.css">
  <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js"></script>
  <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.1/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container pt-3">
회원수 <%=new MemberDAO().findMemberCount() %> 
</div>
</body>
</html>

Model1 에서 JSP 역할 :  client 에게 form 과 같은 화면 제공 ,
       client 가 보낸 요청을 분석 
       요청에 따른 java bean(DAO..) 과 연동
       결과를 클라이언트에게 응답 
       
   Model1 에서 Java Beans 역할 :  bean == component 와 동일한 의미 
       business logic 과 data access logic 을 담당 


Model 1 -> Model 2  아키텍쳐 변화의 특징 

-  java beans 역할은 동일 , MVC 의 Model 영역 
-  Model 1 에서 jsp 가 담당하는 역할이 분화 :  Controller와 View로 분업화 

 

Model 2 Architecture : MVC Design Pattern 
    Controller
     View      Model <--> Database 
    
   MVC는 Model2 아키텍쳐의 근간을 이루는 Design Pattern 이다 
   자바(or 스프링) 웹어플리케이션 설계 방식의 근간을 이루는 디자인 패턴이 MVC다 

 


 Controller 에서 View로 제어를 이동하는 방식 , View 를 선택하는 방식      

  • forward 방식
  • redirect 방식           

1. forward 이동방식 

기존 request와 response 유지시킨 채 제어를 이동한다 => 주로 정보 조회시 사용

- WAS(Web Container) 상에서 이동되므로 클라이언트 측 url 은 변동이 없다

 즉 클라이언트 측은 이동된 것을 알지 못한다 
이런 특성으로 클라이언트 측에서 새로고침(f5)시에는 기존 동작이 반복된다 
  -> 등록,삭제,수정에는 적합하지 않다 


   

2. redirect 이동방식

클라이언트 브라우저에게 이동 url 을 지정 , 등록 수정 삭제 작업에 적합 
기존 request와 response는 유지되지 않고 새로운 request, response 가 생성됨

클라이언트 측으로 이동할 url 을 지정해서 브라우저가 이동해 view 정보를 보도록 이동하는 방식