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 |
댓글