Eggs Sunny Side Up
본문 바로가기
Web/JSP_Servlet

Ajax_이메일 중복 확인

by guswn100059 2023. 5. 9.

Ajax 기본

AjaxController

package kr.smhrd.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;

public class AjaxCon implements Controller {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		System.out.println("요청이 도착함.");
		
		// 1. 데이터 수집
		request.setCharacterEncoding("UTF-8");
		
		String data = request.getParameter("data");
		
		System.out.println(data);
		
		// 2. 기능 구현
		
		// 비동기 통신을 할 때는 페이지 이동 X
		// 필요한 데이터만 응답
		// 3. 데이터 응답
		// ajax는 utf-8만 가능
		response.setCharacterEncoding("UTF-8");
		
		PrintWriter out = response.getWriter();
		
		// 회원 전체 목록을 json 형식
		MemberDAO dao = new MemberDAO();
		List<Member> list = dao.select();
		
		// Java 객체를 Json으로 변환시키기위한 Gson 라이브러리
		// 1) Gson 객체 생성
		Gson gson = new Gson();
		
		// 2) Java Object를 JSON
		String json = gson.toJson(list);
		
		// json 데이터를 응답하기.
//		String json = "{\"key\" : \"value\"}";
		
		out.print(json);
		
		return null;
	}

}

 

FrontController

package kr.smhrd.frontController;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;

import kr.smhrd.controller.AjaxCon;
import kr.smhrd.controller.Controller;
import kr.smhrd.controller.DeleteController;
import kr.smhrd.controller.GoBoardMainCon;
import kr.smhrd.controller.GoMainCon;
import kr.smhrd.controller.GoSelectController;
import kr.smhrd.controller.GoSuccessCon;
import kr.smhrd.controller.GoUpdateController;
import kr.smhrd.controller.GoWriterBoardCon;
import kr.smhrd.controller.JoinCon;
import kr.smhrd.controller.LoginCon;
import kr.smhrd.controller.LogoutController;
import kr.smhrd.controller.UpdateController;
import kr.smhrd.controller.ViewBoardCon;
import kr.smhrd.controller.WriteBoardController;
import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;

// 모든 요청을 받을 수 있도록 url-mapping을 *로 지정
// @WebServlet("*.do") => .do로 끝나는 모든 요청
@WebServlet("*.do")
public class FrontController extends HttpServlet {
	
	private HashMap<String, Controller> mappings;
	
	@Override
	public void init() throws ServletException {
		// Servlet이 메모리에 할당 됐을 때, 
		// 단 1번 실행
		// Servlet에서 필요한 변수를 세팅, 내부 값 초기화
		
		// URL-Mapping <=> POJO
		// HashMap 자료구조 (python dict)
		// => key : value 구조
		// URL-Mapping : POJO
		
		mappings = new HashMap<String, Controller>();
		
		// hashmap에 데이터 집어넣기
		// 새로운 기능이 생기면 put으로 추가만 해주자.
		mappings.put("/goMain.do", new GoMainCon());
		mappings.put("/goSuccess.do", new GoSuccessCon());
		mappings.put("/join.do", new JoinCon());
		mappings.put("/login.do", new LoginCon());
		mappings.put("/logout.do", new LogoutController());
		mappings.put("/update.do", new UpdateController());
		mappings.put("/goSelect.do", new GoSelectController());
		mappings.put("/goUpdate.do", new GoUpdateController());
		mappings.put("/delete.do", new DeleteController());
		mappings.put("/goBoardMain.do", new GoBoardMainCon());
		mappings.put("/goWriterBoard.do", new GoWriterBoardCon());
		mappings.put("/writeBoard.do", new WriteBoardController());
		mappings.put("/viewBoard.do", new ViewBoardCon());
		mappings.put("/ajax.do", new AjaxCon());
		
	}
	
	
	
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// url은 아래 주소 전체를 나타냄
		// http://localhost:8081/MessageSystem/join?email=1234
		
