반응형
[1] 테스트 환경
hardware | |
cpu : intel i7-7700, gpu : intel hd 630, ram : ddr4 16GB, mainboard : samsung DB400S7A-Z51, secondary storage : 256GB SSD, 1TB HDD |
OS |
windows pro 64bits |
software |
jdk version 1.8.0_301 eclipse version 2021-09 (4.21.0) apache-tomcat version 9.0.54 |
[2] 강의 정리
()
sql 쿼리
create table circleMember(
name nvarchar2(10),
age nvarchar2(3),
phone nvarchar2(20),
email nvarchar2(20)
);
src>main>java
com.jsp.circle
CircleMemberDTO.java
package com.jsp.circle;
public class CircleMemberDTO {
// 계층간 데이터 교환을 위한 자바빈 클래스
private String name;
private int age;
private String phone;
private String email;
// 기본생성자
public CircleMemberDTO() {}
public CircleMemberDTO(String name, int age, String phone, String email) {
super();
this.name = name;
this.age = age;
this.phone = phone;
this.email = email;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
src>main>java
com.jsp.circle
CircleMemberDAO.java
package com.jsp.circle;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
public class CircleMemberDAO {
// 싱글톤 : 단 하나의 객체만 생성하는 것
private CircleMemberDAO() {}
private static CircleMemberDAO instance = new CircleMemberDAO();
public static CircleMemberDAO getInstance() {
return instance;
}
// 싱글톤을 쓰는 이유
// 고정된 메모리 영역을 얻으면서 한번의 new로 인스턴스를 사용하기 때문에
// 메모리낭비를 방지할 수 있다. 또한 싱글톤으로 만들어진 클래스의 인스턴스는
// 전역인스턴스 이기 때문에 다른 클래스의 인스턴스들이 공유하기 쉽니다.
// DBCP(DataBase Connection Pool) 처럼 공통된 객체를
// 여러개 생성해서 사용해야 하는 상황에서 많이 사용한다.
// 데이터를 넣는 메소드
public int insertCircle(CircleMemberDTO dto) {
int result = 0;
Connection conn = null;
PreparedStatement pstmt = null;
// 자바에서 데이터베이스 쿼리문을 전송할때 사용할 수 있는
// 인터페이스는 Statement, PreparedStatement 2가지가 있다.
// PreparedStatement 는 Statement 를 상속받은 인터페이스
// 1. Statement의 기능향상 (여러번 수행할때 빠른속도)
// 2. 코드안정성과 가독성이 높다.
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "C##JSPUSER";
String upw = "jsp123";
String query = "insert into circleMember(name, age, phone, email) "
+ "values(?, ?, ?, ?)";
// 변수가 들어갈 자리는 ?로 써준다.
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(query);
pstmt.setString(1, dto.getName());
pstmt.setInt(2, dto.getAge());
pstmt.setString(3, dto.getPhone());
pstmt.setString(4, dto.getEmail());
result = pstmt.executeUpdate();
// 반환결과는 레코드(행)의 수
// 아무 리턴이 없으면 0
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt != null)pstmt.close();
if(conn != null)conn.close();
}catch(Exception e2) {}
}
return result;
}
// 데이터를 얻는 메소드
public ArrayList<CircleMemberDTO> circleList(){
ArrayList<CircleMemberDTO> list = new ArrayList<CircleMemberDTO>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
String driver = "oracle.jdbc.OracleDriver";
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String uid = "C##JSPUSER";
String upw = "jsp123";
String query = "select * from circleMember";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, uid, upw);
pstmt = conn.prepareStatement(query);
rs = pstmt.executeQuery();
while(rs.next()) {
String name = rs.getString("name");
int age = rs.getInt("age");
String phone = rs.getString("phone");
String email = rs.getString("email");
list.add(new CircleMemberDTO(name, age, phone, email));
}
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(rs != null)rs.close();
if(pstmt != null)pstmt.close();
if(conn != null)conn.close();
}catch(Exception e2) {}
}
return list;
}
}
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>
<script>
function joinFormCheck(){
var id = document.joinForm.id.value;
var pw = document.joinForm.pw.value;
var pwCheck = document.joinForm.pwCheck.value;
var name = document.joinForm.name.value;
if(id == null || id == ""){
alert('아이디는 필수사항 입니다.');
document.joinForm.id.focus();
return;
}
if(id.length < 4){
alert('아이디는 4글자이상 이어야 합니다.');
document.joinForm.id.focus();
return;
}
if(pw == null || pw == ""){
alert('비밀번호는 필수사항 입니다.');
document.joinForm.pw.focus();
return;
}
if(pw != pwCheck){
alert('비밀번호가 일치하지 않습니다.');
document.joinForm.pw.focus();
return;
}
if(name == null || name == ""){
alert('이름은 필수사항 입니다.');
document.joinForm.name.focus();
return;
}
document.joinForm.submit();
}
</script>
</head>
<body>
<%--
회원가입 폼 만들기
(아이디, 비밀번호, 비밀번호 확인, 이름, 이메일, 주소)
자바스크립트를 사용해서 유효성검사 후
joinCheck.jsp로 전송하기
--%>
<h2>회원가입</h2>
<form name="joinForm" action="joinCheck.jsp" method="post">
아이디 : <input type="text" name="id" size="10"><br>
비밀번호 : <input type="password" name="pw" size="10"><br>
비밀번호 확인 : <input type="password" name="pwCheck" size="10"><br>
이름 : <input type="text" name="name" size="10"><br>
이메일 : <input type="text" name="email" size="20"><br>
주소 : <input type="text" name="address" size="20"><br>
<input type="button" value="회원가입" onclick="joinFormCheck()">
</form>
</body>
</html>
joinCheck.jsp
<%@page import="com.jsp.members.MembersDAO"%>
<%@ 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>
<%--
1. 넘어온 데이터 받기 (DTO 객체 생성)
2. DAO 객체 생성 후 confirmId 메소드 호출해서
같은 아이디가 없을 경우 insertMember 메소드 호출해서
회원가입하기. 회원가입 후 로그인 페이지로 이동하기.
--%>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="dto" class="com.jsp.members.MembersDTO" />
<jsp:setProperty property="*" name="dto"/>
<%--
property 속성값을 *로 주면 넘어오는 파라미터의 값이 프로퍼티로 셋팅된다.
주의할 점은 폼으로부터 넘어오는 파라미터의 이름과 프로퍼티의 이름이 일치해야 한다는 것이다.
--%>
<%
MembersDAO dao = MembersDAO.getInstance();
if(dao.confirmId(dto.getId()) == 1){
// 아이디를 체크해서 같은 아이디가 있다면
%>
<script type="text/javascript">
alert('아이디가 이미 존재합니다.');
history.back();
</script>
<%
}else{ // 같은 아이디가 없다면
int result = dao.insertMember(dto); // DB에 데이터 넣기
if(result == 1){
%>
<script>
alert('회원가입을 축하합니다.');
window.location = 'login.jsp';
</script>
<%
}else{
%>
<script>
alert('회원가입에 실패했습니다.');
window.location = 'join.jsp';
</script>
<%
}
}
%>
</body>
</html>
login.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>
<%--
로그인 폼 만들기 (아이디, 비밀번호)
--%>
<form action="loginCheck.jsp" method="post">
아이디 : <input type="text" name="id" size="10"><br>
비밀번호 : <input type="password" name="pw" size="10"><br>
<input type="submit" value="로그인">
</form>
</body>
</html>
loginCheck.jsp
<%@page import="com.jsp.members.MembersDAO"%>
<%@ 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>
<%--
1. 아이디 비밀번호 받기
2. DAO 객체 생성 후 userCheck 메소드 호출하기
3. 결과값 받아 아이디 비밀번호가 맞으면
session 객체에 id값을 세션값으로 설정하기
--%>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String pw = request.getParameter("pw");
MembersDAO dao = MembersDAO.getInstance();
int result = dao.userCheck(id, pw);
if(result == -1){ // 아이디가 없는경우(회원이 아닌경우)
%>
<script>
alert('아이디가 존재하지 않습니다.');
history.back();
</script>
<%
}else if(result == 0){ // 비밀번호가 틀린경우
%>
<script>
alert('비밀번호가 틀립니다.');
history.back();
</script>
<%
}else if(result == 1){ // 아이디 비밀번호가 맞는경우
session.setAttribute("id", id);
response.sendRedirect("main.jsp");
}
%>
</body>
</html>
logout.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>
<%--
로그아웃하기
login.jsp 로 리다이렉트 하기
--%>
<%
session.invalidate();
%>
<script>
alert('로그아웃 되었습니다.');
window.location = 'login.jsp';
</script>
</body>
</html>
main.jsp
<%@page import="com.jsp.members.MembersDTO"%>
<%@page import="com.jsp.members.MembersDAO"%>
<%@ 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>
<%--
1. session 객체에 있는 id 꺼내기
2. DAO 객체 생성 후 getMember 메소드 호출하기
3. DTO 객체에 이름(name)을 꺼내서 이름 출력하기
--%>
<%
if(session.getAttribute("id") == null){
response.sendRedirect("login.jsp");
return;
}
String id = (String)session.getAttribute("id");
MembersDAO dao = MembersDAO.getInstance();
MembersDTO dto = dao.getMember(id);
%>
<h1><%=dto.getName() %>님 안녕하세요.</h1>
<a href="logout.jsp">로그아웃</a>
<a href="modify.jsp">회원 정보수정</a>
<a href="delete.jsp">회원탈퇴</a>
</body>
</html>
modify.jsp
<%@page import="com.jsp.members.MembersDTO"%>
<%@page import="com.jsp.members.MembersDAO"%>
<%@ 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>
<%--
수정 폼 만들기
(비밀번호, 이메일, 주소)
1. 세션에 있는 id 꺼내기
2. DAO객체 생성후 getMember 메소드 호출하여 DTO 객체얻기
3. 수정폼 만들기
--%>
<%
String id = (String)session.getAttribute("id");
MembersDAO dao = MembersDAO.getInstance();
MembersDTO dto = dao.getMember(id);
%>
<h2><%=dto.getName() %>님의 회원 정보 수정</h2>
<form name="modifyForm" action="modifyCheck.jsp" method="post">
아이디 : <%=dto.getId() %><br>
비밀번호 : <input type="password" name="pw" size="10"><br>
비밀번호 확인 : <input type="password" name="pwCheck" size="10"><br>
이름 : <%=dto.getName() %><br>
이메일 : <input type="text" name="email" value="<%=dto.getEmail() %>" ><br>
주소 : <input type="text" name="address" value="<%=dto.getAddress()%>"><br>
<input type="submit" value="정보수정">
</form>
</body>
</html>
modifyCheck.jsp
<%@page import="com.jsp.members.MembersDAO"%>
<%@ 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>
<%
request.setCharacterEncoding("UTF-8");
%>
<jsp:useBean id="dto" class="com.jsp.members.MembersDTO" />
<jsp:setProperty property="*" name="dto"/>
<%
String id = (String)session.getAttribute("id");
dto.setId(id);
MembersDAO dao = MembersDAO.getInstance();
int result = dao.updateMember(dto);
if(result == 1){
%>
<script>
alert('정보수정 되었습니다.');
window.location = 'main.jsp';
</script>
<%
}else{
%>
<script>
alert('정보수정 실패입니다.');
history.back();
</script>
<%
}
%>
</body>
</html>
반응형
'강의 > JSP 강의 정리' 카테고리의 다른 글
JSP 강의 정리 19일차 (0) | 2022.08.01 |
---|---|
JSP 강의 정리 18일차 (0) | 2022.07.29 |
JSP 강의 정리 16일차 (0) | 2022.07.27 |
JSP 강의 정리 15일차 (0) | 2022.07.26 |
JSP 강의 정리 14일차 (0) | 2022.07.25 |