본문 바로가기
JSP Servlet

JSP Servlet Web_MVC

by wanttosleep1111 2023. 2. 13.

JSP Servlet Web_MVC

 

1. 디자인 패턴 (Design Pattern)

  • 소프트웨어 설계에 있어 공통된 문제들에 대한 표준적인 해결책

2. MVC

  • 시각적으로 보여지는 부분과 데이터를 처리하는 부분을 분리하여 유연한 구조를 설계
  • Model : 어플리케이션의 정보, 데이터 (실행에 직접적 관여하지 않음)
    View : 사용자가 보게 될 결과 화면 출력
    Controller : 사용자의 입력처리와 흐름제어 담당 (어플리케이션의 행위 정의)

3. Model 1, Model 2 비교

  • Model1 : JSP에서 출력과 로직을 전부 컨트롤
  • Model2 : JSP에서는 출력만 처리 (View와 Controller를 명확하게 분리)

 

※ Model1

 

※ Model2

 

Model1 Model2
View와 Controller가 같은 JSP에서 실행 View와 Controller가 분리
(View는 어떠한 처리 Logic도 포함하지 않음)
개발 기간 단축 초기 구조 설계에서 많은 시간 필요
유지 보수 어려움 유지 보수, 확장 용이
디자이너와 개발자의 소통 필요 디자이너와 개발자의 작업 분리
간단한 웹 어플리케이션 구현 용이 중.대형 프로젝트에 적합

 


 

▶ 예제

Model1 방식을 이용해서 회원가입 프로그램 작성하기

Main.jsp

<%@ 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>

	<a href="Join.jsp"><button>회원가입</button></a> <br><br>
	<a href="Login.jsp"><button>로그인</button></a>

</body>
</html>

 

Join.jsp

<%@ 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>

	<fieldset>
		<form action="JoinProgram.jsp" method="post">
			<table>
				<tr>
					<td>ID :</td>
					<td><input type="text" name="id"></td>
				</tr>
				<tr>
					<td>PW : </td>
					<td><input type="text" name="pw"></td>
				</tr>
				<tr>
					<td>NAME : </td>
					<td><input type="text" name="name"></td>
				</tr>
				<tr>
					<td></td>
					<td><input type="submit" value="회원가입"></td>
				</tr>
			</table>		
		</form>
	</fieldset>
	
</body>
</html>

 

JoinProgram.jsp

<%@ page import="Model.DTO"%>
<%@ page import="Model.DAO"%>
<%@ 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>
	<!-- 회원가입에 필요한 데이터 가져오기! 
		id, pw, name -> 데이터 인코딩 작업 진행하기
	-->
	
	<%
		// 1. 요청에 대한 인코딩 작업 진행하기
		request.setCharacterEncoding("UTF-8");
		
		// 2. 요청에 대하여 데이터 값 꺼내오기
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String name = request.getParameter("name");
		
		// 3. DB에 저장하기!
		DAO dao = new DAO(); // DAO import 필요 (경로가 다름)
		int result = dao.join(new DTO(id, pw, name));
		
		// 4. 회원 가입에 대한 성공 여부 판단
		if (result > 0) {
			response.sendRedirect("Main.jsp");
			System.out.println("회원 가입 성공");
		} else {
			response.sendRedirect("Join.jsp");
		}
		
	%>
</body>
</html>

 

DAO

package Model;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DAO {

	// 데이터베이스 연결을 위한 로직 작업
	// 1. 드라이버 동적 로딩 -> Class.forName()
	// 2. DB 연결
	// 3. SQL문 작성 및 전송
	// 4. 사용 객체 닫아주기
	
	Connection conn = null;
	PreparedStatement psmt = null;
	ResultSet rs = null;
	int result = 0;
	
	public void getCon() {
		// 데이터베이스 연결 메소드                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 
		try {
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			String db_url = "jdbc:oracle:thin:@DESKTOP-CMFEA4E:1521:xe";
			String db_id = "c##service";
			String db_pw = "12345";
			
			conn = DriverManager.getConnection(db_url, db_id, db_pw);
					
					
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	// DB 연결 종료 메소드 -> 사용 객체 역순으로 닫힌다
	public void close() {
		try {
			if (rs != null) {
				rs.close();					
			} 
			if (psmt != null) {
				psmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		}catch (SQLException e) {
				e.printStackTrace();
		}
	}
	
	
	// 회원 가입을 위한 메소드 생성
	public int join(DTO dto) {
		getCon();
		
		String sql = "INSERT INTO MEMBERINFO VALUES(?, ?, ?)";
		
		try {
			psmt = conn.prepareStatement(sql);
			
			psmt.setString(1, dto.getId());
			psmt.setString(2, dto.getPw());
			psmt.setString(3, dto.getName());
			
			// sql 실행 메소드
			// - executeQuery() : 조회(select)
			// - executeUpdate() : 삽입, 수정, 삭제
			result = psmt.executeUpdate();
			// int result를 미리 메소드 선언 전에 초기화하면 편함
				
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		finally {
			close();
		}
		
		return result;
	}
	
	
	
}

 

DTO

package Model;

public class DTO {

	private String id;
	private String pw;
	private String name;
		
	public DTO(String id, String pw, String name) {
		this.id = id;
		this.pw = pw;
		this.name = name;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPw() {
		return pw;
	}

	public void setPw(String pw) {
		this.pw = pw;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	
	
	
}

'JSP Servlet' 카테고리의 다른 글

JSP Servlet Maven  (0) 2023.02.13
JSP Servlet Scope  (0) 2023.02.08
JSP Servlet 쿠키, 세션 (Cookie, Session)  (0) 2023.02.07
JSP Servlet 내장 객체 (Implicit Object)  (0) 2023.02.04
JSP Servlet Java Server Pages 기본  (0) 2023.01.30

댓글