		// 1. 요청 구분
		// uri는 /MessageSystem/join 를 나타냄
		String uri = request.getRequestURI();
		
		// /MessageSystem 를 꺼내오는 방법
		String cpath = request.getContextPath();
		
		// /join만 떼오기
		// String.subString(); => 문자열 슬라이싱
		// ex) 안녕하세요.
		// ex) String.subString(2); => "하세요."
		// ex) String.subString(2, 3); => "하"
		String command = uri.substring(cpath.length());
		
		System.out.println(command);
		
		
		// ==========================================================
		
		Controller con = null; // 업캐스팅을 이용한 중복제거
		
		// 2. 요청에 따라서 기능을 실행
		// 각각의 url mapping에 따라서 알맞는 POJO(class)를 찾아오기
		// 자바의 자료구조
		String nextView = null;
		
		con = mappings.get(command);
		
		
		// ================================================================
		
		if(con != null) {
			
			nextView = con.execute(request, response);
			
		}
		
		// 3. 페이지 이동
		// 예외처리용
		if(nextView != null) {
			// redirect vs forward 구분하기 위해서 규칙필요
			// 앞으로 redirect 요청은 반드시 앞에 redirect:/를 붙이자.
			// goMain.do => redirect:/goMain.do
			if(nextView.contains("redirect:/")) {
				// nextView = "redirect:/goMain.do"
				// nextView.split(":/"); => ["redirect", "goMain.do"]
				response.sendRedirect(nextView.split(":/")[1]);	
			}else {
				RequestDispatcher rd = 
						request.getRequestDispatcher("WEB-INF/views/"+nextView+".jsp");
				rd.forward(request, response);
			}
		}
		
	}

}

 

Ajax.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>
	
	<input type="text" name="data">
	<!-- button => input type="submit" -->
	<button id="btn" type="button">전송</button>
	
	<script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
	<script type="text/javascript">
		// 비동기 통신(Ajax) => jQuery 라이브러리 필요
		
		// 1. button 태그를 선택
		// var btn = document.getElementById("btn"); => 자동완성안되서 화딱지
		var btn = $('#btn');
		var input = $('input[name=data]');
		
		// 2. button 태그에 이벤트 부여
		btn.on("click", request);
		
		var result = "";
		
		// 호이스팅
		function request() {
			console.log('클릭!')
			
			// 3. ajax를 사용해서 비동기 방식으로 요청 보내기
			$.ajax({
				url : 'ajax.do', // 어디로?
				type : 'post', // Get? or Post?
				data : {
					// data : "data1=value1&data2=value2..."
					// key : value
					"data" : input.val()
					
				}, // 보낼 데이터
				dataType : "json", // 응답받는 데이터 형식이 무엇인지
				success : function(res){
					// 요청이 성공하면 실행될 콜백함수
					// res >> response
					console.log(res);
					result = res; // 응답입니다
					
					// 응답시점이 코드 실행보다 느릴 수 있으므로
					// 응답결과를 사용할 때는 가급적 success 안에서 할 것.
					console.log("ajax 끝 : "+result); // 응답입니다
					
				},
				error : function(e){
					// 요청이 실패하면 실행될 콜백함수
					alert("요청 실패!");
				}
			});
			
		}
	
	</script>
	
	
</body>
</html>

 

 


 

이메일 중복 확인

main.jsp

