이경화 ([email protected])

48
이이이 ([email protected]) Ch13. 웹 웹웹웹웹웹 웹웹 웹 웹웹 MVC2 Member

Upload: lerato

Post on 04-Feb-2016

47 views

Category:

Documents


0 download

DESCRIPTION

Ch13. 웹 프로그래밍 설계 및 실습 MVC2 Member. 이경화 ([email protected]). First off. http://java.sun.com/ http://java.sun.com/j2se/1.4.2/docs/api/index.html http://java.sun.com/javase/6/docs/api/ [ 영문 API_1.6] http://apollo89.com/java/ko/api/ [ 한글 API_1.6] - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 이경화 (khlee@cherry.ssu.ac.kr)

이경화 ([email protected])

Ch13. 웹 프로그래밍 설계 및 실습MVC2 Member

Page 2: 이경화 (khlee@cherry.ssu.ac.kr)

First off

2

http://java.sun.com/

http://java.sun.com/j2se/1.4.2/docs/api/index.html

http://java.sun.com/javase/6/docs/api/ [ 영문 API_1.6]

http://apollo89.com/java/ko/api/ [ 한글 API_1.6]

http://www.w3schools.com/TAGS/ [HTML 4.01 / XHTML 1.0 Reference]

http://java.sun.com/docs/books/tutorial/javabeans/ [The JavaBeans™ Tutorial]

Servlet and JSP, C.Edward Chow

Page 3: 이경화 (khlee@cherry.ssu.ac.kr)

Contents

• Basic MVC2 Pattern• JSP Model 2 architecture - Member

3

Page 4: 이경화 (khlee@cherry.ssu.ac.kr)

Column Add in Table (1/2)

Page 5: 이경화 (khlee@cherry.ssu.ac.kr)

Column Add in Table (2/2)

##>mysql -uroot -p0000

mysql> use lkh

mysql> show tables;

mysql> alter table member add regdate date;

mysql> update member set regdate = now();

mysql> desc member;

mysql> select * from member;

Page 6: 이경화 (khlee@cherry.ssu.ac.kr)

프로젝트 구조

• Context_root : 이니셜 _PRJ• Java Source

– DB 연결 : mvc2.db.DBConn.java

– DAO : mvc2.member.dao.MemberDAO.java

– DTO : mvc2.member.dto.MemberVO.java

– Servlet : mvc2.member.controller.MemberServlet.java

• JSP Source– 입력 폼 : inputMember.jsp– 회원 목록 : listMember.jsp– 회원 상세 : readMember.jsp

Page 7: 이경화 (khlee@cherry.ssu.ac.kr)

MVC1 member 동작 과정

7

createMember.jspcreateProc.jsp

listMember.jsp

readMember.jsp

updateProc.jspdeleteProc.jsp

DAO.java

DTO.java

DB

DBConnection.java

update

delete

list

create

read

VIEW

MODEL

Page 8: 이경화 (khlee@cherry.ssu.ac.kr)

MVC2 member 동작 과정

8

createMember.jspMemberServlet.java

listMember.jsp

main.jsp

readMember.jsp DAO.java

DTO.java

DB

DBConnection.java

list

create

read

update / delete

VIEW

CONTROLLER

MODEL

Page 9: 이경화 (khlee@cherry.ssu.ac.kr)

Model

9

- DB 연결 : mvc2.db.DBConn.java- DAO : mvc2.member.dao.MemberDAO.java- DTO : mvc2.member.dto.MemberVO.java

Page 10: 이경화 (khlee@cherry.ssu.ac.kr)

package mvc2.db;

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

public class DBConn {

DBConn.java

Page 11: 이경화 (khlee@cherry.ssu.ac.kr)

/** * Mysql DB 연결 * @return Connection */

public static Connection mysqlConn() { Connection conn = null; String url= "jdbc:mysql://127.0.0.1:3306/lkh";

try { Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url,"root","0000");} catch(Exception e) { System.out.println(e.toString());}return conn;

}

DBConn.java

Page 12: 이경화 (khlee@cherry.ssu.ac.kr)

/** * Mysql DB 연결 해제 * @param conn */

public static void close(Connection conn) { try { if(conn !=null) conn.close(); } catch(Throwable e) { System.out.println(e.toString()); } finally { try {

if(conn != null) conn.close();} catch ( Exception e ) {

System.out.println(e.toString());}

}}

Page 13: 이경화 (khlee@cherry.ssu.ac.kr)

/** * Mysql DB 연결 해제 * @param conn * @param pstmt */

