인프런 강의 학습/MVC 프레임워크_나프1탄
인프런 MVC 프레임워크는 내손에 22일차 : MVC01_9~10 회원리스트 가져오기, 회원리스트 보기
현호s
2021. 6. 6. 17:36
반응형
# MVC01_9~10 회원리스트 가져오기(묶고(VO)-담고(List)), 회원리스트 보기
## member 테이블 unique key 설정
- 현재 사용중인 member 테이블은 아래와 같이 생성했다.
create table member (
num int primary key auto_increment,
id varchar(20) not null,
pass varchar(20) not null,
name varchar(30) not null,
age int not null,
email varchar(30) not null,
phone varchar(30) not null
)
- 여기서 id에 UNIQUE KEY 설정.
- PRIMARY KEY 의 경우 중복을 허용하지 않고, NULL도 허용하지 않는 것이다.
create table member (
num int primary key auto_increment,
id varchar(20) not null,
pass varchar(20) not null,
name varchar(30) not null,
age int not null,
email varchar(30) not null,
phone varchar(30) not null,
unique key(id)
)
- 입력값에 대한 유효성 검사는 프론트에서 자바스크립트 또는 제이쿼리를 이용한다.
## MemberListController.java Servlet 생성
- kr.bit.controller 우클릭 > New > Servlet 클릭
- Servlet 이름 MemberListController로 설정, URL Mapping의 경우 /memberList.do 로 설정 후 Service만 체크 후 Finish.
### finally
- try ~ catch 문에서 finally의 경우 에러 존재유무에 관계 없이 실행.
- 그래서 해당 부분에 db connection을 종료시켜주는 함수를 넣어준다.
### ArrayList 이용한 리스트 작업
- ArrayList에 회원 데이터를 담기 위해 먼저 rs.next(); 를 통해서 데이터 존재 유무를 파악(rs.next()가 True인 경우) .
- 아래와 같이 코드 작업 진행.
// 회원(VO) 전체 리스트(ArrayList) 가져오기
public ArrayList<MemberVO> memberList() {
String SQL = "select * from member";
getConnect();
ArrayList<MemberVO> list = new ArrayList<MemberVO>();
try {
ps = conn.prepareStatement(SQL);
rs = ps.executeQuery(); // rs -> 커서
while (rs.next()) {
int num = rs.getInt("num");
String id = rs.getString("id");
String pass = rs.getString("pass");
String name = rs.getString("name");
int age = rs.getInt("age");
String email = rs.getString("email");
String phone = rs.getString("phone");
// 묶고
MemberVO vo = new MemberVO(num, id, pass, name, age, email, phone);
// 담고
list.add(vo);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
dbClose();
}
return list;
}
## Member 테이블의 회원 리스트 보기
- 아래와 같이 list 가져올 Controller 코드 작업 진행
package kr.bit.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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 kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;
@WebServlet("/memberList.do")
public class MemberListController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 클라이언트 요청 받기 (memberList.do)
MemberDAO dao = new MemberDAO();
// 2. 회원 전체 리스트 가져오기(Model 연동)
ArrayList<MemberVO> list = dao.memberList();
// 3. 회원 전체 리스트를 HTML로 만들어서 응답하기
System.out.println(list);
}
}
- https://www.tablesgenerator.com/html_tables 를 이용하여 가져온 데이터를 보여줄 테이블 생성
- 생성된 테이블을 바탕으로 응답 데이터 작성.
### MIME TYPE 설정
- 응답되는 데이터안에 한글이 존재하는 경우에는 인코딩 필요.
- 서버가 클라이언트한테 어떤 타입을 전달할지 알려주는 것.
- response.setContentType("text/html;charset=utf-8");
- 아래와 같이 작업하여 결과물 확인 가능.
package kr.bit.controller;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
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 kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;
@WebServlet("/memberList.do")
public class MemberListController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 1. 클라이언트 요청 받기 (memberList.do)
MemberDAO dao = new MemberDAO();
// 2. 회원 전체 리스트 가져오기(Model 연동)
ArrayList<MemberVO> list = dao.memberList();
// 3. 회원 전체 리스트를 HTML로 만들어서 응답하기
// 응답되는 데이터 안에 한글이 존재할 경우 -> 인코딩 필요.
response.setContentType("text/html;charset=utf-8"); // MIME-TYPE
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<meta name='viewport' content='width=device-width, initial-scale=1'>");
out.println("<link rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css'>");
out.println("<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js'></script>");
out.println("<script src='https://maxcdn.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js'></script>");
out.println("</head>");
out.println("<body>");
out.println("<table border='1' class='table table-bordered'>");
out.println("<thead>");
out.println("<tr>");
out.println("<th>번호</th>");
out.println("<th>아이디</th>");
out.println("<th>비밀번호</th>");
out.println("<th>이름</th>");
out.println("<th>나이</th>");
out.println("<th>이메일</th>");
out.println("<th>전화번호</th>");
out.println("</tr>");
out.println("</thead>");
out.println("<tbody>");
for (MemberVO vo : list) {
out.println("<tr>");
out.println("<td>" + vo.getNum()+ "</td>");
out.println("<td>" + vo.getId()+ "</td>");
out.println("<td>" + vo.getPass()+ "</td>");
out.println("<td>" + vo.getName()+ "</td>");
out.println("<td>" + vo.getAge()+ "</td>");
out.println("<td>" + vo.getEmail()+ "</td>");
out.println("<td>" + vo.getPhone()+ "</td>");
out.println("</tr>");
}
out.println("</tbody>");
out.println("<tr>");
out.println("<td colspan='7' align='right'>");
out.println("<a href='member/memberRegister.html'>회원가입</a>");
out.println("</tr>");
out.println("</td>");
out.println("</table>");
out.println("</body>");
out.println("</html>");
}
}
## 리다이렉트(sendRedirect)
- MemberInsertController 의 MemberInsert 성공에 따른 경로 수정.
- 이렇게 해주면 회원가입 후 회원리스트 목록으로 이동.
package kr.bit.controller;
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 kr.bit.model.MemberDAO;
import kr.bit.model.MemberVO;
@WebServlet("/memberInsert.do")
public class MemberInsertController extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
// 1. 파라미터 수집(VO)
String id = request.getParameter("id");
String pass = request.getParameter("pass");
String name = request.getParameter("name");
int age = Integer.parseInt(request.getParameter("age"));
String email = request.getParameter("email");
String phone = request.getParameter("phone");
// 파라미터 수집(VO)
// MemberVO vo = new MemberVO(id, pass, name, age, email, phone);
MemberVO vo = new MemberVO();
vo.setId(id);
vo.setPass(pass);
vo.setName(name);
vo.setAge(age);
vo.setEmail(email);
vo.setPhone(phone);
//System.out.println("vo : " + vo); // vo.toString() 이 생략되어있는 것.
// Model과 연동하는 부분
MemberDAO dao = new MemberDAO();
int cnt = dao.memberInsert(vo);
PrintWriter out = response.getWriter();
// 가입 성공
if ( cnt > 0 ) {
//out.println("insert success");
// 다시 회원 리스트 보기로 가야함.
response.sendRedirect("/MVC01/memberList.do");
// 가입 실패 -> 예외 객체를 만들어서 WAS에게 던지자.
} else {
throw new ServletException("not insert");
}
}
}
반응형