JSP&Servlet/기초정리

JSP&Servlet 기초 - MVC Model1 방식

줘니(•̀ᴗ•́)و 2023. 2. 9. 08:51
728x90

* 디자인 패턴(Design Pattern)

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

 

디자인 패턴엔 MVC 패턴이라는 아주 중요한 개념이 있다!

 

 

1. MVC 패턴

: Model, View, Controller

: 시각적으로 보여지는 부분데이터를 처리하는 부분분리하여 유연한 구조를 설계

 

 

 

 

 

* JSP가 어디서 어떻게 쓰이는지 

- Model1 : JSP에서 출력과 로직을 전부 컨트롤(view, controller)

- Model2 : JSP에서는 출력만 처리(view)

 

 

 

 

* Model1에서 view와 controller 둘 다 공통되는 JSP로 되는 이유

: < > / <% %> 이용해 HTML, JAVA 로직 쓸 수 있어서

 

 

 

 

* Model1의 단점을 보완해서 나온 것이 Model2

 

 

 

2. MVC Model1 방식

: M / VC 로 나눠 생각

 

 

 

 

 

3. MVC Model1 방식 실습

 

 

 

 

여기서 회원가입만 해보고 로그인 기능은 생략할 것이다!

model1은 잘 쓰지 않기 때문.,🤷‍♂️

 

 

 

1) 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>

 

 

2) 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>
	
	<form action="JoinProgram.jsp" method="post"> <br>
		<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>
    
</body>
</html>

 

 

3-1) DTO - Servlet에서 jdbc 연결 위해 클래스 생성

 

jdbc만 나오면 아직 눈이 질끈 감기지만., 그래도 해야지😂😂

 

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;
	}

	// setter / getter 메소드 생성
	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;
	}
	
}

 

 

3-2) DAO - Servlet에서 jdbc 연결 위해 클래스 생성

 

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 {
	// 데이터베이스 연결을 위한 로직 작업
	
	Connection conn = null;
	PreparedStatement psmt = null;
	ResultSet rs = null;

	int result = 0;
	
	// DB 연결 메소드
	public void getCon() {
		try {
			// 문 열기
			Class.forName("oracle.jdbc.driver.OracleDriver");
			
			String db_url = "jdbc:oracle:thin:@localhost: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());
			
			result = psmt.executeUpdate();
			
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			// 문 닫기
			close();
		}
		
		return result;
	}
	
}

 

 

* DB 연결하기

1. 드라이버 동적로딩 - Class.forName()

2. DB 연결

3. SQL 작성 및 전송

4. 사용 객체 닫아주기

 

* SQL 실행메소드

- executeQuery() : 조회(select) - 테이블 전후 내용이 바뀌지 않는

- executeUpdate() : 삽입, 수정, 삭제 - 테이블 전후 내용이 바뀌는

 

 

 

3) 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>

	<%
		// 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();
		// import 해줘야 함 : JSP는 ctrl + space bar
		
		// DTO dto = new DTO(id, pw, name);
		// dao.join(dto);
		int result = dao.join(new DTO(id, pw, name)); 
		
		// 4. 회원가입에 대한 성공여부 판단 
		if(result > 0){
			response.sendRedirect("Main.jsp");
			System.out.print("회원가입 성공!");
		}else{
			response.sendRedirect("Join.jsp");
		}
	%>
    
</body>
</html>

 

 

 

728x90

'JSP&Servlet > 기초정리' 카테고리의 다른 글

JSP&Servlet 기초 - MVC Model2 방식  (0) 2023.02.13
Maven 방식 사용하기  (0) 2023.02.13
JSP&Servlet 기초 - Scope  (0) 2023.02.08
JS&Servlet 기초 - 로그인 실습(세션 추가)  (0) 2023.02.07
JSP 기초 - 쿠키와 세션  (1) 2023.02.03