public static void close(Connection conn, PreparedStatement pstmt) { try { if(pstmt !=null) pstmt.close(); if(conn !=null) conn.close(); } catch(Throwable e) { System.out.println(e.toString()); } finally { try {

if(pstmt != null) pstmt.close(); if(conn != null) conn.close();

} catch ( Exception e ) { System.out.println(e.toString());

} } }

Page 14: 이경화 (khlee@cherry.ssu.ac.kr)

/** * Mysql DB 연결 해제

* @param conn * @param pstmt * @param rs */

public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if(rs != null ) rs.close(); if(pstmt !=null) pstmt.close(); if(conn !=null) conn.close(); } catch(Throwable e) { System.out.println(e.toString()); } finally { try { if(rs != null ) rs.close(); if(pstmt != null) pstmt.close(); if(conn != null) conn.close(); } catch ( Exception e ) { } }}

} // end of class

Page 15: 이경화 (khlee@cherry.ssu.ac.kr)

package mvc2.member.dto;

public class MemberVO {private int seq = 0;private String userid = "";private String username = "";private String userpw = "";private String regdate = "";

public int getSeq() { return seq; }public String getUserid() { return userid; }public String getUsername() { return username; }public String getUserpw() { return userpw; }public String getRegdate() { return regdate; }

public void setSeq(int seq) { this.seq = seq; }public void setUserid(String userid) { this.userid = userid; }public void setUsername(String username) { this.username = username; }public void setUserpw(String userpw) { this.userpw = userpw; }public void setRegdate(String regdate) { this.regdate = regdate; }

}

MemberVO.java

Page 16: 이경화 (khlee@cherry.ssu.ac.kr)

package mvc2.member.dao;

import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.*;import demoPkg.DBConn;import mvc2.member.dto.MemberVO;

