1. SQL로 Table 생성 및 데이터 추가
//테이블 생성 SQL
CREATE TABLE member(
id VARCHAR2(100) PRIMARY KEY,
password VARCHAR2(100) NOT NULL,
name VARCHAR2(100) NOT NULL,
address VARCHAR2(100)
)
// 데이터 추가 SQL
INSERT INTO member(id,password,name,address) VALUES('logitech','m331','로지텍','강남');
INSERT INTO member(id,password,name,address) VALUES('samsung','galaxy','삼성','영통');
SELECT COUNT(*) FROM member; // 멤버 숫자 세는 SQL
SELECT * FROM member; // 모든 멤버 정보 조회 SQL
2. MVC 중 Model 부분 작성
package org.waterpunch.praticeMVC.model;
public class MemberVO {
private String id;
private String password;
private String name;
private String address;
public MemberVO() {
super();
// TODO Auto-generated constructor stub
}
public MemberVO(String id, String password, String name, String address) {
super();
this.id = id;
this.password = password;
this.name = name;
this.address = address;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "MemberVO [id=" + id + ", password=" + password + ", name=" + name + ", address=" + address + "]";
}
}
package org.waterpunch.praticeMVCmodel1.model;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
// DAO : Data Access Object 데이터베이스 연동 로직을 정의한 객체
public class MemberDAO {
private String driver="oracle.jdbc.OracleDriver";
private String url="jdbc:oracle:thin:@127.0.0.1:1521:xe";
private String user="scott";
private String pass="tiger";
public MemberDAO() throws ClassNotFoundException {
Class.forName(driver);
}
public void closeAll(PreparedStatement pstmt,Connection con) throws SQLException {
if(pstmt!=null)
pstmt.close();
if(con!=null)
con.close();
}
//메서드 오버로딩
public void closeAll(ResultSet rs,PreparedStatement pstmt,Connection con) throws SQLException {
if(rs!=null)
rs.close();
closeAll(pstmt, con);
}
// 멤버 숫자 세는 메서드
public int getTotalMemberCount() throws SQLException {
int count=0;
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
con=DriverManager.getConnection(url, user, pass);
String sql="select count(*) from member";
pstmt=con.prepareStatement(sql);
rs=pstmt.executeQuery();
if(rs.next())
count=rs.getInt(1);
}finally {
closeAll(rs, pstmt, con);
}
return count;
}
// ID를 통해서 멤버 정보 찾는 메서드
public MemberVO findMemberById(String id) throws SQLException{
MemberVO vo=null;
Connection con=null;
PreparedStatement pstmt=null;
ResultSet rs=null;
try {
con=DriverManager.getConnection(url, user, pass);
String sql="select name,address from member where id=?";
pstmt=con.prepareStatement(sql);
pstmt.setString(1, id);
rs=pstmt.executeQuery();
if(rs.next()) {
vo=new MemberVO(id,null,rs.getString(1),rs.getString(2));
}
}finally {
closeAll(rs, pstmt, con);
}
return vo;
}
}
3. JSP 생성 (View + Controller)
<!-- 인덱스 생성 -->
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Model 1</title>
</head>
<body>
<h4>Model 1 Architecture(설계양식) 테스트</h4>
<ul>
<li><a href="AllMemberCount.jsp">총회원수 조회</a></li>
<li><a href="findMemberById-form.jsp">회원검색</a>
</ul>
<hr>
<img src="model1.png" width="600">
</body>
</html>
<!-- 회원수 세는 Form -->
<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>총회원수</title>
</head>
<body bgcolor="yellow">
<% //초기 방식에 비해 jsp 의 코드량이 감소 , 데이터 액세스 로직 업데이트시 영향이 없다
MemberDAO dao=new MemberDAO();
int count=dao.getTotalMemberCount();
%>
<h4>Model1 설계방식 - 총회원수 <%=count%> 명</h4>
</body>
</html>
<!-- 아이디를 통해 정보검색 하는 Form -->
<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원검색화면</title>
</head>
<body bgcolor="lime">
<%
MemberDAO dao=new MemberDAO();
int count=dao.getTotalMemberCount();
%> 총회원수 <%=count %>명
<hr>
<form action="findMemberById-action.jsp">
아이디 <input type="text" name="memberId" required="required">
<button type="submit">검색</button>
</form>
</body>
</html>
<!-- 위의 폼을 통해 결과값을 반환하는 Form -->
<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberVO"%>
<%@page import="org.waterpunch.praticeMVCmodel1.model.MemberDAO"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>findMemberById-action</title>
</head>
<body>
<%--
클라이언트로부터 아이디를 전달받는다
MemberDAO 의 findMemberById(id) 를 이용해 회원정보를 검색한다
회원정보가 존재하면
아이디 : samsung
이름 : 삼성
주소 : 영통
아이디에 대한 회원정보가 존재하지 않으면
javascript alert으로 xx 아이디에 대한 회원정보가 없습니다
location.href="findMemberById-form.jsp"; 로 이동시킨다
--%>
<%
String id=request.getParameter("memberId");
MemberDAO dao=new MemberDAO();
MemberVO vo=dao.findMemberById(id);
if(vo==null){
%>
<script type="text/javascript">
alert("<%=id%>아이디에 대한 회원정보가 없습니다!");
location.href="findMemberById-form.jsp";
</script>
<% }else{ %>
아이디 : <%=id %><br>
이름 : <%=vo.getName() %><br>
주소 : <%=vo.getAddress() %>
<% } %>
</body>
</html>
모델1 구조는 사용자의 요청을 JSP가 전부 다 처리
웹브라우저가 사용자의 요청을 받은 JSP는 자바빈 or 서비스 클래스를 사용하여 웹브라우저가 요청한 작업을 처리
장점 : 개발속도가 빠르다 | 단점 : 유지보수 측면에서 불리 |
규모가 작고 개발 후에 유지보수가 거의 필요없는 프로젝트에 적합 |
반응형
'Java' 카테고리의 다른 글
[Spring] Spring MVC? (0) | 2021.06.02 |
---|---|
DBCP (Database Connection Pool) 연습 (1) | 2021.04.25 |
MVC Architecture Model 2 연습예제 (0) | 2021.04.25 |
Singleton Design Pattern(싱글톤 디자인 패턴) (0) | 2021.04.23 |
MVC Architecture ( Model 1 / Model 2 ) (0) | 2021.04.22 |
댓글