<%@page import="kr.smhrd.entity.Member"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
	<head>
		<title>Forty by HTML5 UP</title>
		<meta charset="UTF-8" />
		<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
		<!-- http://localhost:8081/MessageSystem/assets/css/main.css -->
		<link rel="stylesheet" href="assets/css/main.css" />
	</head>
	<body>
	<%
		// session에 있는 사용자 정보 꺼내기
		Member user = (Member)session.getAttribute("user");
	%>

		<!-- Wrapper -->
			<div id="wrapper">

				<!-- Header -->
					<header id="header" class="alt">
						<a href="index.html" class="logo"><strong>Forty</strong> <span>by HTML5 UP</span></a>
						<nav>
								<%if(user == null) {%>
								<a href="#menu">로그인</a>
								<%}else { %>
								
									<%if(user.getEmail().equals("admin")){%>
									<a href="goSelect.do">회원관리</a>
									<%}else {%>
									<a href="goUpdate.do">개인정보수정</a>
									<%}%>
								
								<a href="logout.do">로그아웃</a>
								<%} %>
							<!-- 로그인 후 Logout.jsp로 이동할 수 있는'로그아웃'링크와 '개인정보수정'링크를 출력하시오. -->
						</nav>
					</header>

				<!-- Menu -->
					<nav id="menu">	
						<ul class="links">
							<li><h5>로그인</h5></li>
								<form action="login.do" method="post">
									<li><input name="email" type="text"  placeholder="Email을 입력하세요"></li>
									<li><input name="pw" type="password"  placeholder="PW를 입력하세요"></li>
									<li><input type="submit" value="LogIn" class="button fit"></li>
								
								</form>
						</ul>
						<ul class="actions vertical">
							<li><h5>회원가입</h5></li>
								<form action="join.do" method="post">
									<li>
									<input id="check" name="email" type="text"  placeholder="Email을 입력하세요">
									<!-- 이메일 중복체크 결과를 출력하기 -->
									<p id="result"></p>
									</li>
									<li><input name="pw" type="password"  placeholder="PW를 입력하세요"></li>
									<li><input name="tel" type="text"  placeholder="전화번호를 입력하세요"></li>
									<li><input name="address" type="text"  placeholder="집주소를 입력하세요"></li>
									<li><input type="submit" value="JoinUs" class="button fit"></li>
								</form>
						</ul>
					</nav>			
				<!-- Banner -->
					<section id="banner" class="major">
						<div class="inner">
							<header class="major">
								<%if(user == null){ %>
										<h1>로그인 한 세션아이디를 출력해주세요</h1>
								<%}else { %>
								<!-- 로그인 후 로그인 한 사용자의 세션아이디로 바꾸시오.
									 ex)smart님 환영합니다 -->
										<h1><%=user.getEmail() %>님, 환영합니다.</h1>
								<%} %>
							</header>
							<div class="content">
								<p>아래는 지금까지 배운 웹 기술들입니다.<br></p>
								<ul class="actions">
									<li><a href="#one" class="button next scrolly">확인하기</a></li>
								</ul>
							</div>
						</div>
					</section>

				<!-- Main -->
					<div id="main">

						<!-- One -->
							<section id="one" class="tiles">
								<article>
									<span class="image">
										<img src="images/pic01.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">HTML</a></h3>
										<p>홈페이지를 만드는 기초 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic02.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">CSS</a></h3>
										<p>HTML을 디자인해주는 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic03.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Servlet/JSP</a></h3>
										<p>Java를 기본으로 한 웹 프로그래밍 언어/스크립트 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic04.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">JavaScript</a></h3>
										<p>HTML에 기본적인 로직을 정의할 수 있는 언어</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic05.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">MVC</a></h3>
										<p>웹 프로젝트 중 가장 많이 사용하는 디자인패턴</p>
									</header>
								</article>
								<article>
									<span class="image">
										<img src="images/pic06.jpg" alt="" />
									</span>
									<header class="major">
										<h3><a href="#" class="link">Web Project</a></h3>
										<p>여러분의 최종프로젝트에 웹 기술을 활용하세요!</p>
									</header>
								</article>
							</section>
					<!-- Two -->
							<section id="two">
								<div class="inner">
									<header class="major">
										<h2>나에게 온 메세지 확인하기</h2>
									</header>
									<p></p>
									<ul class="actions">
										<li>로그인을 하세요.</li>
										<li><a href="#" class="button next scrolly">전체삭제하기</a></li>
									</ul>
								</div>
							</section>

					</div>

				<!-- Contact -->
					<section id="contact">
						<div class="inner">
							<section>
								<form>
								<div class="field half first">
										<label for="name">Name</label>
										<input type="text"  id="name" placeholder="보내는 사람 이름" />
									</div>
									<div class="field half">
										<label for="email">Email</label>
										<input type="text"  id="email" placeholder="보낼 사람 이메일"/>
									</div>

									<div class="field">
										<label for="message">Message</label>
										<textarea  id="message" rows="6"></textarea>
									</div>
									<ul class="actions">
										<li><input type="submit" value="Send Message" class="special" /></li>
										<li><input type="reset" value="Clear" /></li>
									</ul>
								</form>
							</section>
							
							<section class="split">
								<section>
									<div class="contact-method">
										<span class="icon alt fa-envelope"></span>
										<h3>Email</h3>
										<%if(user != null){ %>
										<a href="#"><%=user.getEmail() %></a>
										<%}%>
										<!-- 로그인 한 사용자의 이메일을 출력하시오 -->
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-phone"></span>
										<h3>Phone</h3>
										<%if(user != null){ %>
										<span><%=user.getTel() %></span>
										<%}%>
										<!-- 로그인 한 사용자의 전화번호를 출력하시오 -->
									</div>
								</section>
								<section>
									<div class="contact-method">
										<span class="icon alt fa-home"></span>
										<h3>Address</h3>
										<%if(user != null){ %>
										<span><%=user.getAddress() %></span>
										<%}%>
										<!-- 로그인 한 사용자의 집주소를 출력하시오 -->
									</div>
								</section>
							</section>					
						</div>
					</section>

				<!-- Footer -->
					<footer id="footer">
						<div class="inner">
							<ul class="icons">
								<li><a href="#" class="icon alt fa-twitter"><span class="label">Twitter</span></a></li>
								<li><a href="#" class="icon alt fa-facebook"><span class="label">Facebook</span></a></li>
								<li><a href="#" class="icon alt fa-instagram"><span class="label">Instagram</span></a></li>
								<li><a href="#" class="icon alt fa-github"><span class="label">GitHub</span></a></li>
								<li><a href="#" class="icon alt fa-linkedin"><span class="label">LinkedIn</span></a></li>
							</ul>
							<ul class="copyright">
								<li>&copy; Untitled</li><li>Design: <a href="https://html5up.net">HTML5 UP</a></li>
							</ul>
						</div>
					</footer>

			</div>

		<!-- Scripts -->
			<script src="assets/js/jquery.min.js"></script>
			<script src="assets/js/jquery.scrolly.min.js"></script>
			<script src="assets/js/jquery.scrollex.min.js"></script>
			<script src="assets/js/skel.min.js"></script>
			<script src="assets/js/util.js"></script>
			<!--[if lte IE 8]><script src="assets/js/ie/respond.min.js"></script><![endif]-->
			<script src="assets/js/main.js"></script>
			<script type="text/javascript">
			
				$(document).ready(function(){
					
					// 이메일 중복체크 기능
					// 사용자가 input태그에 입력했을 때 실행
					var input = $('#check');
				
					// 바뀌는 이벤트
					// change : 값이 변경되면 입력과 동시 X
					// input : 값이 입력되면 
					input.on("input", emailCheck);
					
					
				});
				
				// 함수이름(emailCheck)와 각 태그의 id 이름이 같으면 함수가 인식을 못해서 오류!!
				function emailCheck(){
					
					// input에 입력된 값이 DB에 있는지 확인
					// select * from member where email = \#{email}
					// input에 입력된 값
					// this : 이벤트 대상
					var value = $(this).val();
					console.log(value);
					
					// check.do라고 요청(CheckCon)
					// Post 방식
					// 입력받은 값을 가지고
					// 비동기통신(ajax) 방식
					
					
					$.ajax({
						url : 'check.do',
						type : 'post',
						data : {
							"email" : value
						},
						success : function(res){
							console.log(res);
							
							// 만약 사용가능하다면
							// p태그 안에 사용가능한 이메일입니다.
							var p = $('#result');
							
							if(res == "true"){
								// 사용가능한 아이디입니다.
								p.html('사용이 가능한 이메일 입니다.');
								p.css("color", "green"); // css("style 이름", "값")
							}else {
								// 사용 불가능한 아이디입니다.
								p.html("사용이 불가능한 아이디 입니다.").css("color", "red");
							}
							
						},
						error : function(e){
							alert("요청 실패");
						}
					});
				}
				
				
			</script>

	</body>
