<joinForm.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style>
table,th,td{
border:1px solid black;
border-collapse: collapse;
padding: 5px 10px;
text-align:center;
}
</style>
</head>
<body>
<h2>회원가입</h2>
<!-- table내용을 joinProc.jsp로 post방식으로 보낸다 -->
<form action="joinProc.jsp" method="post">
<table>
<tr>
<th>ID</th>
<td>
<input type="text" name="userId"/>
</td>
</tr>
<tr>
<th>PW</th>
<td>
<input type="password" name="userPw"/>
</td>
</tr>
<tr>
<th>이름</th>
<td>
<input type="text" name="userName"/>
</td>
</tr>
<tr>
<th>나이</th>
<td>
<input type="text" name="age"/>
</td>
</tr>
<tr>
<th>성별</th>
<td>
<input type="radio" name="gender" value="남"/>남
<input type="radio" name="gender" value="여"/>여
</td>
</tr>
<tr>
<th>email</th>
<td>
<input type="email" name="email"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="회원가입"/>
</td>
</tr>
</table>
</form>
</body>
</html>
<joinProc.jsp>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//0.한글깨짐 방지
request.setCharacterEncoding("UTF-8");
//1. 파라메터 받아오기
String id = request.getParameter("userId"); //name이 userId인 파라메터의 값 받아오기
String pw = request.getParameter("userPw"); //name이 userPw인 파라메터의 값 받아오기
String name = request.getParameter("userName"); //name이 userName인 파라메터의 값 받아오기
String age = request.getParameter("age"); //name이 age인 파라메터의 값 받아오기
String gender = request.getParameter("gender"); //name이 gender인 파라메터의 값 받아오기
String email = request.getParameter("email"); //name이 email인 파라메터의 값 받아오기
System.out.println(id+"/"+pw+"/"+name+"/"+age+"/"+gender+"/"+email); //정상적으로 받아왔나 출력
//2. DB접속
Context ctx = new InitialContext(); // context 객체화
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Oracle"); ////name으로 Resource찾아서 자바형태인 datasource로 변환
Connection conn = ds.getConnection(); //DataSource를 통해 가져온 정보를 이용해서 Connection 가져오기.
//3. 쿼리실행
String sql = "INSERT INTO member(id,pw,name,age,gender,email) VALUES(?,?,?,?,?,?)";//3-1 쿼리 준비
PreparedStatement ps = conn.prepareStatement(sql);//Connection으로 부터 PreparedStatement 가져오기
//3-3 ? 대응
//받아온 파라메터로 값 넣어주기
ps.setString(1, id); //?의 인덱스 1에 id넣기
ps.setString(2, pw); //?의 인덱스 2에 pw넣기
ps.setString(3, name); //?의 인덱스 3에 name넣기
ps.setInt(4, Integer.parseInt(age)); //?의 인덱스 4에 age넣기(int로변환)
ps.setString(5, gender); //?의 인덱스 5에 gender넣기
ps.setString(6, email); //?의 인덱스 6에 email넣기
//3-4 쿼리 실행
int success = ps.executeUpdate(); //executeUpdate()는 성공한것에 따라 int로 반환
//4. 자원반납
ps.close();
conn.close();
%>
<script>
//5. 성공여부에 따른 페이지 이동
<%if(success > 0){%> //성공한 쿼리가 하나라도 있다면
alert("등록이 완료되었습니다."); //알림창 띄우고
location.href("index.jsp"); //index.jsp로 보낸다
<%}else{%> //성공한 쿼리가 없다면
alert("등록이 실패하였습니다."); //알림창 띄우고
location.href("joinForm.jsp"); //joinForm.jsp으로 돌려보낸다.
<%}%>
</script>
<index.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<style>
table,th,td{
border:1px solid black;
border-collapse: collapse;
padding: 5px 10px;
text-align:center;
}
</style>
</head>
<body>
<h2>회원관리 로그인</h2>
<form action="loginProc.jsp" method="POST"><!-- 테이블 내용을 loginProc으로 post방식으로 보낸다 -->
<table>
<tr>
<th>ID</th>
<td>
<input type="text" name="userId"/>
</td>
</tr>
<tr>
<th>PW</th>
<td>
<input type="password" name="userPw"/>
</td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="LOG IN"/>
<!-- 클릭했을때 joinForm.jsp로 이동 -->
<input type="button" value="회원가입" onclick="location.href='joinForm.jsp'"/>
</td>
</tr>
</table>
</form>
</body>
</html>
<loginProc.jsp>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.Connection"%>
<%@page import="javax.sql.DataSource"%>
<%@page import="javax.naming.Context"%>
<%@page import="javax.naming.InitialContext"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//1.파라메터 확인
String id = request.getParameter("userId"); //name이 userId인 파라메터의 값을 변수 id에 넣는다.
String pw = request.getParameter("userPw"); //name이 userPw인 파라메터의 값를 변수 pw에 넣는다.
System.out.println(id+"/"+pw); //정상적으로 들어온걸 확인위해 변수 출력
//2.DB접속
Context ctx = new InitialContext(); //Context 객체화
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Oracle"); //name으로 Resource찾아서 자바형태인 datasource로 변환
Connection conn = ds.getConnection(); //DataSource를 통해 가져온 정보를 이용해서 Connection 가져오기.
//3.쿼리실행
String sql = "SELECT id FROM member WHERE id= ? AND pw= ?"; //쿼리준비
PreparedStatement ps = conn.prepareStatement(sql);//Connection으로 부터 PreparedStatement 가져오기
ps.setString(1, id); // id = ? 대응하는 값 넣어주기
ps.setString(2, pw); // pw = ? 대응하는 값 넣어주기
ResultSet rs = ps.executeQuery(); //쿼리 실행, SELECT문은 ResultSet형태로 반환한다.
String userId="";
if(rs.next()){ //다음값이 있으면 true, 없으면 false
userId = rs.getString("id"); //쿼리를 실행해서 얻은 값을 userId에 넣는다.
}
//4.자원반납
rs.close();
ps.close();
conn.close();
//5.성공여부에 따른 페이지 이동
System.out.println("loginid :" + userId); //성공했다면 정상적으로 userId 출력
if(userId.equals("")){//userId가 null이라면
response.sendRedirect("index.jsp"); //index.jsp로 돌려보낸다.
}else{ //userId에 정상적인 값이 들어왔다면
//userId를 세션에 저장해서 로그인 여부를 확인할 수 있도록한다.
session.setAttribute("loginId", userId); //세션값을 할당해준다.
response.sendRedirect("main.jsp"); //세션값을 할당하고 main.jsp로 보낸다.
}
%>
<main.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//로그인 하지 않은 사람은 index.jsp로 보낸다
String loginId= (String)session.getAttribute("loginId"); //name이 loginId인 세션값을 받아와서 변수 loginId에 넣는다.
if(loginId==null){ //세션값을 받아오지 못했다면
response.sendRedirect("index.jsp"); //index.jsp로 보낸다.
}
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>메인페이지</h1>
${sessionScope.loginId}님, 반갑습니다.<!-- EL태그로 세션값 받아오기 -->
<button onclick="location.href='logout.jsp'">로그아웃</button><!-- 클릭시 logout.jsp로이동 -->
<hr/>
<jsp:include page="memberList.jsp"/><!-- include를 이용해 memberList.jsp 페이지 불러오기 -->
</body>
</html>
<memberList.jsp>
<%
//1. DB접속
Context ctx = new InitialContext(); //context객체화
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Oracle");//name이 jdbc/Oracle인 Resource를 찾아 DataSource형태로 변환
Connection conn = ds.getConnection(); //DataSource를 통해 Connection 가져오기
//2. 쿼리실행
String sql = "SELECT id,pw,name,age,gender,email FROM member"; //쿼리 준비
PreparedStatement ps = conn.prepareStatement(sql);//Connection을 통해 PreparedStatement준비
ResultSet rs = ps.executeQuery(); //SELECT문은 ResultSet으로 반환됨, SELECT문은 executeQuery()로 실행
%>
<html>
<head>
<meta charset="UTF-8">
<title>회원리스트</title>
<style>
table,th,td{
border:1px solid black;
border-collapse: collapse;
padding: 5px 10px;
text-align:center;
}
</style>
</head>
<body>
<h2>회원리스트</h2>
<table>
<tr>
<th>아이디</th>
<th>비밀번호</th>
<th>이름</th>
<th>나이</th>
<th>성별</th>
<th>이메일</th>
<th>삭제</th>
</tr>
<% while(rs.next()){%> <!-- 다음값이 존재한다면 -->
<tr>
<td><%=rs.getString("id")%></td> <!-- 쿼리 반환값의 id를 테이블에 넣는다. -->
<td><%=rs.getString("pw")%></td> <!-- 쿼리 반환값의 pw를 테이블에 넣는다. -->
<td><%=rs.getString("name")%></td> <!-- 쿼리 반환값의 name을 테이블에 넣는다. -->
<td><%=rs.getString("age")%></td> <!-- 쿼리 반환값의 age를 테이블에 넣는다. -->
<td><%=rs.getString("gender")%></td> <!-- 쿼리 반환값의 gender를 테이블에 넣는다. -->
<td><%=rs.getString("email")%></td> <!-- 쿼리 반환값의 email를 테이블에 넣는다. -->
<!-- 클릭시 delete.jsp로 이동하는데 ?뒤는 파라메터 값으로 delId(값은 쿼리 반환값의 id)라는 파라메터를 보낸다. -->
<td><a href="delete.jsp?delId=<%=rs.getString("id")%>">삭제</a></td>
</tr>
<% }%>
</table>
<%
rs.close();
ps.close();
conn.close();
%>
</body>
</html>
<logout.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
//로그인 : 해당 ID와 PW를 만족하는 값을 찾아서 session에 넣는 기능
//로그아웃 : 세션에 있는 값을 지우는 기능
session.removeAttribute("loginId");//이름이 loginId인 세션값을 지우고
response.sendRedirect("index.jsp"); //index.jsp로 보낸다.
%>
<delete.jsp>
<%
String delId = request.getParameter("delId"); //name이 delId인 파라메터의 값을 변수 delId에 넣는다.
System.out.println("삭제할아이디:"+delId); //delId가 잘 들어왔는지 출력
//1.DB접속
Context ctx = new InitialContext(); //context객체화
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/Oracle");//name이 jdbc/Oracle인 Resource를 찾아 DataSource형태로 변환
Connection conn = ds.getConnection(); //DataSource를 통해 Connection 가져오기
//2.쿼리실행
String sql = "DELETE FROM member WHERE id=?"; //쿼리준비
PreparedStatement ps = conn.prepareStatement(sql); //Connection을 통해 쿼리를 실행 해줄 PreparedStatement 준비
ps.setString(1, delId); // ? 인덱스 1에 delId값 넣기
int success = ps.executeUpdate(); //쿼리실행, 성공한 쿼리개수에 따라 int로 반환
//3.자원반납
ps.close();
conn.close();
%>
<script>
<%if(success > 0){ %> //성공한 쿼리가 하나라도 있으면
alert("삭제에 성공하였습니다."); //성공 알림창 띄우기
<%}else{%> //성공한 쿼리가 하나도 없으면
alert("삭제에 실패하였습니다."); //삭제 알림창 띄우기
<%}%>
location.href="main.jsp"; //성공 실패에 관계없이 main.jsp로 이동
</script>