

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 페이지</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px;
}
input[type="submit"]{
height: 50px;
}
</style>
</head>
<body>
<h2>LOGIN</h2>
<hr/>
<form action="login" method="post">
<table>
<tr>
<th>ID</th>
<th>
<input type="text" name="id" value="" placeholder="아이디를 입력 하세요"/>
</th>
<th rowspan="2">
<input type="submit" value="login"/>
</th>
</tr>
<tr>
<th>PW</th>
<th>
<input type="password" name="pw" value="" placeholder="비밀번호를 입력 하세요"/>
</th>
</tr>
<tr>
<th colspan="3">
<input id="regist" type="button" value="회원가입"/>
<input type="button" value="아이디/비번 찾기"/>
</th>
</tr>
</table>
</form>
</body>
<script>
$('#regist').on('click',function(){
location.href='joinForm';
});
var msg = "${msg}";
if(msg != ""){
alert(msg);
}
</script>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원가입 페이지</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
}
th, td{
padding: 5px 10px;
}
</style>
</head>
<body>
<h2>회원가입 페이지</h2>
<hr/><br/>
<form action="join" method="post">
<table>
<tr>
<th>아이디</th>
<td>
<input type="text" name="id">
</td>
</tr>
<tr>
<th>비밀번호</th>
<td>
<input type="password" name="pw">
</td>
</tr>
<tr>
<th>이 름</th>
<td>
<input type="text" name="name">
</td>
</tr>
<tr>
<th>나이</th>
<td>
<input type="text" name="age">
</td>
</tr>
<tr>
<th>이메일</th>
<td>
<input type="email" name="email">
</td>
</tr>
<tr>
<th>성 별</th>
<td>
<input type="radio" name="gender" value="남자" checked>남자
<input type="radio" name="gender" value="여자">여자
</td>
</tr>
<tr>
<th colspan="2">
<input type="submit" value="회원가입"/>
</th>
</tr>
</table>
</form>
</body>
<script>
</script>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 리스트</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
padding: 5px 10px;
}
</style>
</head>
<body>
<div>
안녕하세요 ${sessionScope.loginId }님
<a href="logout">로그아웃</a>
</div>
<h3>회원 리스트</h3>
<table>
<tr>
<th>id</th>
<th>name</th>
<th>gender</th>
<th>삭제</th>
</tr>
<c:forEach items="${list }" var="member">
<tr>
<td>${member.id }</td>
<td><a href="detail?id=${member.id }">${member.name }</a></td>
<td>${member.gender }</td>
<td><a href="del?id=${member.id }">삭제</a></td>
<td></td>
</tr>
</c:forEach>
</table>
</body>
<script>
var msg = "${msg}";
if(msg != ""){
alert(msg);
}
</script>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원 상세 페이지</title>
<script src="https://code.jquery.com/jquery-3.7.0.min.js"></script>
<style>
table, th, td{
border: 1px solid black;
border-collapse: collapse;
}
th, td{
padding: 5px 10px;
}
</style>
</head>
<body>
<h2>회원 상세 페이지</h2>
<hr/><br/>
<form action="join" method="post">
<table>
<tr>
<th>아이디</th>
<th>${member.id }</th>
</tr>
<tr>
<th>비밀번호</th>
<th>${member.pw }</th>
</tr>
<tr>
<th>이 름</th>
<th>${member.name }</th>
</tr>
<tr>
<th>나이</th>
<th>${member.age }</th>
</tr>
<tr>
<th>이메일</th>
<th>${member.email }</th>
</tr>
<tr>
<th>성 별</th>
<th>${member.gender }</th>
</tr>
<tr>
<th colspan="2">
<input type="button" value="리스트" onclick="location.href='list'"/>
</th>
</tr>
</table>
</form>
</body>
<script>
</script>
</html>
package kr.co.gudi.dto;
public class MemberDTO {
private String id;
private String pw;
private String name;
private int age;
private String gender;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPw() {
return pw;
}
public void setPw(String pw) {
this.pw = pw;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
@Controller
public class MemberController {
Logger logger = LoggerFactory.getLogger(getClass());
@RequestMapping(value = "/", method = RequestMethod.GET)
public String index() {
logger.info("login page 이동");
return "index";
}
@RequestMapping(value = "/joinForm", method = RequestMethod.GET)
public String joinForm() {
logger.info("join page로 이동");
return "joinForm";
}
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(Model model, @RequestParam HashMap<String, String> params ) {
logger.info("params : "+params );
MemberService service = new MemberService();
String msg = service.join(params);
model.addAttribute("msg", msg);
return "index";
}
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(Model model, HttpSession session,
@RequestParam String id, @RequestParam String pw) {
logger.info(id+" / "+pw );
MemberService service = new MemberService();
boolean success = service.login(id, pw);
logger.info("login success : "+success);
String page = "index";
if(success) {
session.setAttribute("loginId", id);
page = "redirect:/list";
}else {
model.addAttribute("msg", "아이디 또는 비밀번호를 확인하세요!");
}
return page;
}
@RequestMapping(value = "/list")
public String list(Model model, HttpSession session) {
logger.info( "list 요청받음" );
String page = "index";
String msg = "로그인이 필요합니다.";
if(session.getAttribute("loginId") != null){
page = "list";
msg = "";
MemberService service = new MemberService();
model.addAttribute("list", service.list());
}
model.addAttribute("msg", msg);
return page;
}
@RequestMapping(value = "/del", method = RequestMethod.GET)
public String del(Model model,@RequestParam String id, HttpSession session) {
logger.info("delete 요청");
logger.info("param id : " + id);
String page = "index";
if(session.getAttribute("loginId")!= null) {
page = "redirect:/list";
MemberService service = new MemberService();
service.del(id);
}else {
model.addAttribute("msg", "로그인이 필요한 서비스 입니다.");
}
return page;
}
@RequestMapping(value = "/detail", method = RequestMethod.GET)
public String detail(Model model, HttpSession session, @RequestParam String id ) {
logger.info("상세보기 요청 : " + id);
String page = "redirect:/list";
if(session.getAttribute("loginId") != null) {
MemberService service = new MemberService();
MemberDTO member = service.detail(id);
if(member != null) {
page = "detail";
model.addAttribute("member", member);
}
}else {
page = "index";
model.addAttribute("msg" , "로그인이 필요합니다.");
}
return page;
}
@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpSession session) {
session.removeAttribute("loginId");
return "redirect:/";
}
}
public class MemberService {
Logger logger = LoggerFactory.getLogger(getClass());
public String join(HashMap<String, String> params) {
logger.info("join 요청 (service)");
String msg = "회원가입에 실패 하였습니다.";
MemberDAO dao = new MemberDAO();
int row = dao.join(params);
if(row>0) {
msg = "회원가입에 성공했습니다.";
}
return msg;
}
public boolean login(String id, String pw) {
MemberDAO dao = new MemberDAO();
return dao.login(id, pw);
}
public ArrayList<MemberDTO> list() {
MemberDAO dao = new MemberDAO();
return dao.list();
}
public void del(String id) {
MemberDAO dao = new MemberDAO();
dao.del(id);
}
public MemberDTO detail(String id) {
MemberDAO dao = new MemberDAO();
MemberDTO dto = new MemberDTO();
return dao.detail(id);
}
}
public class MemberDAO {
Logger logger = LoggerFactory.getLogger(getClass());
public Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
public MemberDAO() {
try {
Context ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MariaDB");
conn = ds.getConnection();
} catch (Exception e) {
e.printStackTrace();
}
}
public void close() {
try {
if(rs != null) { rs.close();}
if(pstmt != null) { pstmt.close();}
if(conn != null) { conn.close();}
} catch (Exception e) {
e.printStackTrace();
}
}
public int join(HashMap<String, String> params) {
logger.info("join요청 ( DAO )");
int row = 0;
String sql = "INSERT INTO member(id, pw, name, age, gender, email)"
+ "VALUES(?, ?, ?, ?, ?, ?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1,params.get("id"));
pstmt.setString(2,params.get("pw"));
pstmt.setString(3,params.get("name"));
pstmt.setInt(4,Integer.parseInt(params.get("age")));
pstmt.setString(5,params.get("gender"));
pstmt.setString(6,params.get("email"));
row = pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
return row;
}
public boolean login(String id, String pw) {
logger.info("login 요청 ( DAO )");
String sql = "SELECT id, pw FROM member WHERE id=? AND pw =?";
boolean success = false;
try {
pstmt= conn.prepareStatement(sql);
pstmt.setString(1, id);
pstmt.setString(2, pw);
rs = pstmt.executeQuery();
success = rs.next();
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
return success;
}
public ArrayList<MemberDTO> list() {
String sql = "SELECT id, name, gender FROM member";
ArrayList<MemberDTO> list = null;
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
list = new ArrayList<MemberDTO>();
while(rs.next()) {
String id = rs.getString("id");
String name = rs.getString("name");
String gender = rs.getString("gender");
logger.info(id+" / "+name+" / "+gender);
MemberDTO dto = new MemberDTO();
dto.setId(id);
dto.setName(name);
dto.setGender(gender);
list.add(dto);
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
return list;
}
public void del(String id) {
String sql = "DELETE FROM member WHERE id = ?";
int row = 0;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
row = pstmt.executeUpdate();
logger.info("삭제 개수 : "+ row);
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
}
public MemberDTO detail(String id) {
String sql = "SELECT * FROM member WHERE id = ?";
MemberDTO dto = null;
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, id);
rs = pstmt.executeQuery();
if(rs.next()) {
dto = new MemberDTO();
dto.setId(rs.getString("id"));
dto.setPw(rs.getString("pw"));
dto.setName(rs.getString("name"));
dto.setAge(rs.getInt("age"));
dto.setGender(rs.getString("gender"));
dto.setEmail(rs.getString("email"));
}
} catch (SQLException e) {
e.printStackTrace();
}finally {
close();
}
return dto;
}