2016. 09. 20. (Tue) 스물여덟 번째 수업!
아래와 같이 자동으로 생성된다.
package com.javalesson.source;
public class MemberVo {
private int num;
private String id;
private String pwd;
private String name;
private String email;
private String phone;
private String indate;
private int admin;
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getIndate() {
return indate;
}
public void setIndate(String indate) {
this.indate = indate;
}
public int getAdmin() {
return admin;
}
public void setAdmin(int admin) {
this.admin = admin;
}
}
2. MemberDetail 클래스 생성
MemberList page에서 수정버튼을 눌렀을 때, 수정할 사용자의 DB 내용을 실질적으로 가져오는 클래스이다.
SQL문으로 사용자의 정보를 가져와 MemberV에 담아 updateForm JSP 파일로 보낼 것이다.
아래의 내용을 살펴보자
package com.javalesson.source;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.annotation.WebServlet;
//DB 연관 라이브러리
import java.sql.DriverManager;//접속 DB 드라이버를 설정
import java.sql.Connection;//DB 접속해서
import java.sql.PreparedStatement;//쿼리를 실행하는 클래스
import java.sql.ResultSet;//쿼리의 결과값을 받는다.
import java.sql.SQLException;
@WebServlet("/MemberDetail")//web.xml을 대신해서 만들어진 것.
//servlet을 맵핑해서 요청하는 주소를 설정할 수 있다. ex) www.naver.com/news 에서 /news가 해당된다.
public class MemberDetail extends HttpServlet {
String url = "jdbc:mysql://localhost:3306/JAVA_LESSON?useUnicode=true&characterEncoding=utf8";//DB Server address (=mysql)
String uid = "root";
String upw = "mysql"; //cmd mysql -uroot -pmysql
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Connection conn = null;
String sql = "select * from member where num=?";
PreparedStatement pstmt = null; //sql을 실행
ResultSet rs = null; // 결과값을 받는다.
int num = Integer.parseInt(req.getParameter("num"));
MemberVo vo = null;
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection(url,uid,upw);
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, num);
rs = pstmt.executeQuery();
if(rs.next()){
vo = new MemberVo();
vo.setNum(rs.getInt("num"));
vo.setId(rs.getString("id"));
vo.setPwd(rs.getString("pwd"));
vo.setName(rs.getString("name"));
vo.setEmail(rs.getString("email"));
vo.setPhone(rs.getString("phone"));
vo.setIndate(rs.getString("indate"));
vo.setAdmin(rs.getInt("admin"));
req.setAttribute("member", vo);
//setAttribute는 포워드할 페이지에 파라미터를 Object 타입으로 보낸다.
RequestDispatcher dispatcher =
req.getRequestDispatcher("./updateForm.jsp");
dispatcher.forward(req, resp);
}else{
resp.sendRedirect("./MemberList?info=detail failed");
}
//dispatcher와 redirect의 차이
//redirect는 get방식으로 통신하기 때문에 파라미터를 url로 보낼 수 밖에 없다.
//-> url은 문자열 -> 파라미터의 데이터타입은 문자열
//redirect는 response 객체에 있다.
//dispatcher는 post방식으로 통신하기 때문에 파라미터를 해더로 보낼 수 있다.
//->header에 정보를 담기 때문에 Object타입으로 파라미터를 보낼 수 있다.
//->request.setAttribute("key",Object);
//dispatcher는 request 객체에 있다.
} catch (SQLException e){e.printStackTrace();
} catch (ClassNotFoundException e){e.printStackTrace();
} finally {
try {
if (rs!=null){rs.close();}
if (pstmt!=null){pstmt.close();}
if (conn!=null){conn.close();}
} catch (Exception e){e.printStackTrace();}
}
}
}//class
3. updateForm.jsp 생성
기존에 작성해 본 index.jsp와 비슷하다. 갱신될 내용을 입력받아 오는 역할을 한다.
아래의 예제를 살펴보자
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.javalesson.source.MemberVo" %>
<% MemberVo vo = (MemberVo)request.getAttribute("member"); %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>수정하기</title>
<link href="https://fonts.googleapis.com/css?family=Indie+Flower|Ropa+Sans" rel="stylesheet">
<!-- . <- class 접근, # <- id 접근 -->
<style type="text/css">
body{
font-family: 'Ropa Sans', sans-serif;
}
.btn-delete{
color: #f30b0b;
background-color: #c5c1c1;
padding: 1px 5px;
border: 1px solid gray;
}
.btn-delete:hover{
border: 1px solid black;
}
</style>
</head>
<body>
<h2>회원정보 수정 폼(update)</h2>
<h4>1. UPDATE MEMSET SET id=?,pwd=?,name=?,phone=?,email=?,admin=? WHERE num=?;</h4>
<h4>2. update 쿼리를 실행하는 MemberUpdate servlet을 호출한다.</h4>
<h4>3. 성공시 MemberList servlet을 호출, 실패시 회원정보 수정 form으로 돌아온다.</h4>
<form action="MemberUpdate" method="post">
<p>
<label for="uNum">num :</label>
<b><%out.print(vo.getNum());%></b><!-- <strong>과 동일 htlm5에서는 strong을 권장한다. -->
<input type="hidden" id="uNum" name="uNum" value="<%=vo.getNum()%>">
<!-- type="hidden" 눈에 보이지는 않지만 파라미터 값을 넘길 때 사용-->
</p>
<p>
<label for="uName">이름 :</label>
<input type="text" id="uName" name="uName" size="20" value="<%=vo.getName()%>">
</p>
<p>
<label for="uId">ID :</label>
<strong><%=vo.getId()%></strong> <!-- =은 out.print()와 동일 -->
<input type="hidden" name="uId" value="<%=vo.getId()%>">
</p>
<p>
<label for="uPass">Password :</label>
<input type="password" id="uPass" name="uPass" size="20" value="<%=vo.getPwd()%>">
</p>
<p>
<label for="uEmail">E-mail :</label>
<input type="email" id="uEmail" name="uEmail" size="20" value="<%=vo.getEmail()%>">
</p>
<p>
<label for="uPhone">Phone :</label>
<input type="text" id="uPhone" name="uPhone" size="20" value="<%=vo.getPhone()%>">
</p>
<p>
<label for="admin">관리자 </label>
<input type="radio" id="admin" name="uAdmin" value="1" <% if(vo.getAdmin()==1){ %>checked="checked"<%} %>>
<label for="nomal">일반 </label>
<input type="radio" id="nomal" name="uAdmin" value="0" <% if(vo.getAdmin()==0){ %>checked="checked"<%} %>>
</p>
<!-- 판넬 -->
<!-- name 속성은 form태그 안에서 유일한 값(=DB Primary Key) -->
<!-- id 속성은 html 문서 안에서 유일한 값 -->
<input type="submit" value="제출">
<!-- <a href="#" class="btn-delete"> 테스트</a>-->
<!-- class는 html 페이지에 여러개 존재할 수 있다. -->
<!-- class와 id는 태그의 이름이다. -->
</form>
</body>
</html>
기존에 접해보지 못했던 html5가 다소 어색하지만 어떠한 기능하는지, 어떤 클래스와 연동 되는지를 이해하자!!
4. MemberUpdate 클래스 생성
마지막으로 새롭게 입력받은 내용으로 DB를 갱신하기위한 클래스이다.
기존에 작성해 본 Add(Insert), List(select) 와 비슷하니 함께 이해하자.
결과물은 아래와 같이 출력된다.
이클립스를 실행할 때는 MemberList에서 실행하자.
(다른 클래스에서 실행하면 num값이 없어서 null오류가 발생된다)
num가 5인 테스트의 수정 버튼을 눌러서 updateForm으로 이동했다.
일부 내용을 수정하고 제출 버튼을 누르면 아래와 같이 수정된 자료를 볼 수 있다.
정보 업데이트 완료!
'IT story > JSP' 카테고리의 다른 글
D+31~33 Oracle (서버 설치하기, SQL SELECT문) (0) | 2016.09.28 |
---|---|
D+29 JDBC(Java DATABASE Connection, DELETE) (0) | 2016.09.26 |
D+27 JDBC(Java DATABASE Connection, INSERT) (0) | 2016.09.26 |
MySQL 환경변수 설정(PATH 설정, for mac OS) (0) | 2016.09.13 |
D+25, 26 MySQL 설치하기(for MAC) (0) | 2016.09.13 |