본문 바로가기
강의/JSP 강의 정리

JSP 강의 정리 17일차

by 리드민 2022. 7. 28.
반응형

[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>
	&nbsp;&nbsp;&nbsp;&nbsp;
	
	<a href="modify.jsp">회원 정보수정</a>
	&nbsp;&nbsp;&nbsp;&nbsp;
	
	<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