웹 개발 기초/자바 웹을 다루는 기술

스크립트 요소 이용해 회원 정보 조회하기

sungw00 2023. 2. 28. 11:26
728x90

데이터베이스의 회원 정보를 조회한 후 JSP 페이지에 출력하는 예제

(데이터베이스 연동에 필요한 라이브러리를 반드시 설치한 후 진행)

1. MemberVO, MemberDAO 클래스를 작성

// MemberDAO.java
package sec02.ex01;

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

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

import java.sql.Date;

public class MemberDAO {
	private Connection con;
	private PreparedStatement pstmt;
	private DataSource dataFactory;
	
	public MemberDAO() {
		try {
			Context ctx = new InitialContext();
			Context envContext = (Context) ctx.lookup("java:/comp/env");
			dataFactory = (DataSource) envContext.lookup("jdbc/oracle");
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public List listMembers(MemberVO memberVO) {
		List membersList = new ArrayList();
		String _name = memberVO.getName(); // 조회할 이름을 가져옴
		try {
			con = dataFactory.getConnection();
			String query = "select * from t_member ";
            // _name 값이 존재하면 SQL문에 where 값을 추가하여 해당 이름으로 조회
			if((_name!=null && _name.length()!=0)) { 
				query+=" where name=?";
				pstmt = con.prepareStatement(query);
				pstmt.setString(1, _name); // 첫 번째 '?'에 전달된 이름을 지정
            // _name 값이 없으면 모든 회원 정보를 조회
			} else {
				pstmt = con.prepareStatement(query);
			}
			System.out.println("preparedStatement: " + query);
			ResultSet rs = pstmt.executeQuery();
			while (rs.next()) {
				String id = rs.getString("id");
				String pwd = rs.getString("pwd");
				String name = rs.getString("name");
				String email = rs.getString("email");
				Date joinDate = rs.getDate("joinDate");
				MemberVO vo = new MemberVO();
				vo.setId(id);
				vo.setPwd(pwd);
				vo.setName(name);
				vo.setEmail(email);
				vo.setJoinDate(joinDate);
				membersList.add(vo);
			}
			rs.close();
			pstmt.close();
			con.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		return membersList;
	}
	
	public void addMember(MemberVO memberVO) {
		try {
			con = dataFactory.getConnection();
			String id = memberVO.getId();
			String pwd = memberVO.getPwd();
			String name = memberVO.getName();
			String email = memberVO.getEmail();
			
			String query = "insert into t_member";
			query += "(id,pwd,name,email)";
			query += "values(?,?,?,?)";
			System.out.println("preparedStatement: " + query);
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			pstmt.setString(3, name);
			pstmt.setString(4, email);
			pstmt.executeUpdate();
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void delMember(String id) {
		try {
			con = dataFactory.getConnection();
			
			String query = "delete from t_member" + " where id=?";
			System.out.println("preparedStatement: " + query);
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.executeUpdate();
			pstmt.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public boolean isExisted(MemberVO memberVO) {
		boolean result = false;
		String id = memberVO.getId();
		String pwd = memberVO.getPwd();
		try {
			con = dataFactory.getConnection();
			String query = "select decode(count(*),1,'true','false') as result from t_member";
			query += " where id=? and pwd=?";
			pstmt = con.prepareStatement(query);
			pstmt.setString(1, id);
			pstmt.setString(2, pwd);
			ResultSet rs = pstmt.executeQuery();
			rs.next();
			result = Boolean.parseBoolean(rs.getString("result"));
			System.out.println("result=" + result);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}
// MemberVO.java
package sec02.ex01;

import java.sql.Date;

public class MemberVO {
	private String id;
	private String pwd;
	private String name;
	private String email;
	private Date joinDate;
	
	public MemberVO() {
		System.out.println("MemberVO 생성자 호출");
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getPwd() {
		return pwd;
	}

	public void setPwd(String pwd) {
		this.pwd = pwd;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public Date getJoinDate() {
		return joinDate;
	}

	public void setJoinDate(Date joinDate) {
		this.joinDate = joinDate;
	}
	
	
}

2. member.jsp, search.jsp 파일 작성

<%-- member.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
	import="java.util.*"
	import="sec02.ex01.*"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<style>
    <%-- <h1> 태그의 텍스트를 중앙에 정렬 --%>
		h1 {
			text-align: center;
		}
	</style>
<meta charset="UTF-8">
<title>회원 정보 출력창</title>
</head>
<body>
	<h1>회원 정보 출력</h1>
<%
	request.setCharacterEncoding("utf-8");
	String _name = request.getParameter("name"); <%-- 전송된 이름을 가져옴 --%>
	MemberVO memberVO = new MemberVO();
	memberVO.setName(_name);
	MemberDAO dao = new MemberDAO();
	List membersList = dao.listMembers(memberVO); <%-- memberVO를 listMembers() 메서드로 전달하여 조회 조건에 해당되는 회원 정보를 조회 --%>
%>
	<table border=1 width=800 align=center>
		<tr align=center bgcolor='#FFFF66'>
		<td>아이디</td>
		<td>비밀번호</td>
		<td>이름</td>
		<td>이메일</td>
		<td>가입일자</td>
	</tr>
<%
	<%-- MemberDAO에서 조회한 회원 정보를 for 반복문을 이용해 테이블의 행으로 출력 --%>
	for(int i=0; i<membersList.size(); i++) {
		MemberVO vo = (MemberVO) membersList.get(i);
		String id = vo.getId();
		String pwd = vo.getPwd();
		String name = vo.getName();
		String email = vo.getEmail();
		Date joinDate = vo.getJoinDate();
%>

	<tr align=center>
		<td><%= id %></td>
		<td><%= pwd %></td>
		<td><%= name %></td>
		<td><%= email %></td>
		<td><%= joinDate %></td>
<%
	}
%>
</table>
</body>
</html>
<%-- search.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>회원 검색창</title>
</head>
<body>
	<form method="post" action="member.jsp"> <%-- 이름을 member.jsp로 전송 --%>
		이름 : <input type="text" name="name"><br>
		<input type="submit" value="조회하기">
	</form>
</body>
</html>

 

3. http://localhost:8090/pro12/test03/search.jsp로 요청한 후 조회할 이름을 입력하고 member.jsp로 전송

검색창에 이름 입력
회원 이름으로 조회한 결과 출력

 

만약 이름을 입력하지 않고 조회할 경우에는 모든 회원 정보가 출력됨

이름을 입력하지 않고 전송
이름을 입력하지 않으면 모든 회원 정보가 출력됨

 

728x90