</html>

 

FrontController

package kr.smhrd.frontController;

import java.io.IOException;
import java.util.HashMap;

import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;

import kr.smhrd.controller.AjaxCon;
import kr.smhrd.controller.CheckCon;
import kr.smhrd.controller.Controller;
import kr.smhrd.controller.DeleteController;
import kr.smhrd.controller.GoBoardMainCon;
import kr.smhrd.controller.GoMainCon;
import kr.smhrd.controller.GoSelectController;
import kr.smhrd.controller.GoSuccessCon;
import kr.smhrd.controller.GoUpdateController;
import kr.smhrd.controller.GoWriterBoardCon;
import kr.smhrd.controller.JoinCon;
import kr.smhrd.controller.LoginCon;
import kr.smhrd.controller.LogoutController;
import kr.smhrd.controller.UpdateController;
import kr.smhrd.controller.ViewBoardCon;
import kr.smhrd.controller.WriteBoardController;
import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;

// 모든 요청을 받을 수 있도록 url-mapping을 *로 지정
// @WebServlet("*.do") => .do로 끝나는 모든 요청
@WebServlet("*.do")
public class FrontController extends HttpServlet {
	
	private HashMap<String, Controller> mappings;
	
	@Override
	public void init() throws ServletException {
		// Servlet이 메모리에 할당 됐을 때, 
		// 단 1번 실행
		// Servlet에서 필요한 변수를 세팅, 내부 값 초기화
		
		// URL-Mapping <=> POJO
		// HashMap 자료구조 (python dict)
		// => key : value 구조
		// URL-Mapping : POJO
		
		mappings = new HashMap<String, Controller>();
		
		// hashmap에 데이터 집어넣기
		// 새로운 기능이 생기면 put으로 추가만 해주자.
		mappings.put("/goMain.do", new GoMainCon());
		mappings.put("/goSuccess.do", new GoSuccessCon());
		mappings.put("/join.do", new JoinCon());
		mappings.put("/login.do", new LoginCon());
		mappings.put("/logout.do", new LogoutController());
		mappings.put("/update.do", new UpdateController());
		mappings.put("/goSelect.do", new GoSelectController());
		mappings.put("/goUpdate.do", new GoUpdateController());
		mappings.put("/delete.do", new DeleteController());
		mappings.put("/goBoardMain.do", new GoBoardMainCon());
		mappings.put("/goWriterBoard.do", new GoWriterBoardCon());
		mappings.put("/writeBoard.do", new WriteBoardController());
		mappings.put("/viewBoard.do", new ViewBoardCon());
		mappings.put("/ajax.do", new AjaxCon());
		mappings.put("/check.do", new CheckCon());
		
	}
	
	
	
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		// url은 아래 주소 전체를 나타냄
		// http://localhost:8081/MessageSystem/join?email=1234
		
