Member.java
package ch08;
import java.util.Arrays;
public class Member {
private String id;
private String pwd;
private String name;
private String gender;
private String birthday;
private String email;
private String zipcode;
private String address;
private String detail_address;
private String hobby[];
private String job;
public Member() {}
public Member(String id, String pwd, String name, String gender, String birthday, String email, String zipcode,
String address, String detail_address, String[] hobby, String job) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.gender = gender;
this.birthday = birthday;
this.email = email;
this.zipcode = zipcode;
this.address = address;
this.detail_address = detail_address;
this.hobby = hobby;
this.job = job;
}
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 getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getZipcode() {
return zipcode;
}
public void setZipcode(String zipcode) {
this.zipcode = zipcode;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getDetail_address() {
return detail_address;
}
public void setDetail_address(String detail_address) {
this.detail_address = detail_address;
}
public String[] getHobby() {
return hobby;
}
public void setHobby(String[] hobby) {
this.hobby = hobby;
}
public String getJob() {
return job;
}
public void setJob(String job) {
this.job = job;
}
@Override
public String toString() {
return "Member [id=" + id + ", pwd=" + pwd + ", name=" + name + ", gender=" + gender + ", birthday=" + birthday
+ ", email=" + email + ", zipcode=" + zipcode + ", address=" + address + ", detail_address="
+ detail_address + ", hobby=" + Arrays.toString(hobby) + ", job=" + job + "]";
}
}
MemberMgr.java
package ch08;
import java.sql.*;
public class MemberMgr {
private DBConnectionMgr pool;
Connection con = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = null;
public MemberMgr() {
pool = DBConnectionMgr.getInstance();
}
public boolean checkId(String id) {
boolean flag = false;
try {
con = pool.getConnection();
sql = "select id from member where id = ?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
flag = rs.next();
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return flag;
}
public boolean insertMember(Member bean) {
boolean flag = false;
try {
con = pool.getConnection();
sql = "insert into member values(?,?,?,?,?,?,?,?,?,?,?)";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, bean.getId());
pstmt.setString(2, bean.getPwd());
pstmt.setString(3, bean.getName());
pstmt.setString(4, bean.getGender());
pstmt.setString(5, bean.getBirthday());
pstmt.setString(6, bean.getEmail());
pstmt.setString(7, bean.getZipcode());
pstmt.setString(8, bean.getAddress());
pstmt.setString(9, bean.getDetail_address());
String[] hobby = bean.getHobby();
char hb[] = {'0','0','0','0','0'};
String lists[] = {"인터넷","여행","게임","영화","운동"};
if(hobby != null) {
for(int i=0; i<hobby.length; i++) {
for(int j=0; j<lists.length; j++) {
if(hobby[i].equals(lists[j])) {
hb[j] = '1';
break;
}
}
}
}
pstmt.setString(10, new String(hb));
pstmt.setString(11, bean.getJob());
if(pstmt.executeUpdate() == 1) { // 반환값 : insert가 안되었을 때 0반환, insert가 잘 되었을 때 1반환
flag = true;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt);
}
return flag;
}
public boolean loginMember(String id, String pwd) {
boolean flag = false;
try {
con = pool.getConnection();
sql = "select id from member where id=? and pwd=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pwd);
rs = pstmt.executeQuery();
flag = rs.next();
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.freeConnection(con, pstmt, rs);
}
return flag;
}
}
DBConnectionMgr.java
/**
* Copyright(c) 2001 iSavvix Corporation (http://www.isavvix.com/)
*
* All rights reserved
*
* Permission to use, copy, modify and distribute this material for
* any purpose and without fee is hereby granted, provided that the
* above copyright notice and this permission notice appear in all
* copies, and that the name of iSavvix Corporation not be used in
* advertising or publicity pertaining to this material without the
* specific, prior written permission of an authorized representative of
* iSavvix Corporation.
*
* ISAVVIX CORPORATION MAKES NO REPRESENTATIONS AND EXTENDS NO WARRANTIES,
* EXPRESS OR IMPLIED, WITH RESPECT TO THE SOFTWARE, INCLUDING, BUT
* NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
* FITNESS FOR ANY PARTICULAR PURPOSE, AND THE WARRANTY AGAINST
* INFRINGEMENT OF PATENTS OR OTHER INTELLECTUAL PROPERTY RIGHTS. THE
* SOFTWARE IS PROVIDED "AS IS", AND IN NO EVENT SHALL ISAVVIX CORPORATION OR
* ANY OF ITS AFFILIATES BE LIABLE FOR ANY DAMAGES, INCLUDING ANY
* LOST PROFITS OR OTHER INCIDENTAL OR CONSEQUENTIAL DAMAGES RELATING
* TO THE SOFTWARE.
*
*/
package ch08;
import java.sql.*;
import java.util.Properties;
import java.util.Vector;
/**
* Manages a java.sql.Connection pool.
*
* @author Anil Hemrajani
*/
public class DBConnectionMgr {
private Vector connections = new Vector(10);
private String _driver = "oracle.jdbc.OracleDriver",
_url = "jdbc:oracle:thin:@localhost:1521:xe",
_user = "jsp",
_password = "1234";
private boolean _traceOn = false;
private boolean initialized = false;
private int _openConnections = 10;
private static DBConnectionMgr instance = null;
public DBConnectionMgr() {
}
/** Use this method to set the maximum number of open connections before
unused connections are closed.
*/
public static DBConnectionMgr getInstance() {
if (instance == null) {
synchronized (DBConnectionMgr.class) {
if (instance == null) {
instance = new DBConnectionMgr();
}
}
}
return instance;
}
public void setOpenConnectionCount(int count) {
_openConnections = count;
}
public void setEnableTrace(boolean enable) {
_traceOn = enable;
}
/** Returns a Vector of java.sql.Connection objects */
public Vector getConnectionList() {
return connections;
}
/** Opens specified "count" of connections and adds them to the existing pool */
public synchronized void setInitOpenConnections(int count)
throws SQLException {
Connection c = null;
ConnectionObject co = null;
for (int i = 0; i < count; i++) {
c = createConnection();
co = new ConnectionObject(c, false);
connections.addElement(co);
trace("ConnectionPoolManager: Adding new DB connection to pool (" + connections.size() + ")");
}
}
/** Returns a count of open connections */
public int getConnectionCount() {
return connections.size();
}
/** Returns an unused existing or new connection. */
public synchronized Connection getConnection()
throws Exception {
if (!initialized) {
Class c = Class.forName(_driver);
DriverManager.registerDriver((Driver) c.newInstance());
initialized = true;
}
Connection c = null;
ConnectionObject co = null;
boolean badConnection = false;
for (int i = 0; i < connections.size(); i++) {
co = (ConnectionObject) connections.get(i);
// If connection is not in use, test to ensure it's still valid!
if (!co.inUse) {
try {
badConnection = co.connection.isClosed();
if (!badConnection)
badConnection = (co.connection.getWarnings() != null);
} catch (Exception e) {
badConnection = true;
e.printStackTrace();
}
// Connection is bad, remove from pool
if (badConnection) {
connections.removeElementAt(i);
trace("ConnectionPoolManager: Remove disconnected DB connection #" + i);
continue;
}
c = co.connection;
co.inUse = true;
trace("ConnectionPoolManager: Using existing DB connection #" + (i + 1));
break;
}
}
if (c == null) {
c = createConnection();
co = new ConnectionObject(c, true);
connections.addElement(co);
trace("ConnectionPoolManager: Creating new DB connection #" + connections.size());
}
return c;
}
/** Marks a flag in the ConnectionObject to indicate this connection is no longer in use */
public synchronized void freeConnection(Connection c) {
if (c == null)
return;
ConnectionObject co = null;
for (int i = 0; i < connections.size(); i++) {
co = (ConnectionObject) connections.get(i);
if (c == co.connection) {
co.inUse = false;
break;
}
}
for (int i = 0; i < connections.size(); i++) {
co = (ConnectionObject) connections.get(i);
if ((i + 1) > _openConnections && !co.inUse)
removeConnection(co.connection);
}
}
public void freeConnection(Connection c, PreparedStatement p, ResultSet r) {
try {
if (r != null) r.close();
if (p != null) p.close();
freeConnection(c);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void freeConnection(Connection c, Statement s, ResultSet r) {
try {
if (r != null) r.close();
if (s != null) s.close();
freeConnection(c);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void freeConnection(Connection c, PreparedStatement p) {
try {
if (p != null) p.close();
freeConnection(c);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void freeConnection(Connection c, Statement s) {
try {
if (s != null) s.close();
freeConnection(c);
} catch (SQLException e) {
e.printStackTrace();
}
}
/** Marks a flag in the ConnectionObject to indicate this connection is no longer in use */
public synchronized void removeConnection(Connection c) {
if (c == null)
return;
ConnectionObject co = null;
for (int i = 0; i < connections.size(); i++) {
co = (ConnectionObject) connections.get(i);
if (c == co.connection) {
try {
c.close();
connections.removeElementAt(i);
trace("Removed " + c.toString());
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
}
private Connection createConnection()
throws SQLException {
Connection con = null;
try {
if (_user == null)
_user = "";
if (_password == null)
_password = "";
Properties props = new Properties();
props.put("user", _user);
props.put("password", _password);
con = DriverManager.getConnection(_url, props);
} catch (Throwable t) {
throw new SQLException(t.getMessage());
}
return con;
}
/** Closes all connections and clears out the connection pool */
public void releaseFreeConnections() {
trace("ConnectionPoolManager.releaseFreeConnections()");
Connection c = null;
ConnectionObject co = null;
for (int i = 0; i < connections.size(); i++) {
co = (ConnectionObject) connections.get(i);
if (!co.inUse)
removeConnection(co.connection);
}
}
/** Closes all connections and clears out the connection pool */
public void finalize() {
trace("ConnectionPoolManager.finalize()");
Connection c = null;
ConnectionObject co = null;
for (int i = 0; i < connections.size(); i++) {
co = (ConnectionObject) connections.get(i);
try {
co.connection.close();
} catch (Exception e) {
e.printStackTrace();
}
co = null;
}
connections.removeAllElements();
}
private void trace(String s) {
if (_traceOn)
System.err.println(s);
}
}
class ConnectionObject {
public java.sql.Connection connection = null;
public boolean inUse = false;
public ConnectionObject(Connection c, boolean useFlag) {
connection = c;
inUse = useFlag;
}
}
jsp계정_member.sql
create table member (
id varchar2(20) primary key,
pwd varchar2(20) not null,
name varchar2(20) not null,
gender char(1),
birthday char(6),
email varchar2(30),
zipcode char(5),
address varchar2(100),
detail_address varchar2(50),
hobby char(5),
job varchar2(30)
);
COMMENT ON COLUMN MEMBER.ID IS '회원아이디';
COMMENT ON COLUMN MEMBER.PWD IS '회원비밀번호';
COMMENT ON COLUMN MEMBER.NAME IS '회원이름';
COMMENT ON COLUMN MEMBER.GENDER IS '회원성별(1,2)';
COMMENT ON COLUMN MEMBER.BIRTHDAY IS '회원생일';
COMMENT ON COLUMN MEMBER.EMAIL IS '회원이메일';
COMMENT ON COLUMN MEMBER.ZIPCODE IS '우편번호';
COMMENT ON COLUMN MEMBER.ADDRESS IS '회원주소';
COMMENT ON COLUMN MEMBER.DETAIL_ADDRESS IS '회원상세주소';
COMMENT ON COLUMN MEMBER.HOBBY IS '회원취미';
COMMENT ON COLUMN MEMBER.JOB IS '회원직업';
member.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입</title>
<style>
body {background-color: rgb(229, 252, 178);}
table {
border: 1px solid;
border-collapse: collapse;
width: 1100px;
}
th {color:white;}
th, td {
border: 1px solid;
height:30px;
}
</style>
<script src="script.js?v=<%=System.currentTimeMillis() %>" charset="utf-8"></script>
<script src="//t1.daumcdn.net/mapjsapi/bundle/postcode/prod/postcode.v2.js"></script>
<script>
function findAddr() {
new daum.Postcode({
oncomplete: function(data) {
let roadAddr = data.roadAddress; // 도로명주소
let jibunAddr = data.jibunAddress; // 지번주소
let extraAddr = '';
document.getElementById("postcode").value = data.zonecode;
if(data.userSelectedType == 'R') { // 사용자가 도로명을 선택했을 때
if(data.bname != '') {
extraAddr += data.bname; // 동이름
}
if(data.buildingName != '') {
extraAddr += ', ' + data.buildingName;
}
roadAddr += extraAddr != '' ? '(' + extraAddr + ')' : '';
document.getElementById('addr').value = roadAddr;
} else {
if(data.buildingName != '') {
extraAddr += data.buildingName;
}
jibunAddr += extraAddr != '' ? '(' + extraAddr + ')' : '';
document.getElementById('addr').value = jibunAddr;
}
document.getElementById('detailAddr').focus();
}
}).open();
}
</script>
</head>
<body>
<form name="frm" method ="post" action="memberProc.jsp">
<table align="center">
<tr bgcolor="#476600">
<th colspan="3">회원가입</th>
</tr>
<tr>
<td>아이디</td>
<td>
<input name="id" onkeydown="inputIdChk();">
<input type="button" value="ID중복확인" onclick="idCheck(this.form.id.value);">
<input type="hidden" name="idBtnCheck" value="idUncheck">
</td>
<td>영문과 숫자로만 입력하세요</td>
</tr>
<tr>
<td>패스워드</td>
<td>
<input type="password" name="pwd">
</td>
<td>특수기호,영문,숫자가 각 1개 이상씩 들어가야 되고 8글자 이상</td>
</tr>
<tr>
<td>패스워드 확인</td>
<td>
<input type="password" name="repwd">
</td>
<td>위의 비밀번호를 한번 더 넣으세요</td>
</tr>
<tr>
<td>이름</td>
<td>
<input name="name">
</td>
<td>한글로 입력하세요</td>
</tr>
<tr>
<td>성별</td>
<td>
<input type="radio" name="gender" value="1" checked>남  
<input type="radio" name="gender" value="2" >여
</td>
<td>성별을 선택해 주세요</td>
</tr>
<tr>
<td>생년월일</td>
<td>
<input name="birthday">
</td>
<td>6글자로 입력. ex) 240315</td>
</tr>
<tr>
<td>E-mail</td>
<td>
<input name="email" size="40" >
</td>
<td>ex) email@naver.com</td>
</tr>
<tr>
<td>우편번호</td>
<td>
<input name="zipcode" id="postcode" readonly>
<input type="button" value="우편번호 찾기" onclick="findAddr();">
</td>
<td>우편번호를 검색하세요</td>
</tr>
<tr>
<td>주소</td>
<td>
<input name="address" id="addr" size="60" readonly><br/>
<input name="detail_address" id="detailAddr" placeholder="상세주소 넣기">
</td>
<td>상세주소가 있으면 입력해주세요</td>
</tr>
<tr>
<td>취미</td>
<td>
<input type="checkbox" name="hobby" value="인터넷" checked>인터넷
<input type="checkbox" name="hobby" value="여행">여행
<input type="checkbox" name="hobby" value="게임">게임
<input type="checkbox" name="hobby" value="영화">영화
<input type="checkbox" name="hobby" value="운동">운동
</td>
<td>취미를 선택하세요</td>
</tr>
<tr>
<td>직업</td>
<td>
<select name="job">
<option value="0" selected>선택하세요.
<option value="회사원">회사원
<option value="공무원">공무원
<option value="의사">의사
<option value="법조인">법조인
<option value="학생">학생
<option value="교수">교수
<option value="기타">기타
</select>
</td>
<td>직업을 선택하세요</td>
</tr>
<tr>
<td colspan="3" align="center">
<input type="button" value="회원가입" onclick="inputCheck();"> 
<input type="reset" value="다시쓰기"> 
<input type="button" value="로그인" onclick="location.href='login.jsp'">
</td>
</tr>
</table>
</form>
</body>
</html>
memberProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="mem" class="ch08.Member" />
<jsp:useBean id="mMgr" class="ch08.MemberMgr" />
<jsp:setProperty name="mem" property="*" />
<%
boolean result = mMgr.insertMember(mem);
String msg = "회원가입에 실패하였습니다.";
String location = "member.jsp";
if(result) {
msg = "회원가입을 하였습니다.";
location = "login.jsp";
}
%>
<script>
alert("<%=msg %>");
location.href="<%=location %>";
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String id = (String)session.getAttribute("idKey");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
if(id != null) {
%>
<b><%=id %></b>님 환영합니다.<p/>
즐거운 쇼핑 되세요<p/>
<a href="logout.jsp">로그아웃</a>
<%
} else {
%>
<form method="post" action="loginProc.jsp">
<table align="center">
<tr>
<th colspan="2"><h3>로그인</h3></th>
</tr>
<tr>
<td>아이디</td>
<td><input name="id" required></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="password" name="pwd" required></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="로그인"> 
<input type="button" value="회원가입" onclick="location.href='member.jsp'">
</td>
</tr>
</table>
</form>
<% } %>
</body>
</html>
loginProc.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="mMgr" class="ch08.MemberMgr" />
<%
String id = request.getParameter("id");
String pwd = request.getParameter("pwd");
boolean result = mMgr.loginMember(id, pwd);
String msg = "로그인에 실패하였습니다.";
if(result) {
session.setAttribute("idKey", id);
msg = "로그인에 성공하였습니다.";
}
%>
<script type="text/javascript">
alert("<%=msg %>");
location.href = "login.jsp";
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.invalidate();
%>
<script type="text/javascript">
alert("로그아웃 되었습니다");
location.href = "login.jsp";
</script>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
</body>
</html>
idCheck.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<jsp:useBean id="mMgr" class="ch08.MemberMgr"/>
<%
String id = request.getParameter("id");
boolean result = mMgr.checkId(id);
if(result) {
out.print(id + "는 이미 존재하는 ID입니다.");
} else {
out.print(id + "는 사용가능합니다");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<a href="" onclick="self.close()">닫기</a>
</body>
</html>
script.js
function inputIdChk() {
frm.idBtnCheck.value = "idUncheck";
}
function idCheck(id) {
if(id == "") {
alert("아이디를 입력하세요");
frm.id.focus();
return;
}
frm.idBtnCheck.value = "idCheck";
url = "idCheck.jsp?id=" + id;
window.open(url, "IDCheck", "width=300, height=150");
}
function inputCheck() {
if(frm.idBtnCheck.value != "idCheck") {
alert("아이디 중복버튼을 눌러 주세요");
return;
}
if(frm.pwd.value == "") {
alert("비밀번호를 입력하세요");
frm.pwd.focus();
return;
}
if(frm.pwd.value != frm.repwd.value) {
alert("비밀번호가 다릅니다 다시 입력하세요");
frm.repwd.focus();
return;
}
if(frm.name.value == "") {
alert("이름 입력하세요");
frm.name.focus();
return;
}
frm.submit();
}'Back-end > JSP' 카테고리의 다른 글
| [JSP] JSP를 이용하여 게시판 페이지 만들기 (0) | 2024.07.29 |
|---|---|
| [JSP] JSP를 이용하여 투표 페이지 만들기 (4) | 2024.07.24 |
| [JavaSpring] 세션과 쿠키 (0) | 2024.07.18 |
| [JavaSpring] Bean과 DBConnectionPool을 이용한 ORACLE연동 실습문제 (0) | 2024.07.17 |
| [JavaSpring] Bean과 DBConnectionPool을 이용한 ORACLE연동 (0) | 2024.07.17 |