[정보처리산업기사 과정평가형 - 실기] 회원 목록 만들기
- 정보처리산업기사 과정평가형/실기
- 2021. 4. 10.
회원 목록 만들기
회원가입 다음으로 초심자에게 어렵다고 한다면 회원목록 불러오기 입니다.
이부분은 대표적으로 ArrayList를 활용하며, 또한 이와같이 수정이라는 주제가 주어졌다면
무엇을 기준으로 회원을 나눌수 있는가?를 생각해보셔야 합니다.
이때 수정하기 위해 특정회원을 불러온다면 기본적으로 primary key(기본키) 혹은 unique 속성을 가진 컬럼을 가져오면 됩니다.
joinList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Hi</title>
</head>
<body>
<h2>회원목록조회/수정</h2>
<table>
<tr>
<td>회원목록</td>
<td>회원성명</td>
<td>전화번호</td>
<td>주소</td>
<td>가입일자</td>
<td>고객등급</td>
<td>거주지역</td>
</tr>
</table>
</body>
</html>
간단하게 회원목록을 나타내는 jsp를 만들었습니다.
이제 table에 출력할 수 있도록 db에서 값을 가져오도록 하겠습니다.
MemberDAO
처음 활용했던 SELECT문의 확장판입니다.
검색된 SELECT의 여러개의 결과값을 담기 위해서는 배열이 필요하며 이에 가장 적합한 것은 List타입의 ArrayList입니다.
따라서 ArrayList에 해당 값을 모두 담도록 지정합니다.
controller
컨트롤러는 전과 마찬가지로 이렇게 설정합니다.
경로명은 joinSelectAll로 지정하였으며,
nav영역 혹은 회원등록의 조회버튼을 통해 joinSelectAll.me를 작성하게 되면, 회원목록이 출력하게 됩니다.
joinList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" import="MemberBean.Member"%>
<%
request.setCharacterEncoding("UTF-8");
//list를 불러온다.
List<Member> list = (ArrayList<Member>) request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Hi</title>
</head>
<body>
<h2>회원목록조회/수정</h2>
<table>
<tr>
<td>회원목록</td>
<td>회원성명</td>
<td>전화번호</td>
<td>주소</td>
<td>가입일자</td>
<td>고객등급</td>
<td>거주지역</td>
</tr>
<%
for (int i = 0; i < list.size(); i++) {
%>
<tr>
<td><%=list.get(i).getNum()%></td>
<td><%=list.get(i).getName()%></td>
<td><%=list.get(i).getTel()%></td>
<td><%=list.get(i).getAddress()%></td>
<td><%=list.get(i).getJoinDate()%></td>
<td><%=list.get(i).getGrade()%></td>
<td><%=list.get(i).getCity()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
결과 가져오기
이제 여기서 고객등급에 따라 A = VIP, B = 일반, C = 직원을 나타내도록 합니다.
여기서, DAO에서 list에 담기전에 처리하는 방법과 jsp에서 처리하는 방법이 있습니다.
저는 개인적으로 java에서 작성하는 것을 추천합니다.
jsp에서 <% %> 의 활용은 초심자에게 매우 헷갈려 할 수 있는 부분이기 때문입니다.
등급 표현을 수정하도록 했습니다.
변경 된 것을 확인 할 수 있습니다.
혹시 모르니 이동 경로명 추가 방법을 별도로 설명드리겠습니다.
nav.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Hi</title>
</head>
<body>
<table>
<tr>
<td>회원등록</td>
<td><a href="joinSelectAll.me">회원목록 조회/수정</a></td>
<td>회원매출조회</td>
<td>홈으로</td>
</tr>
</table>
</body>
</html>
join.jsp
이렇게 추가한다면 회원목록을 불러올 수 있게 됩니다.
코드 확인하기
MemberDAO
package MemberDB;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import MemberBean.Member;
public class MemberDAO {
Connection con;
PreparedStatement pstmt;
ResultSet rs;
MemberDAO() throws Exception {
con = getConnection();
}
public static Connection getConnection() throws Exception {
Class.forName("oracle.jdbc.OracleDriver");
Connection con = DriverManager.getConnection("jdbc:oracle:thin:@//localhost:1521/xe", "hr", "hr");
return con;
}
// 회원가입하기
// request와 response는 암기하지 말고, servlet으로 생성될때 매개변수를 복사해서 가져오면 된다.
public String JoinAction(HttpServletRequest request, HttpServletResponse response) {
// db sql문
// preparedStatement는 ?의 순서에 따라 값이 등록된다.
String sql = "insert into member_tbl_02 values(member_seq.nextval, ?, ?, ?, ?, ?, ?)";
try {
pstmt = con.prepareStatement(sql);
// submit을 눌렀을 때 form안의 name이 Parameter값으로 변환된다.
String name = request.getParameter("name");
String tel = request.getParameter("tel");
String address = request.getParameter("address");
String joindate = request.getParameter("joindate");
String grade = request.getParameter("grade");
String city = request.getParameter("city");
// 이를 sql에 접목 시킨다.
// 1번째 ?에 name의 값을 넣는다.
pstmt.setString(1, name);
// 2번째 ?에 tel의 값을 넣는다.
pstmt.setString(2, tel);
// 3번째 ?에 address의 값을 넣는다.
pstmt.setString(3, address);
// 4번째 ?에 joindate의 값을 넣는다.
pstmt.setString(4, joindate);
// 5번째 ?에 grade의 값을 넣는다.
pstmt.setString(5, grade);
// 6번째 ?에 city의 값을 넣는다.
pstmt.setString(6, city);
// 완료가 되었으면 값을 지정한다.
int cnt = pstmt.executeUpdate();
// 결과값이 0일 경우 실패, 1일 경우 성공이다
System.out.println(cnt);
} catch (Exception e) {
e.printStackTrace();
}
// 완료가 되었으면 닫아 준다.
finally {
try {
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "joinNum.me";
}
// 회원번호 자동 생성하기
public String JoinNum(HttpServletRequest request, HttpServletResponse response) {
// 조건 첫번째 줄만 표시
// CUSTNO(회원번호)를 높은순으로 표시하여 가장 마지막 번호를 제일 위로 보낸다.
String sql = "select CUSTNO from member_tbl_02 WHERE ROWNUM =1 ORDER BY CUSTNO DESC";
try {
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
int cnt = 100001;
if (rs.next())
// 첫 번째 컬럼의 값을 가져온다.
cnt = rs.getInt(1);
// custno 컬럼의 값을 가져온다.
// int cnt = rs.getInt("custno");
// 결과값을 request에 담는다.
// cnt의 결과값에서 +1을 진행한다.
request.setAttribute("cnt", ++cnt);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if(rs != null)
rs.close();
if (pstmt != null)
pstmt.close();
if (con != null)
con.close();
} catch (Exception e) {
e.printStackTrace();
}
}
return "template.jsp";
}
//회원 목록 불러오기
public String joinSelectAll(HttpServletRequest request, HttpServletResponse response)
{
try
{
//*을 활용하여 모두 출력할 수 있지만, 컬럼을 확실하게 구분하기 위해 컬럼을 표시하였다.
// 회원번호기준으로 내림차순으로 주어져있으므로 내림차순을 주었다.
String sql = "select CUSTNO, CUSTNAME, PHONE, ADDRESS, JOINDATE, GRADE, CITY from member_tbl_02 ORDER BY CUSTNO ASC";
pstmt = con.prepareStatement(sql);
rs = pstmt.executeQuery();
//결과값을 담기 위해 ArrayList를 준비한다.
List<Member> list = new ArrayList<Member>();
//검색된 개수만큼 반복문이 돌아간다.
while(rs.next()) {
//Member객체 하나를 생성한다.
Member member = new Member();
int custno = rs.getInt(1);
System.out.println(custno);
String name = rs.getString(2);
String phone = rs.getString(3);
String address = rs.getString(4);
//date타입을 불러올 경우, 년월일시분초 로 가져온다. 여기서 년월일은 총 yyyy-mm-dd 이므로 10자리까지만 가져오면 된다.
String date = rs.getString(5).substring(0,10);
String grade = rs.getString(6);
//등급에 따라 표시를 변경한다
//A = VIP, B = 일반, C = 직원
if(grade.equals("A"))
grade = "VIP";
else if(grade.equals("B"))
grade = "일반";
else if(grade.equals("C"))
grade = "직원";
String city = rs.getString(7);
//위에 가져온 것을 Member타입으로 모두 넣는다.
//Member의 객체 num은 String 타입이고, custno는 int타입이다. 따라서 int에서 string으로 형변환이 필요하다.
member.setNum(Integer.toString(custno));
member.setName(name);
member.setTel(phone);
member.setAddress(address);
member.setJoinDate(date);
member.setGrade(grade);
member.setCity(city);
//member를 list에 담는다.
list.add(member);
}
//list의 결과값을 list에 담는다.
request.setAttribute("list", list);
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if(rs != null)
rs.close();
if(pstmt != null)
pstmt.close();
if(con != null)
con.close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
return "template.jsp";
}
}
MemberController
package MemberDB;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class MemberController extends HttpServlet {
protected void doProcess(HttpServletRequest request, HttpServletResponse response) throws Exception {
//URL 확인하기
String uri = request.getRequestURI();
String context = request.getContextPath();
String command = uri.substring(context.length());
String sit = null;
System.out.println("command : "+command);
MemberDAO member = new MemberDAO();
//회원가입 버튼 클릭
if(command.equals("/joinAction.me"))
{
//member의 JoinAction 메소드 실행시키기.
sit = member.JoinAction(request, response);
}
//회원가입 화면 시작할 때.
else if(command.equals("/joinNum.me"))
{
sit = member.JoinNum(request, response);
request.setAttribute("pp", "join");
}
//회원 목록 불러오기
else if(command.equals("/joinSelectAll.me"))
{
sit = member.joinSelectAll(request, response);
request.setAttribute("pp", "joinList");
}
//결과 수행
RequestDispatcher dispatcher = request.getRequestDispatcher(sit);
dispatcher.forward(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
try {
doProcess(request, response);
}catch(Exception e)
{
e.printStackTrace();
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
try
{
doProcess(request, response);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
joinList.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" import="MemberBean.Member"%>
<%
request.setCharacterEncoding("UTF-8");
//list를 불러온다.
List<Member> list = (ArrayList<Member>) request.getAttribute("list");
%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<head>
<title>Hi</title>
</head>
<body>
<h2>회원목록조회/수정</h2>
<table>
<tr>
<td>회원목록</td>
<td>회원성명</td>
<td>전화번호</td>
<td>주소</td>
<td>가입일자</td>
<td>고객등급</td>
<td>거주지역</td>
</tr>
<%
for (int i = 0; i < list.size(); i++) {
%>
<tr>
<td><%=list.get(i).getNum()%></td>
<td><%=list.get(i).getName()%></td>
<td><%=list.get(i).getTel()%></td>
<td><%=list.get(i).getAddress()%></td>
<td><%=list.get(i).getJoinDate()%></td>
<td><%=list.get(i).getGrade()%></td>
<td><%=list.get(i).getCity()%></td>
</tr>
<%
}
%>
</table>
</body>
</html>
전체 목록
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기2
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기3
[정보처리산업기사 과정평가형 - 실기] 회원 목록 만들기
[정보처리산업기사 과정평가형 - 실기] 회원 정보 가져오기
[정보처리산업기사 과정평가형 - 실기] 회원 정보 수정하기
'정보처리산업기사 과정평가형 > 실기' 카테고리의 다른 글
[정보처리산업기사 과정평가형 - 실기] 회원 정보 수정하기 (0) | 2021.04.10 |
---|---|
[정보처리산업기사 과정평가형 - 실기] 회원 정보 가져오기 (0) | 2021.04.10 |
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기3 (0) | 2021.04.10 |
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기2 (1) | 2021.04.10 |
[정보처리산업기사 과정평가형 - 실기] 회원가입 만들기 (13) | 2021.04.10 |