JSP day10
Java Beans(자바 빈즈) 활용하여 로그인 로직 만들기(2)
지난 시간에 이어 이번 시간에는 DB와 연동하여 자바빈즈를 활용한 로그인 로직을 만들어보자.
먼저 로그인 로직에서 사용될 DTO, DAO 객체를 만든다.
MemberDTO.java
package com.koreait.member;
import java.util.Arrays;
public class MemberDTO {
private int idx;
private String userid;
private String userpw;
private String username;
public int getIdx() {
return idx;
}
public void setIdx(int idx) {
this.idx = idx;
}
public String getUserid() {
return userid;
}
public void setUserid(String userid) {
this.userid = userid;
}
public String getUserpw() {
return userpw;
}
public void setUserpw(String userpw) {
this.userpw = userpw;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
}
MemberDAO.java
package com.koreait.member;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;
import com.koreait.db.Dbconn;
public class MemberDAO {
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs;
String sql = "";
public MemberDTO login(MemberDTO member) throws SQLException {
try {
conn = Dbconn.getConnection();
sql = "select mem_idx, mem_name from tb_member where mem_userid=? and mem_userpw=?";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, member.getUserid());
pstmt.setString(2, member.getUserpw());
rs = pstmt.executeQuery();
if (rs.next()) {
member.setIdx(rs.getInt("mem_idx"));
member.setUsername(rs.getString("mem_name"));
return member;
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
DAO에서는 login 메소드를 만들어 SQL문을 수행하고 수행 결과가 있다면 결과의 mem_idx, mem_name를 MemberDTO 객체에 넣어주게되고 나중에 jsp 페이지에서 호출하면 MemberDTO 객체에 저장된 데이터를 사용할 수 있다.
login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String userid = null;
String name = null;
if(session.getAttribute("userid") != null){
userid = (String)session.getAttribute("userid");
name = (String)session.getAttribute("name");
}
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인</title>
</head>
<body>
<h2>로그인</h2>
<%
if(userid == null){
%>
<form method="post" action="login_ok.jsp">
<p>아이디 : <input type="text" name="userid"></p>
<p>비밀번호 : <input type="password" name="userpw"></p>
<p><input type="submit" value="로그인"></p>
<p>회원이 아니신가요? <a href='./regist.jsp'>회원가입</a></p>
</form>
<%
}else{
%>
<h3><%=userid%>(<%=name%>)님 환영합니다.</h3>
<p>
<input type="button" value="커뮤니티" onclick="location.href='./board/list.jsp'">
<input type="button" value="정보수정" onclick="location.href='info.jsp'">
<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">
</p>
<%
}
%>
</body>
</html>
먼저 login.jsp 페이지를 살펴보면 페이지에 처음 진입하면 세션 유무를 확인하는데, 만약 세션이 없으면 폼태그가 포함된 html 화면을 보여주게되고 폼태그를 활용하여 post 방식으로 데이터를 login_ok.jsp로 보내주게된다.
세션이 있을 경우 세션에는 로그인한 유저의 아이디와 이름을 갖고 있어 else{}구문을 보여준다.
login_ok.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<jsp:useBean class="com.koreait.member.MemberDTO" id="member"/>
<jsp:setProperty property="userid" name="member"/>
<jsp:setProperty property="userpw" name="member"/>
<jsp:useBean class="com.koreait.member.MemberDAO" id="memberDAO"/>
<%
if((member = memberDAO.login(member)) != null){
session.setAttribute("userid", member.getUserid());
session.setAttribute("name", member.getUsername());
session.setAttribute("idx", member.getIdx());
%>
<script>
alert('로그인되었습니다.');
location.href="login.jsp";
</script>
<%
}else{ // 로그인 실패
%>
<script>
alert('아이디 또는 비밀번호를 확인하세요');
history.back();
</script>
<%
}
%>
login_ok.jsp에서는 먼저 com.koreait.member 패키지에 MemberDTO와 MemberDAO class를 생성하여 객체화 시켜주고 login.jsp에서 받은 데이터를 MemberDTO로 보내주게된다.
memberDAO객체 내 login() 메소드를 호출하여 리턴값이 null이면 로그인이 실패되어 alert 경고와 이전페이지로 돌아가게되고 리턴값이 null이 아니라면 MemberDTO에서 userid, username, useridx를 받아 세션으로 생성해준다.
logout.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.invalidate();
%>
<script>
alert('로그아웃 되었습니다');
location.href='login.jsp';
</script>
로그아웃 페이지는 간단하게 세션을 지우는것으로 처리하였다.
결과 확인
로그인 페이지
로그인 성공 페이지