		// 1. 요청 구분
		// uri는 /MessageSystem/join 를 나타냄
		String uri = request.getRequestURI();
		
		// /MessageSystem 를 꺼내오는 방법
		String cpath = request.getContextPath();
		
		// /join만 떼오기
		// String.subString(); => 문자열 슬라이싱
		// ex) 안녕하세요.
		// ex) String.subString(2); => "하세요."
		// ex) String.subString(2, 3); => "하"
		String command = uri.substring(cpath.length());
		
		System.out.println(command);
		
		
		// ==========================================================
		
		Controller con = null; // 업캐스팅을 이용한 중복제거
		
		// 2. 요청에 따라서 기능을 실행
		// 각각의 url mapping에 따라서 알맞는 POJO(class)를 찾아오기
		// 자바의 자료구조
		String nextView = null;
		
		con = mappings.get(command);
		
		
		// ================================================================
		
		if(con != null) {
			
			nextView = con.execute(request, response);
			
		}
		
		// 3. 페이지 이동
		// 예외처리용
		if(nextView != null) {
			// redirect vs forward 구분하기 위해서 규칙필요
			// 앞으로 redirect 요청은 반드시 앞에 redirect:/를 붙이자.
			// goMain.do => redirect:/goMain.do
			if(nextView.contains("redirect:/")) {
				// nextView = "redirect:/goMain.do"
				// nextView.split(":/"); => ["redirect", "goMain.do"]
				response.sendRedirect(nextView.split(":/")[1]);	
			}else {
				RequestDispatcher rd = 
						request.getRequestDispatcher("WEB-INF/views/"+nextView+".jsp");
				rd.forward(request, response);
			}
		}
		
	}

}

 

