본문 바로가기
Backend

09월 11일 수 | JSP 13 - JSP 미니 프로젝트 Ⅰ- 로그인

by 구라미 2019. 9. 11.

Session

 

Session 내부객체

- HttpSession session
- 요청한 사용자에게 개별적으로 접근

- 선언된 세션변수는 전역적 성격으로 유지된다.

- 일정 시간동안 이벤트가 발생되지 않으면 자동 삭제

 

 

 

Session이 유지되는 시간

out.print(session.getMaxInactiveInterval());

이것으로 세션이 유지되는 시간을 알 수 있다.

결과 1800이라고 나왔는데

1800초이다. -> 30분

 

 

 

Session 시간 변경

session.setMaxInactiveInterval(숫자);

get을 set으로 변경해주고, 바꿀시간의 숫자형 인자를 넣어주면된다.

 

 

 

배치관리자

배치관리자 /WEB-INF/web.xml

세션시간설정, 환경설정 등 지정

web.xml이 수정되면 반드시 서버를 재시작할 것!

 

 

로그인 구현

 

1. SQL문으로 테이블 생성하기

-- 문제1) 멤버 테이블을 생성하시오.
CREATE TABLE member (
  id        VARCHAR(10) NOT NULL
 ,passwd   VARCHAR(10)  NOT NULL
 ,mname    VARCHAR(20)  NOT NULL
 ,tel      VARCHAR(14)  NULL
 ,email    VARCHAR(50)  NOT NULL UNIQUE
 ,zipcode  VARCHAR(7)   NULL  -- 우편번호
 ,address1 VARCHAR(255) NULL  -- 
 ,address2 VARCHAR(255) NULL  -- 나머지주소
 ,job      VARCHAR(20)  NOT NULL -- 직업
 ,mlevel      CHAR(2)   NOT NULL  -- 회원등급 A1, B1, C1, D1, E1, F1
 ,mdate    DATE         NOT NULL
 ,primary key(id) -- pmkey하려면 여기 괄호안에 추가 작성
);


-- 문제2) 테스트용 행추가 3개를 하시오.
INSERT INTO member 
( id ,passwd ,mname ,tel ,email ,zipcode ,address1 ,address2 ,job ,mlevel ,mdate)
VALUES ('kimminsu01','1234','김민수','010-1234-1234','kimmin@gmail.com','78945','서울시 동작구','이수자이1010','학생','D1', SYSDATE);

INSERT INTO member 
( id ,passwd ,mname ,tel ,email ,zipcode ,address1 ,address2 ,job ,mlevel ,mdate)
VALUES ('yjlee','1234','이영주','010-9876-5432','yjlee@gmail.com','12345','서울시 동대문구','신설동 아이파크','디자이너','D1', SYSDATE);

INSERT INTO member 
( id ,passwd ,mname ,tel ,email ,zipcode ,address1 ,address2 ,job ,mlevel ,mdate)
VALUES ('hjpark','1234','박희정','010-4567-7894','hjpark@gmail.com','45612','서울시 노원구','상계동 주공','회사원','D1', SYSDATE);
SELECT * FROM member;
commit; -- 커밋

 

 

 

 

2. 서버단 설계하기

DAO, DTO

 

1) memberDAO

package net.member;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import net.member.MemberDTO;
import DBPKG.DBOpen;

public class MemberDAO {
	
	//1) Login 
	public String loginProc(MemberDTO dto) {
		String mlevel = null;
		
		try {
			//1. DB연결
			Connection con=DBOpen.getConnetion();
			StringBuilder sql = new StringBuilder();
			
			//2. Select SQL문 작성
			sql.append(" SELECT mlevel ");
			sql.append(" FROM member ");
			sql.append(" WHERE id=? AND passwd=? ");
			sql.append(" AND mlevel IN ('A1','B1','C1','D1') ");
			
			//3. SQL문 변환
			PreparedStatement pstmt = con.prepareStatement(sql.toString());
			pstmt.setString(1, dto.getId());
			pstmt.setString(2, dto.getPasswd());
			
			//4. 결과를 rs에 저장, ResultSet은 결과를 저장하는 하나의 집합
			ResultSet rs = pstmt.executeQuery();
			
			//5. rs의 내용을 next로 읽기
			if(rs.next()){
				mlevel = rs.getString("mlevel"); 				
			} else{
				mlevel = null;
			}// if end
			
			
		} catch (Exception e) {
			System.out.println("로그인 실패!: "+e);
		}
		
		return mlevel;
	}
	

}

 

 

2) memberDTO

package net.member;

public class MemberDTO {

	//member 테이블생성시 사용했던 것 가져오기.
	  private String id;
	  private String passwd;
	  private String mname;
	  private String tel;
	  private String email;
	  private String zipcode;
	  private String address1; 
	  private String address2;
	  private String job;
	  private String mlevel;
	  private String mdate;
	  
	  
		//생성자
		public MemberDTO() {
			
		}
		
