Notice
Recent Posts
Recent Comments
Link
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

parisangsoo

모델 2 회원정보 프로그램(JSP 03/21) 본문

JSP

모델 2 회원정보 프로그램(JSP 03/21)

SangssI 2023. 3. 21. 22:49

JSP 파일

메인 회원정보를 보여주는 JSP 파일

member_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<!-- 현재 페이지와 같이 servlet을 통한 DB조회와 결과 출력을 나누어서 작업하는 구조를 model2(MVC패턴) 구조라고 한다. 
	M(Model) : DAO
	V(View) : JSP
	C(Controller) : Servlet
	-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>


	<!-- Ajax 사용을 위한 js를 등록해둔다. -->
	<script src = "js/httpRequest.js"></script>
	
	<script>
	function del( idx ){
		
		
		//location.href='del.do?idx='+idx;
		if(!confirm("정말 삭제하시겠습니까?")){
			return;
		}
		//idx를 Ajax를 통해서 서버측으로 전달
		
		var url = "del_idx.do"
		var param = "idx="+idx;
		sendRequest(url,param,resultFun, "GET");
			
			
		}
	
	function resultFun() {
		//콜백 메서드
		if(xhr.readyState == 4 && xhr.status == 200) {
			
			let data = xhr.responseText;
			//data --> "no" or "yes"
		
			if( data == 'yes') {
				alert("삭제를 완료하였습니다.");
				//location.href="member_list.do"; // 회원정보를 보여주는 갱신(Select)하는 서블릿을 다시 한번 호출
				history.go(0); //페이지 새로고침 코드
            } else {
				alert("삭제실패. 관리자에게 문의하세요")
			}
			
		}	
	}
	</script>		
		
	
	
	
	
</head>
<body>
	<table border = "1">
		<caption>:::회원목록:::</caption>
	
	<tr>
		<td colspan="7">
			<input type="button" value = "회원가입" onclick="location.href='member_insert_form.jsp'">
		</td>
	</tr>
	
	<tr>
		<th>회원번호</th>
		<th>이름</th>
		<th>아이디</th>
		<th>비밀번호</th>
		<th>이메일</th>
		<th colspan = "2">주소</th>
	</tr>
	
	<c:forEach var="vo" items="${ list }">
		<tr>
		 	<td> ${ vo.idx }</td>
		 	<td> ${ vo.name }</td>
		 	<td> ${ vo.id }</td>
		 	<td> ${ vo.pwd }</td>
		 	<td> ${ vo.email }</td>
		 	<td> ${ vo.addr }</td>
		 	<td>
		 		<input type = "button" value = "삭제" onclick="del('${ vo.idx }');">
		 	</td>
		</tr>
	</c:forEach>
	
	</table>
</body>
</html>

2. 회원가입 버튼 클릭시 나타나는 JSP 파일

member_insert_form.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 src ="js/httpRequest.js"></script>
	
	<script>
		//아이디 중복여부 체크하는 boolean 변수, 아이디 중복체크를 눌렀을때 중복이 아닐때 true 변경 해주어 가입이라는 버튼을 눌렀을때 가입이 완료 됨.
		let b_idCheck = false;
		
		function send(f) {
			let id = f.id.value;
			let pwd = f.pwd.value;
			let name = f.name.value;
			let email = f.email.value;
			let addr = f.addr.value;
			
			if (  id == '' ){
				alert("아이디를 입력하세요");
				return;
			}
			
			if( !b_idCheck ) {
				alert("아이디 중복체크를 하세요");
				return;
			}
			
			
			f.action = "insert.do";
			f.method = "post";
			f.submit();
			
		}
		
		
		//아이디 중복체크를 위한 함수
		 function check_id() {
			let id = document.getElementById("id").value.trim();
			
			if (id == ''){
				alert("아이디를 입력하세요");
				return;
			}
			
			//Ajax를 통해 아이디 중복검사
			var url = "check_id.do"
			var param = "id="+id;
			sendRequest(url,param,resultFun, "GET");
			
			
		}
		//중복체크 버튼 클릭 후 자동으로 호출되는 콜백 메서드
		function resultFun() {
			
			if(xhr.readyState == 4 && xhr.status == 200) {
				
				let data = xhr.responseText;
				
				//문자열로 넘어온 data를 실제 json구조로 변경
				let json = (new Function('return'+data))();
				
				if(json[0].result == 'no') {
					alert("이미 사용중인 아이디 입니다.")
				} else{
					alert("사용 가능한 아이디 입니다.");
					b_idCheck = true;
				}
				
 		}		
			
		
	}
		function che(){
			//아이디를 입력받은 창의 값이 변경되면 호출되는 메서드
			b_idCheck = false;
		}
		
		
	
	
	</script>