MemberMapper

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="kr.smhrd.dao.MemberDAO">
<!-- namespace : 짝궁(DAO)가 누구??? -->
	
	<!-- 회원가입 -->
	<!-- 
		#{변수명} : 변수에 데이터 타입에 자동맞춤
			ex) values(#{email})
				=> values('email@eamil.com')
		
		${변수명} : 단순히 집어넣는 타입
			ex) values(#{email})
				=> values(email@email.com)
				=> ERROR!
		
		parameterType : 데이터들을 어디에 담아서 줄거냐
						SQL문에 바인드변수가 2개 이상인 경우 필수
		
		resultType : SQL문 실행 결과
	 -->
	 
	<insert id="join" parameterType="kr.smhrd.entity.Member">
		insert into MEMBER
		values(#{email},
			   #{pw},
			   #{tel},
			   #{address}
		)
	</insert>
	
	<!-- 로그인 기능 
	
	ResultSet rs = psmt.executeQuery();
	
	while(rs.next()){
		String email = rs.getString(1);
		String pw = rs.getString(2);
		String tel = rs.getString(3);
		String address = rs.getString(4);
		
		// DTO에서 기본생성자가 필요한 코드
		Member dto = new Member(email, pw, tel, address);
	}
	
	=> MyBatis에서 resultType으로 끝낼 수 있다.
	-->
	<!--  
	<resultMap type="" id=""></resultMap>
	위 코드로 순서상관없이 사용가능하지만 일일이 써야하기에 비효율적
	-->
	
	<select id="login" 
	parameterType="kr.smhrd.entity.Member" 
	resultType="kr.smhrd.entity.Member">
		select * from MEMBER 
		WHERE email = #{email} AND pw = #{pw}
	</select>
	
	<!-- 개인정보수정 기능 -->
	<update id="update"
	parameterType="kr.smhrd.entity.Member">
		update MEMBER
		   set pw = #{pw},
		   	   tel = #{tel},
		   	   address = #{address}
		 where email = #{email}
	</update>
	
	<!-- 회원전체목록 조회 -->
	<select id="select"
	resultType="kr.smhrd.entity.Member">
		select *
		  from MEMBER
		 where not email='admin'
	</select>

	<!-- 회원목록 삭제 -->
	<!-- 집어넣는 데이터가 한 개라면 parameterType을 적지않아도 된다. -->
	<delete id="delete">
		delete from MEMBER
		where email = #{email}
	</delete>

	<!-- 이메일 중복 체크 -->
	<select id="checkcon"
	resultType="kr.smhrd.entity.Member">
		select *
		  from member
		 where email = #{email}
	</select>
</mapper>

 

MemberDAO

package kr.smhrd.dao;

import java.util.List;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;

import kr.smhrd.entity.Member;

public class MemberDAO {
	// DAO : SQL문을 실행하고, 실행 결과를 리턴
	
	// 1. DB와 연결
	private SqlSessionFactory factory =
			SqlSessionManager.getSqlSessionFactory();
	
	// Mybatis : java(DAO) <=mapping=> sql(xml)
	
	
	// 2. 회원정보를 Member 테이블에 저장하는 기능
	public int join(Member dto) {
		// 1단계) SqlSession 빌려오기
		// true --> auto commit
		SqlSession session = factory.openSession(true);
		
		// 2단계) sql문 실행
		// insert, delete, update : 키워드랑 같은 메소드
		// select : selectOne (한 개만 가져올 때)
		//		  : selectList (여러 개 가져올 때)
		// insert("id", 넣어줄 데이터)
		// parameterType == 메소드의 매개변수
		// insert, delete, update는 resultType이 int로만 고정
		int row = session.insert("join", dto);
		
		// 3단계) 빌려온 SqlSession 반환
		session.close();
		
		// 4단계) SQL문 실행한 결과를 리턴
		// resultType == return type
		return row;
	}
	
	// 2. 로그인 메소드
	public Member login(Member dto) {
		// 1단계. SqlSession 빌려오기
		SqlSession session = factory.openSession(true);
		
		// 2단계. SQL문 실행
		// Select문의 실행결과는 resultType을 따른다.
		// selectOne : resultType 그대로
		// selectList : List<resultType의 데이터 타입>
		Member user = session.selectOne("login", dto);
		
		// 3단계. session 반환하기
		session.close();
		
		// 4단계. 결과 리턴
		return user;
	}
	
	// 3. 개인정보수정 메소드
	public int update(Member dto) {
		SqlSession session = factory.openSession(true);
		
		int row = session.update("update", dto);
		
		session.close();
		
		return row;
	}
	
	// 4. 회원정보목록 조회
	public List<Member> select() {
		// 1) SqlSession 빌려오기
		SqlSession session = factory.openSession(true);
		
		// 2) SQL문 실행
		List<Member> list = session.selectList("select");
		
		// 3) SqlSession 반환하기
		session.close();
		
		// 4) 실행결과 리턴
		return list;
	}
	
	// 5. 회원정보 삭제
	public int delete(String email) {
		SqlSession session = factory.openSession(true);
		
		int row = session.delete("delete", email);
		
		session.close();
		
		return row;
	}
	
	public Member checkcon(String email) {
		SqlSession session = factory.openSession(true);
		Member user = session.selectOne("checkcon", email);
		session.close();
		return user;
	}

}

 

CheckController

package kr.smhrd.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.google.gson.Gson;

import kr.smhrd.dao.MemberDAO;
import kr.smhrd.entity.Member;

public class CheckCon implements Controller {

	@Override
	public String execute(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 1. 데이터 수집
		request.setCharacterEncoding("UTF-8");

		String email = request.getParameter("email");

		System.out.println(email);

		// 2. 기능 구현

		MemberDAO dao = new MemberDAO();
		Member user = dao.checkcon(email);

		// 3. 응답을 작성
		// 만약 사용가능한 이메일 => true 응답
		// 불가능한 이메일 => false 응답

		response.setCharacterEncoding("UTF-8");

		PrintWriter out = response.getWriter();
		
		String res = "";
		
		if(user == null) {
			res = "true";
		}else {
			res = "false";
		}
		
		out.print(res);
		return null;
	}

}

 

'Web > JSP_Servlet' 카테고리의 다른 글

JSP vs SPA(AJAX)  (0) 2023.09.15
EL과 JSTL  (1) 2023.05.04
MVC_게시글 작성, 게시글 조회 by FrontController  (1) 2023.05.03
MVC_FrontController  (1) 2023.05.03
MVC_회원관리 시스템  (1) 2023.04.28

댓글