JSP/연습

회원가입 만들기(수업시간 평가)

SEOKIHOUSE 2023. 7. 2. 22:26

 

 

bandicam 2023-07-02 22-24-55-762.mp4
1.82MB
회원가입 쿼리.txt
0.00MB
eval_app13.zip
2.73MB

<%@ 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>
		window.onload = function() {
			let inputname = document.querySelector("input[name=name]");
			let inputid = document.querySelector("input[name=id]");
			let inputpw = document.querySelector("input[name=pw]");
			let inputtel = document.querySelector("input[name=tel]");
			let inputaddr = document.querySelector("input[name=addr]");
			let storeFirstId ="";
			let storeFirstTel ="";
			
			
			const idbtn = document.querySelector("#idbtn");
			
			idbtn.addEventListener("click", function() {
				const xhttp = new XMLHttpRequest();
				xhttp.onreadystatechange = function() {
					if(xhttp.readyState ===4 && xhttp.status ===200) {
						const getMsg = this.responseText;
						let checkIdDiv = document.querySelector("#checkId");
						
						if(getMsg == "false") {
							checkIdDiv.innerHTML ="중복된아이디입니다";
							checkIdDiv.style.color ="red";
						}else {
							checkIdDiv.innerHTML ="사용가능한 아이디입니다";
							checkIdDiv.style.color ="green";
							storeFirstId = inputid.value;
						}
					}
				}
				xhttp.open("POST", "check", true);
				xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				const data = "id="+inputid.value;
				xhttp.send(data);
			})
			

			const telbtn = document.querySelector("#telbtn");
			telbtn.addEventListener("click", function() {
				const xhttp = new XMLHttpRequest();
				xhttp.onreadystatechange = function() {
					if(xhttp.readyState ===4 && xhttp.status ===200) {
						const getMsgs = this.responseText;
						let checkTelDiv = document.querySelector("#checkTelDiv");
						
						if(getMsgs == "false") {
							checkTelDiv.innerHTML ="중복된번호입니다";
							checkTelDiv.style.color ="red";
							
						}else {
							checkTelDiv.innerHTML ="사용가능한 번호입니다";
							checkTelDiv.style.color ="green";
							storeFirstTel =inputtel.value;
						}
					}
				}
				xhttp.open("POST", "check", true);
				xhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
				const data = "tel="+inputtel.value;
				xhttp.send(data);
			})
			
			const subbtn = document.querySelector("#subbtn");
			subbtn.addEventListener("click", function(event) {
				event.preventDefault();
				
				if(inputname.value.trim() =="") {
					alert("이름을 입력하세요");
					inputname.focus();
					return;
				}
				if(inputid.value.trim() =="") {
					alert("아이디를 입력하세요");
					inputid.focus();
					return;
				}
				if(inputpw.value.trim() =="") {
					alert("비밀번호를 입력하세요");
					inputpw.focus();
					return;
				}
				if(inputtel.value.trim() =="") {
					alert("전화번호를 입력하세요");
					inputtel.focus();
					return;
				}
				if(inputaddr.value.trim() =="") {
					alert("주소를 입력하세요");
					inputaddr.focus();
					return;
				}
				
				if((storeFirstId != inputid.value) || (storeFirstTel != inputtel.value) ) {
					alert("중복되었거나 중복체크를 눌러야합니다");
					return;
				}
					
				alert("회원가입 완료");
				frm.submit();
			})
		}
		
	</script>
</head>
<body>
	<h1>회원가입</h1>
	<hr>
	<form name="frm" action="check" method="POST">
		이름<input type="text" name="name" placeholder="이름을 입력하세요"><br>
		아이디<input type="text" name="id" placeholder="아이디를 입력하세요">
		<button id="idbtn" type="button">중복확인</button><br>
		<div id="checkId"></div>
		비밀번호<input type="text" name="pw" placeholder="비밀번호를 입력하세요"><br>
		전화번호<input type="text" name="tel" placeholder="전화번호를 입력하세요">
		<button id="telbtn" type="button">중복확인</button><br>
		<div id="checkTelDiv"></div>
		주소<input type="text" name="addr" placeholder="주소를 입력하세요"><br>
		<input id="subbtn" type="submit" value="회원가입">
	</form>
</body>
</html>
package servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import db.MemberDao;
import service.CheckDupService;
import vo.MemberVo;

@WebServlet("/check")
public class CheckServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		String name = request.getParameter("name");
		String id = request.getParameter("id");
		String pw = request.getParameter("pw");
		String tel = request.getParameter("tel");
		String addr = request.getParameter("addr");
		
		CheckDupService cds = new CheckDupService();
		int idCount =cds.checkId(id);
		int telCount =cds.checkTel(tel);
		
		PrintWriter out = response.getWriter();
		
		if(idCount ==1 || telCount ==1) {
			out.print("false");
			return;
		}
		
		if(name != null && id != null && pw!= null && tel != null && addr != null) {
			MemberVo mv = new MemberVo(name, id, pw, tel, addr);
			MemberDao md = new MemberDao();
			int result = md.insert(mv);
			
			if(result == 1) {
				out.print("true");
				response.sendRedirect("sucess.jsp");
			}
		}
		
		
	}

}
package service;

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

public class CheckDupService {
	public Connection conn;
	public PreparedStatement stmt;
	public ResultSet rs;
	
	public CheckDupService() {
		try {
			Class.forName("org.mariadb.jdbc.Driver");
			String url ="jdbc:mariadb://localhost:3306/green01";
			conn = DriverManager.getConnection(url,"root","1234");
			
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public int checkId(String id) {
		String query = "SELECT COUNT(*) FROM tbl_member13 where id=?";
		int count =0;
		try {
			stmt = conn.prepareStatement(query);
			stmt.setString(1, id);
			rs = stmt.executeQuery();
			rs.next();
			count = rs.getInt("COUNT(*)");
		}catch(Exception e) {
			e.printStackTrace();
		}
		return count;
	}
	
	public int checkTel(String tel) {
		String query = "SELECT COUNT(*) FROM tbl_member13 where tel=?";
		int count =0;
		try {
			stmt = conn.prepareStatement(query);
			stmt.setString(1, tel);
			rs = stmt.executeQuery();
			rs.next();
			count = rs.getInt("COUNT(*)");
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(conn != null)conn.close();
				if(stmt != null)stmt.close();
				if(rs != null)rs.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return count;
	}
	
}
package db;

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

import vo.MemberVo;

public class MemberDao {
	Connection conn;
	public PreparedStatement stmt;
	public ResultSet rs;
	
	public MemberDao() {
		try {
			Class.forName("org.mariadb.jdbc.Driver");
			String url ="jdbc:mariadb://localhost:3306/green01";
			conn = DriverManager.getConnection(url,"root","1234");
			
		}catch(Exception e) {
			e.printStackTrace();
		}
	}
	
	public int insert(MemberVo mv) {
		String query = "INSERT INTO tbl_member13 VALUES (?,?,?,?,?)";
		int count =0;
		try {
			stmt = conn.prepareStatement(query);
			stmt.setString(1, mv.getName());
			stmt.setString(2, mv.getId());
			stmt.setString(3, mv.getPw());
			stmt.setString(4, mv.getTel());
			stmt.setString(5, mv.getAddr());
			
			count =stmt.executeUpdate();
		}catch(Exception e) {
			e.printStackTrace();
		}finally {
			try {
				if(conn != null)conn.close();
				if(stmt != null)stmt.close();
				if(rs != null)rs.close();
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		return count;
	}
}
package vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class MemberVo {
	private String name;
	private String id;
	private String pw;
	private String tel;
	private String addr;
}