		//Getter & Setter
		public String getId() {
			return id;
		}
		public void setId(String id) {
			this.id = id;
		}
		public String getPasswd() {
			return passwd;
		}
		public void setPasswd(String passwd) {
			this.passwd = passwd;
		}
		public String getMname() {
			return mname;
		}
		public void setMname(String mname) {
			this.mname = mname;
		}
		public String getTel() {
			return tel;
		}
		public void setTel(String tel) {
			this.tel = tel;
		}
		public String getEmail() {
			return email;
		}
		public void setEmail(String email) {
			this.email = email;
		}
		public String getZipcode() {
			return zipcode;
		}
		public void setZipcode(String zipcode) {
			this.zipcode = zipcode;
		}
		public String getAddress1() {
			return address1;
		}
		public void setAddress1(String address1) {
			this.address1 = address1;
		}
		public String getAddress2() {
			return address2;
		}
		public void setAddress2(String address2) {
			this.address2 = address2;
		}
		public String getJob() {
			return job;
		}
		public void setJob(String job) {
			this.job = job;
		}
		public String getMlevel() {
			return mlevel;
		}
		public void setMlevel(String mlevel) {
			this.mlevel = mlevel;
		}
		public String getMdate() {
			return mdate;
		}
		public void setMdate(String mdate) {
			this.mdate = mdate;
		}

		
		//toString()
		@Override
		public String toString() {
			return "MemberDTO [id=" + id + ", passwd=" + passwd + ", mname="
					+ mname + ", tel=" + tel + ", email=" + email
					+ ", zipcode=" + zipcode + ", address1=" + address1
					+ ", address2=" + address2 + ", job=" + job + ", mlevel="
					+ mlevel + ", mdate=" + mdate + "]";
		}
		
}

 

 

 

 

 

 

3. 로그인폼

1) loginForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="auth.jsp" %>
<%@ include file="../header.jsp"%>
<!-- 본문 시작 -->

<div class="container-fluid">
<h2>Login</h2>
<%if(s_id.equals("guest") || s_passwd.equals("guest")|| s_mlevel.equals("guest")){
	
 %>
<form name="loginfrm" method="post" action="loginProc.jsp"
	onsubmit="return loginCheck(this)">

	<table class="table">
		<tr>
			<th>아이디</th>
			<td><input type="text" name="id" size="10" placeholder="아이디를 입력하세요."
				required class="form-control" ></td>
		</tr>
		<tr>
			<th>비밀번호</th>
			<td><input type="password" name="passwd" size="30" placeholder="비밀번호를 입력하세요."
				required class="form-control"></td>
		</tr>
		<tr>			
			<td colspan="2">
				아이디 저장
				<span>회원가입</span>
				<span>아이디/비밀번호 찾기</span>
			</td>
		</tr>
		<tr>
			<td colspan="2">
			<input type="submit" value="로그인" class="btn btn-primary">
			<input type="reset"  value="취소" class="btn btn-outline-secondary">			
			</td>
		</tr>
	</table>
</form>
<%
} else { //로그인 성공했다면.
	out.println("<strong>" + s_id + "</strong>님");
 	out.println("<a href='logout.jsp'>[로그아웃]</a>");
	out.println("<br><br>");
	out.println("[회원정보수정]");
	out.println("[회원탈퇴]");
}
%>
</div>
<!-- 본문 끝 -->
<%@ include file="../footer.jsp"%>

 

2) loginProc.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ include file="ssi.jsp" %>
<%@ include file="../header.jsp"%>
<!-- 본문 시작 bbsReplyProc.jsp-->
<%
	//1) 사용자가 입력한 정보를 변수에 담기
	String id = request.getParameter("id").trim();
	String passwd  =request.getParameter("passwd").trim();
	
	//2) 1)의 내용을 dto객체에 담기
	dto.setId(id);
	dto.setPasswd(passwd);
	String mlevel = dao.loginProc(dto);
	//3) 2)의 내용을 tb_bbs테이블에 추가하기
		
	//4) 글쓰기 성공 후 bbsList.jsp로 이동하기
	if(mlevel == null){
		out.println("<p>아이디/비밀번호를 확인해주세요!</p>");
		out.println("<p><a href='javascript:history.back()'>[다시시도]</a></p>");
	}else{
		/* out.println(id+"<span>님 환영합니다.</span>");
		out.println(mlevel); */
		//다른 페이지에서 로그인 상태를 공유할 수 있도록
		session.setAttribute("s_id", id);
		session.setAttribute("s_passwd", passwd);
		session.setAttribute("s_mlever", mlevel);
		
		//첫페이지로 이동
		String root = Utility.getRoot();
		response.sendRedirect(root+"/index.jsp");
		
		
	}//if end	
%>


<!-- 본문 끝 --> 
<%@ include file="../footer.jsp"%>

 

 

 

 

 

 

 

 

 

 

댓글