public class MemberDAO {

MemberDAO.java

Page 17: 이경화 (khlee@cherry.ssu.ac.kr)

/** * 회원 정보 생성 * @param dto * @return boolean */public boolean create (MemberVO dto) {

Connection conn = null;PreparedStatement pstmt = null;String insertSQL = "INSERT INTO member(userid, username, userpw, regdate) VALUES(?,?,?,now())";int res = 0;

try {conn = DBConn.mysqlConn();

pstmt = conn.prepareStatement(insertSQL);pstmt.setString(1, dto.getUserid());pstmt.setString(2, dto.getUsername());pstmt.setString(3, dto.getUserpw());res = pstmt.executeUpdate();

} catch (Exception e) { System.out.println(e.getMessage());

Page 18: 이경화 (khlee@cherry.ssu.ac.kr)

} finally {try { DBConn.close(conn, pstmt);} catch (Exception e) { e.printStackTrace();}

}

if (res > 0) return true;

else return false;

}

Page 19: 이경화 (khlee@cherry.ssu.ac.kr)

/** * 회원 목록 보기 * @return Vector */public Vector list() {

Vector v1 = new Vector();Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;String listSQL = "SELECT seq, userid, username, userpw, regdate from MEMBER";try { conn = DBConn.mysqlConn(); pstmt = conn.prepareStatement(listSQL);

rs = pstmt.executeQuery(); while(rs.next()) {

MemberVO dto = new MemberVO(); dto.setSeq(rs.getInt("seq")); dto.setUserid(rs.getString("userid")); dto.setUsername(rs.getString("username")); dto.setUserpw(rs.getString("userpw")); dto.setRegdate(rs.getString("regdate"));

Page 20: 이경화 (khlee@cherry.ssu.ac.kr)

v1.addElement(dto);}

} catch (Exception e) { System.out.println(e.getMessage()); } finally {

try { DBConn.close(conn, pstmt, rs);

} catch (Exception e) { e.printStackTrace();

}}return v1;

}

Page 21: 이경화 (khlee@cherry.ssu.ac.kr)

/** * 회원정보 상세보기 * @param idVal * @return MemberVO */public MemberVO read (int seqVal) {

MemberVO dto = new MemberVO();Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;String readSQL = "SELECT userid, username, userpw, regdate FROM member WHERE seq=?";try { conn = DBConn.mysqlConn();

pstmt = conn.prepareStatement(readSQL); pstmt.setInt(1, seqVal); rs = pstmt.executeQuery(); if(rs.next()) {

dto.setSeq(seqVal); dto.setUserid(rs.getString("userid")); dto.setUsername(rs.getString("username")); dto.setUserpw(rs.getString("userpw"));

dto.setRegdate(rs.getString("regdate")); }

Page 22: 이경화 (khlee@cherry.ssu.ac.kr)

} catch (Exception e) { System.out.println(e.getMessage());

} finally { try {

DBConn.close(conn, pstmt, rs);} catch (Exception e) {

e.printStackTrace();}

}return dto;

}

Page 23: 이경화 (khlee@cherry.ssu.ac.kr)

/** * 회원 정보 수정 * @param dto * @return boolean */public boolean update (MemberVO dto) {

Connection conn = null;PreparedStatement pstmt = null;String updateSQL = "UPDATE member SET userid=?, username=?, userpw=?, regdate=now() WHERE seq=?";int res = 0;try { conn = DBConn.mysqlConn();

pstmt = conn.prepareStatement(updateSQL); pstmt.setString(1, dto.getUserid()); pstmt.setString(2, dto.getUsername()); pstmt.setString(3, dto.getUserpw()); pstmt.setInt(4, dto.getSeq());

res = pstmt.executeUpdate();} catch (Exception e) {

System.out.println(e.getMessage());

Page 24: 이경화 (khlee@cherry.ssu.ac.kr)

} finally {try {

DBConn.close(conn, pstmt);} catch (Exception e) {

e.printStackTrace();}

}

if (res > 0) return true;

else return false;

}

Page 25: 이경화 (khlee@cherry.ssu.ac.kr)

/** * 회원정보 삭제 * @param dto * @return boolean */public boolean delete (int seqVal) {

Connection conn = null;PreparedStatement pstmt = null;String deleteSQL = "DELETE FROM member WHERE seq=?";int res = 0;try {

conn = DBConn.mysqlConn(); pstmt = conn.prepareStatement(deleteSQL); pstmt.setInt(1, seqVal); res = pstmt.executeUpdate();} catch (Exception e) {

System.out.println(e.getMessage());} finally {

try { DBConn.close(conn, pstmt);

Page 26: 이경화 (khlee@cherry.ssu.ac.kr)

} catch (Exception e) { e.printStackTrace();

} }

if (res > 0) return true;

else return false;

}

Page 27: 이경화 (khlee@cherry.ssu.ac.kr)

Controller

27없는 경우 : Controller 선택 > 마우스우클릭 >other>Web>servlet 선택

MemberServlet

mvc2.member.controller

Page 28: 이경화 (khlee@cherry.ssu.ac.kr)

package mvc2.member.controller;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;

import javax.servlet.RequestDispatcher;import mvc2.member.dao.MemberDAO;import mvc2.member.dto.MemberVO;import java.util.Vector;/** * Servlet implementation class MemberServlet */public class MemberServlet extends HttpServlet {

private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public MemberServlet() { super(); }

MemberServlet.java 자동생성

MVC2 방식

28

Page 29: 이경화 (khlee@cherry.ssu.ac.kr)

/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.myCall(request, response);}

/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

this.myCall(request, response);}

}

29

Page 30: 이경화 (khlee@cherry.ssu.ac.kr)

