[ITWILL : JSP]Javabean 2 : 로그인,로그아웃페이지만들기

ITWILL학원 : 24강 JSP기초 BY 정규태강사

자바빈 프로젝트 1 : 회원가입페이지만들기
자바빈 프로젝트 2 : 로그인 및 로그아웃페이지만들기
자바빈 프로젝트 3 : 회원정보조회 및 수정페이지만들기

1. 로그인폼페이지 작성

1
2
3
4
5
6
7
8
9
<fieldset>
<legend>로그인</legend>
<form action="loginPro.jsp" method="post" name="fr">
아이디 <input type="text" name="id" required ><br>
비밀번호 <input type="password" name="pw"><br>
<input type="submit" value="로그인하기">
<input type="button" value="회원가입하기" onclick="location.href='insertForm.jsp'">
</form>
</fieldset>

2. 로그인프로페이지 작성

파라미터를 저장할 때 세가지 방법이 있다.

  1. 파라미터 사용 : getParameter()
  2. 자바빈객체사용 : Javabean jb = new Javabean(), jb.set변수()
  3. 액션태그 사용 : useBean(), setProperty()

자세히 : 자바빈기초

  • getParameter() : 주소줄과 폼태그에 작성한 INPUT은 getParameter로 가져온다.
  • getAttribute() : 세션, 페이지에서 저장한 값들은 getAttribute로 가져온다.

이 중 로그인 페이지에선 파라미터를 사용할 예정이다.

로그인페이지 작성 순서

  1. 한글처리 & 파라미터저장
    • 1-1. 파라미터저장 -> 파라미터사용
    • 1-2. 파라미터저장 -> 액션태그사용
  2. 로그인처리 -> DAO에서 처리
    • why? DB와 관련된 모든 사항은 DAO에서 처리하니까.
    • 로그인 메서드는 DB에서 해당 값이 있는지 체크하고 결과를 리턴
    • 리턴값은 정수형 데이터값 사용(1-로그인처리, 0-비번오류, (-1)-아이디없음)
  3. 결과(result가 -1,0,1)에 따른 페이지 이동처리
    • result = 1 : 아이디정보를 세션값으로 저장(키값, 저장할 데이터이름), main.jsp로 이동
    • result = 0 : 비번불일치 알림창, history.back()
    • result = -1 : 없는아이디 알림창, history.back()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%//1. 한글처리
request.setCharacterEncoding("UTF-8");
//1-1. 파라미터사용 : 전달된 파라미터값 저장(아이디,비번)
String id = request.getParameter("id");
String pw = request.getParameter("pw");
%>
<!--1-2.액션태그사용 : 전달된 파라미터값 저장(아이디,비번)
`useBean`객체생성(id값 아무거나 작성해도 됨) -> `setProperty`로 파라미터저장
<jsp:useBean id="mb" class="com.itwillbs.member.MemberBean" />
<jsp:setProperty property="*" name="mb"/>
-->

<% //2. 로그인처리 -> DAO에서 처리 따라서 객체만 생성
MemberDAO mdao = new MemberDAO();
mdao.idCheack(id, pw);

//3. 결과(result가 -1,0,1)에 따른 페이지 이동처리
if(result == 1){
//3-1. 아이디정보를 세션값으로 저장(키값, 저장할 데이터이름)
session.setAttribute("id", id); //object자리에 string을 담았기에 업캐스팅발생
response.sendRedirect("main.jsp");
}else if(result == 0){
%>
<script type="text/javascript">
alert("비밀번호가 일치하지 않습니다");
history.back();
</script>
<%
}else{
%>
<script type="text/javascript">
alert("없는 아이디입니다");
history.back();
</script>
<%
}
%>

3. DAO페이지 작성

기존에 만들었던 MemberDAO를 그대로 가져온 뒤 idCheck()메서드만 생성하면 된다.

기존 MemberDAO 태그

순서

  1. 드라이브로드 디비연결
  2. SQL & pstmt 생성
  3. 실행 -> rs저장
  4. 데이터 처리
    • 왜 while이 아닌 if인가? where절에서 id는 pk조건을 가지고 있으므로 중복이 없기때문.
  5. 세션정보를 만들 수 있을까?
    • session.setAttribute();
    • 만들 수 없다. why? session은 jsp내장객체이다.
    • java에서 사용할 수 없지만 추후 서블릿을 통해 사용할 수 있다.
    • 그래서 지금은 main.jsp페이지에서 세션만들거임.
  6. 자원해제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public int idCheack(String id, String pw){
int result = -1;
try {
//4-1. 드라이브로드 디비연결
con = getCon();
//4-2. SQL & pstmt 생성
sql = "select pw from itwill_member where id=?";
pstmt = con.prepareStatement(sql);
pstmt.setString(1, id);
//4-3. 실행 -> rs저장
rs = pstmt.executeQuery();
//4-4. 데이터 처리
//왜 while이 아닌 if인가? where절에서 id는 pk조건을 가지고 있으므로 중복이 없기때문
if(rs.next()){
if(pw.equals(rs.getString("pw"))){
result = 1;
System.out.println("아이디,비번일치 = 로그인성공(1)");
//4-5. 세션정보를 만들 수 있을까? 만들 수 없다.
}else{
result = 0;
System.out.println("아이디있지만 비번다름 (0)");
}
}else{
result = -1;
System.out.println("아이디,비번없음 (-1)");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally { //4-6. 자원해제
closeDB();
}
return result;
}//idCheck닫힘

4. main 페이지작성 후 로그아웃 페이지 연결하기.

순서

  1. 메인페이지, 한글처리 파라미터 저장
  2. 세션생성
  3. 메인페이지에 로그아웃버튼을 만들고 로그아웃페이지에 연결한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%//1.한글처리, 파라미터 (세션생성)
request.setCharacterEncoding("UTF-8");
String id = (String) session.getAttribute("id");//object를 string으로 다운캐스팅
//1-1. id없이는 진입불가, id없는 경우 로그인페이지로 이동
if(id == null){
response.sendRedirect("loginForm.jsp");
}
%>

<h2><%=id %>님 환영합니다.</h2>

//2. 버튼생성
<input type="button" value="회원정보조회" onclick="location.href='memberinfo.jsp'">
<input type="button" value="회원정보수정" onclick="location.href='updateForm.jsp'">
<input type="button" value="로그아웃" onclick="location.href='logout.jsp'">
<input type="button" value="회원탈퇴" onclick="location.href='deleteForm.jsp'">

4-1. 로그아웃페이지작성

메인페이지 연결한 로그아웃페이지를 만든다.

1
2
3
4
5
6
7
8
<%
session.invalidate();
System.out.println("로그아웃성공");
%>
<script type="text/javascript">
alert("정상적으로 로그아웃 되었습니다");
location.href="loginForm.jsp";
</script>