</head>
<body>
	<form>
		<table border = "1">
			<caption>:::회원가입:::</caption>
			
			<tr>
				<th>아이디</th>
				<td><input name="id" id = "id" onchange ='che();'></td>
				<td><input type="button" value="중복체크 "   onclick = "check_id();"></td>
				
			</tr>
			<tr>
				<th>비밀번호</th>
				<td><input type ="password" name="pwd"></td>
			</tr>
			
			<tr>
				<th>이름</th>
				<td><input name="name"></td>
			</tr>
			
			<tr>
				<th>이메일</th>
				<td><input name="email"></td>
			</tr>
			<tr>	
				<th>주소</th>
				<td><input name="addr"></td>
			</tr>
			
			<tr colspan="2">
				<td><input type="button" value = "가입" onclick="send(this.form);"></td>
				<td><input type = "button" value = "취소" onclick="history.go(-1)"></td>
			
			
		</table>
	</form>
</body>
</html>

서블릿 파일

1. 화면에 출력할 데이터를 가져오는 서블릿파일

MemberListAction.java

package action;

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

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 dao.MemberDAO;
import vo.MemberVO;

/**
 * Servlet implementation class MemberListAction
 */
@WebServlet("/member_list.do")
public class MemberListAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//회원 목록 가져오기
		List<MemberVO> list = MemberDAO.getInstance().selectList();
		
		//list를 request영역에 저장
		request.setAttribute("list", list); //바인딩
		
		//바인딩 된 정보를 출력하고자 하는 jsp로 포워딩
		RequestDispatcher disp = request.getRequestDispatcher("member_list.jsp");
		disp.forward(request, response);
	}

}

2. 회원정보를 입력 후 새로운 회원정보를 추가하는 데이터를 전달하는 서블릿파일

MemberInsertAction.java

package action;

import java.io.IOException;
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 dao.MemberDAO;
import vo.MemberVO;

@WebServlet("/insert.do")
public class MemberInsertAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		request.setCharacterEncoding("utf-8");
		
		
		String id = request.getParameter("id");
		String pwd = request.getParameter("pwd");
		String name = request.getParameter("name");
		String email = request.getParameter("email");
		String addr = request.getParameter("addr");
		
		//DAO로 전달할 파라미터들을 vo로 묶자
		
		MemberVO vo = new MemberVO();
		vo.setId(id);
		vo.setPwd(pwd);
		vo.setName(name);
		vo.setEmail(email);
		vo.setAddr(addr);
		
		MemberDAO.getInstance().insert(vo);
		
		
		//location.href=""
		response.sendRedirect("member_list.do");
	}

}

3. 회원정보를 삭제버튼을 클릭시 회원의 일련번호를 전달하는 서블릿 파일

MemberdeleteAction.java

package action;

import java.io.IOException;
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 dao.MemberDAO;
import vo.MemberVO;

/**
 * Servlet implementation class MemberdeleteAction
 */
@WebServlet("/del_idx.do")
public class MemberdeleteAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		
		int idx = Integer.parseInt(request.getParameter("idx"));
		
		int del = MemberDAO.getInstance().delete(idx);
		
		String res = "no";
		
		if ( del > 0 ) { 
			// 테이블이 성공적으로 삭제가 된 경우
			res = "yes";
			
		}
		
		// AJAX에서 콜백메서드로 갈때 굳이 Json의 형태로 넘어가지 않아도 된다.
		/* String resultStr = String.format("[{'res':'%s'}]",res); */
		
		//res을 콜백 메서드로 전송
		response.getWriter().print(res);
		
	}

}

4. 회원가입의 아이디 중복체크 에서 아이디의 정보를 전달하는 서블릿 파일

CheckIdAction.java

package action;

import java.io.IOException;
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 dao.MemberDAO;
import vo.MemberVO;

/**
 * Servlet implementation class MemberdeleteAction
 */
@WebServlet("/del_idx.do")
public class MemberdeleteAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		request.setCharacterEncoding("utf-8");
		
		int idx = Integer.parseInt(request.getParameter("idx"));
		
		int del = MemberDAO.getInstance().delete(idx);
		
		String res = "";
		
		if ( del == 1 ) { 
			// 테이블이 성공적으로 삭제가 된 경우
			res = "yes";
			
		}
		
		//결과 res를 콜백메서드로 전달
		String resultStr = String.format("[{'result':'%s'}]",res);
		
		//resultStr을 콜백 메서드로 전송
		response.getWriter().print(resultStr);
		
	}

}

데이터베이스와 자바의 연결을 관리하는 클래스 : DAO

MemberDAO.java

package dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import service.DBService;
import vo.MemberVO;

public class MemberDAO {
	// single-ton pattern: 
	// 객체1개만생성해서 지속적으로 서비스하자
	static MemberDAO single = null;