public void myCall(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("euc-kr"); response.setContentType("text/html; charset=euc-kr");

LoginAction dao = new LoginAction();MemberVO dto = new MemberVO();String url = "";Boolean flag = false;String action = request.getParameter("actionType");//System.out.println("action : "+ action);

if (action.equals("list")) {Vector v1 = dao.list();request.setAttribute("v1", v1);url = "/Demo8/listMember.jsp";RequestDispatcher dispatcher =request.getRequestDispatcher(url);dispatcher.forward(request, response);

30

Page 31: 이경화 (khlee@cherry.ssu.ac.kr)

} else if (action.equals("create")) {dto.setUserid(request.getParameter("userid"));

dto.setUsername(request.getParameter("username"));dto.setUserpw(request.getParameter("userpw"));

flag = dao.create(dto);if(flag == true) {

Vector v1 = dao.list();request.setAttribute("v1", v1);url = "/Demo8/listMember.jsp";

} else {url = "/Demo8/inputMember.jsp";

}RequestDispatcher dispatcher = request.getRequestDispatcher(url);dispatcher.forward(request, response);

}

31

Page 32: 이경화 (khlee@cherry.ssu.ac.kr)

<%@page contentType="text/html; charset=euc-kr" pageEncoding="euc-kr"%>

<% request.setCharacterEncoding("euc-kr"); %><jsp:useBean id="dao" class="mvc1.member.dao.MemberDAO"/><jsp:useBean id="dto" class="mvc1.member.dto.MemberVO"/><jsp:setProperty name="dto" property="*"/>

<%boolean flag = dao.create(dto);if(flag == true) { response.sendRedirect(“listMember.jsp”);} else { response.sendRedirect(“inputMember.jsp”);}%>

createProc.jsp

Page 33: 이경화 (khlee@cherry.ssu.ac.kr)

else if (action.equals("read")) {int seq = Integer.parseInt(request.getParameter("seq"));dto = dao.read(seq);request.setAttribute("dto", dto);url = "/Demo8/readMember.jsp";RequestDispatcher dispatcher = request.getRequestDispatcher(url);dispatcher.forward(request, response);

}

33

Page 34: 이경화 (khlee@cherry.ssu.ac.kr)

else if (action.equals("update")) {int seq = Integer.parseInt(request.getParameter("seq"));

dto.setSeq(seq);dto.setUserid(request.getParameter("userid"));dto.setUsername(request.getParameter("username"));dto.setUserpw(request.getParameter("userpw"));

flag = dao.update(dto);if(flag == true) {

Vector v1 = dao.list();request.setAttribute("v1", v1);url = "/Demo8/listMember.jsp";

} else {dto = dao.read(seq);url = "/Demo8/readMember.jsp";

}RequestDispatcher dispatcher = request.getRequestDispatcher(url);dispatcher.forward(request, response);

}

34

Page 35: 이경화 (khlee@cherry.ssu.ac.kr)

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<% request.setCharacterEncoding("euc-kr"); %><jsp:useBean id="dao" class="mvc1.member.dao.MemberDAO"/><jsp:useBean id="dto" class="mvc1.member.dto.MemberVO"/><jsp:setProperty name="dto" property="*"/>

<%boolean flag = dao.update(dto);if(flag == true) {

String url = "listMember.jsp";response.sendRedirect(url);

} else {String url = "readMember.jsp?seq="+dto.getSeq();response.sendRedirect(response.encodeRedirectURL(url));

}%>

updateProc.jsp

Page 36: 이경화 (khlee@cherry.ssu.ac.kr)

else if (action.equals("delete")) {int seq = Integer.parseInt(request.getParameter("seq"));flag = dao.delete(seq);if(flag == true) {

Vector v1 = dao.list();request.setAttribute("v1", v1);url = "/Demo8/listMember.jsp";

} else {dto = dao.read(seq);url = "/Demo8/readMember.jsp";

}RequestDispatcher dispatcher = request.getRequestDispatcher(url);dispatcher.forward(request, response);

}}

36

Page 37: 이경화 (khlee@cherry.ssu.ac.kr)

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>

<jsp:useBean id="dao" class="mvc1.member.dao.MemberDAO"/><jsp:useBean id="dto" class="mvc1.member.dto.MemberVO"/><jsp:setProperty name="dto" property="*"/>

<%boolean flag = dao.delete(dto.getSeq());if(flag == true) {

String url = "listMember.jsp";response.sendRedirect(url);

} else {String url = "readMember.jsp?seq="+dto.getSeq();response.sendRedirect(response.encodeRedirectURL(url));

}%>

deleteProc.jsp

Page 38: 이경화 (khlee@cherry.ssu.ac.kr)

#. Settings web.xml

WebContent\WEB-INF\web.xml

<servlet><display-name>MVC2</display-name><servlet-name>MemberServlet</servlet-name><servlet-class>mvc2.member.controller.MemberServlet</servlet-class>

</servlet><servlet-mapping><servlet-name>MemberServlet</servlet-name><url-pattern>/action.do</url-pattern>

</servlet-mapping>

38

Page 39: 이경화 (khlee@cherry.ssu.ac.kr)

View

• JSP Source– 입력 폼 : inputMember.jsp– 회원 목록 : listMember.jsp– 회원 상세 : readMember.jsp– 회윈 등록 처리부 : createProc.jsp– 회원 수정 처리부 : updateProc.jsp– 회원 삭제 처리부 : deleteProc.jsp

Servlet

Page 40: 이경화 (khlee@cherry.ssu.ac.kr)

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%><html><head><title> MVC2 Member</title><script language="javascript"> function validCheck(f){ return true; } function goList(){ location.href="/LKH_PRJ/action.do?actionType=list"; }</script></head><body><h3>Demo8 : MVC2 member > 회원 입력폼 </h3><hr><table border="1" width="400"><form method="post" action="/LKH_PRJ/action.do" onSubmit="return validCheck(this)"><input type=hidden name="actionType" value="create">

inputMember.jsp

