parisangsoo
모델 2 회원정보 프로그램(JSP 03/21) 본문
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