	public static MemberDAO getInstance() {
		//생성되지 않았으면 생성
		if (single == null)
			single = new MemberDAO();
		//생성된 객체정보를 반환
		return single;
	}
	
	
	//
	public List<MemberVO> selectList() {

		List<MemberVO> list = new ArrayList<MemberVO>();
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "select * from myuser";

		try {
			//1.Connection얻어온다
			conn = DBService.getInstance().getConnection();
			//2.명령처리객체정보를 얻어오기
			pstmt = conn.prepareStatement(sql);

			//3.결과행 처리객체 얻어오기
			rs = pstmt.executeQuery();

			while (rs.next()) {
				MemberVO vo = new MemberVO();
				//현재레코드값=>Vo저장
				vo.setIdx(rs.getInt("idx"));
				vo.setName(rs.getString("name"));
				vo.setId(rs.getString("id"));
				vo.setPwd(rs.getString("pwd"));
				vo.setEmail(rs.getString("email"));
				vo.setAddr(rs.getString("addr"));
				
				//ArrayList추가
				list.add(vo);
			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {

			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return list;
	}
	
	
	
	
	
	//회원 추가
	public int insert(MemberVO vo) {
		// TODO Auto-generated method stub
		int res = 0;

		Connection conn = null;
		PreparedStatement pstmt = null;

		String sql = "insert into myuser values( seq_myuser_idx.nextVal,?,?,?,?,?)";

		try {
			//1.Connection획득
			conn = DBService.getInstance().getConnection();
			//2.명령처리객체 획득
			pstmt = conn.prepareStatement(sql);

			//3.pstmt parameter 채우기
			pstmt.setString(1, vo.getName());
			pstmt.setString(2, vo.getId());
			pstmt.setString(3, vo.getPwd());
			pstmt.setString(4, vo.getEmail());
			pstmt.setString(5, vo.getAddr());
			//4.DB로 전송(res:처리된행수) 
			res = pstmt.executeUpdate();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {

			try {
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return res;
	}
	
	//아이디 중복체크 
	public MemberVO selectOne(String id) {

		MemberVO vo = null;

		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		String sql = "Select * from myuser where id = ?";

		try {
			//1.Connection얻어온다
			conn = DBService.getInstance().getConnection();
			//2.명령처리객체정보를 얻어오기
			pstmt = conn.prepareStatement(sql);

			//3.pstmt parameter 설정
			pstmt.setString(1, id);
			//4.결과행 처리객체 얻어오기
			rs = pstmt.executeQuery();

			if (rs.next()) {
				vo = new MemberVO();
				//현재레코드값=>Vo저장

			}

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {

			try {
				if (rs != null)
					rs.close();
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}

		return vo;
	}
	
	public int delete(int idx) {
		// TODO Auto-generated method stub
		int res = 0;

		Connection conn = null;
		PreparedStatement pstmt = null;

		String sql = "Delete From myuser where idx = ?";

		try {
			//1.Connection획득
			conn = DBService.getInstance().getConnection();
			//2.명령처리객체 획득
			pstmt = conn.prepareStatement(sql);

			//3.pstmt parameter 채우기
			pstmt.setInt(1, idx);
			//4.DB로 전송(res:처리된행수)
			res = pstmt.executeUpdate();

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		} finally {

			try {
				if (pstmt != null)
					pstmt.close();
				if (conn != null)
					conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		return res;
	}
	
	
	
	
}

데이터베이스의 데이터를 관리하는 클래스 : VO

MemberVO.java

package vo;

public class MemberVO {
	private int idx;
	private String pwd, email, addr, name, id;
	
	
	
	
	public int getIdx() {
		return idx;
	}
	public void setIdx(int idx) {
		this.idx = idx;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getAddr() {
		return addr;
	}
	public void setAddr(String addr) {
		this.addr = addr;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	
	
	
}

데이터베이스의 접속과정을 처리 할 클래스

DBService.java

package service;

import java.sql.Connection;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;

public class DBService {
	//DB접속과정을 처리할 클래스
	// single-ton pattern: 
	// 객체1개만생성해서 지속적으로 서비스하자
	
	
	
	DataSource ds;
	
	
	static DBService single = null; 

	public DBService() { // DB와 JSP의 연결 전 까지의 모든 준비를 마치는 메서드
		
		 try {
			 InitialContext ic = new InitialContext();
			 
			 Context ctx = (Context)ic.lookup("java:comp/env");
			 
			 ds = (DataSource)ctx.lookup("jdbc/oracle_test");
			 
			 
			 
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
	
	public static DBService getInstance() {
		//생성되지 않았으면 생성
		if (single == null)
			single = new DBService();
		//생성된 객체정보를 반환
		return single;
	}

	public Connection getConnection() {
		 Connection conn = null;
		 try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		 
		 return conn;
	}
	
	
}

'JSP' 카테고리의 다른 글

갤러리 프로그램( 03/22 JSP )  (0) 2023.03.22
FileInput 03/22 JSP  (0) 2023.03.22
JSTL 03/21  (0) 2023.03.21
Ajax,EL,Json 03/20  (0) 2023.03.21
03/17 JSP (베이커리 홈페이지)  (0) 2023.03.19
Comments