Page 41: 이경화 (khlee@cherry.ssu.ac.kr)

<tr> <td> 이름 </td> <td><input type="text" name="username"></td></tr> <tr> <td> 아이디 </td> <td><input type="text" name="userid"></td></tr> <tr> <td> 비밀번호 </td> <td><input type="text" name="userpw"></td></tr> <tr> <td colspan="2" align="center"> <input type="submit" value=" 저장 "> <input type="button" value=" 목록 " onClick="javascript:goList()"> </td> </tr></form></table> </body> </html>

Page 42: 이경화 (khlee@cherry.ssu.ac.kr)

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR” %><%@page import="java.util.*, mvc2.member.dto.*"%><% request.setCharacterEncoding("euc-kr"); %><jsp:useBean id="dao" class="mvc2.member.dao.MemberDAO"/><jsp:useBean id="dto" class="mvc2.member.dto.MemberVO"/><% Vector vt = new Vector();vt = dao.list(); %><html><head><title> MVC2 Member</title></head><body><h3>Demo8 : MVC2 member > 회원 목록 </h3><hr><TABLE width="550" border="1"><tr>

<td> 번호 </td><td> 이름 </td><td> 아이디 </td><td> 비밀번호 </td><td> 등록일 </td>

</tr>

listMember.jsp

Page 43: 이경화 (khlee@cherry.ssu.ac.kr)

<% if(vt.isEmpty()) { %> <tr><td colspan='5'> 등록된 회원이 없습니다 </center></td></tr><% } else { int viewNum = 1; for(int i=0; i<vt.size(); i++) { dto = (MemberVO)vt.get(i);%>

<tr><td> <a href="/LKH_PRJ/action.do?actionType=read&seq=<%=dto.getSeq()%>"> <%=viewNum%></a> </td> <td><%=dto.getUserid()%></td> <td><%=dto.getUsername()%></td> <td><%=dto.getUserpw()%></td> <td><%=dto.getRegdate()%></td></tr>

<% viewNum++; }}%>

Page 44: 이경화 (khlee@cherry.ssu.ac.kr)

</TABLE>

<a href="./inputMember.jsp"> 회원정보 입력 </a></BODY></HTML>

Page 45: 이경화 (khlee@cherry.ssu.ac.kr)

<%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR" import="mvc2.member.dto.*" %><% request.setCharacterEncoding("euc-kr"); %><jsp:useBean id="dao" class="mvc2.member.dao.MemberDAO"/><jsp:useBean id="dto" class="mvc2.member.dto.MemberVO"/><%request.setCharacterEncoding("euc-kr"); MemberDTO dto = (MemberDTO)request.getAttribute("dto"); %><html><head><title> MVC2 Member</title><script language="javascript">function goAction(actionPrm){

document.memForm.action="/LKH_PRJ/action.do"; document.memForm.actionType.value = actionPrm; document.memForm.submit();

}

readMember.jsp

Page 46: 이경화 (khlee@cherry.ssu.ac.kr)

function goList(){location.href="./listMember.jsp";

}</script></head><BODY><h3>Demo8 : MVC2 member > 회원정보 상세보기 </h3><hr><TABLE width="550" border="1"><form name="memForm" method="post"><input type=hidden name=seq value="<%=dto.getSeq()%>"><input type=hidden name="actionType"><tr><td> 번호 </td><td><%=dto.getSeq()%></td></tr><tr> <td> 아이디 </td> <td> <input type="text" name="userid" value="<%=dto.getUserid()%>"> </td></tr>

Page 47: 이경화 (khlee@cherry.ssu.ac.kr)

<tr> <td> 이름 </td> <td> <input type="text“ name="username“ value="<%=dto.getUsername()%>"> </td></tr><tr> <td> 비밀번호 </td> <td> <input type="text" name="userpw“ value="<%=dto.getUserpw()%>"> </td></tr><tr><td> 등록일 </td><td><%=dto.getRegdate()%></td></tr><tr> <td colspan="2" align="center"> <input type="button" value=" 수정 " onClick="javascript:goAction('update')"> <input type="button" value=" 삭제 " onClick="javascript:goAction('delete')"> <input type="button" value=" 목록 " onClick="javascript:goAction('iist')"> </td></tr></form> </TABLE> </BODY> </HTML>

Page 48: 이경화 (khlee@cherry.ssu.ac.kr)

Result

[ 리스트 ]

http://127.0.0.1/LKH_PRJ/Demo8/listMember.jsp

[ 등록 ]

[ 보기 , 수정 , 삭제 ]