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"%>
'Backend' 카테고리의 다른 글
09월 23일 월 | JSP 16 - JSP 미니 프로젝트 Ⅰ- cafe24 호스팅 (0) | 2019.09.23 |
---|---|
09월 19일 목 | JSP 15 - JSP 미니 프로젝트 Ⅰ- 호스팅, 갤러리 (0) | 2019.09.19 |
09월 10일 화 | JSP 12 - JSP 미니 프로젝트 Ⅰ- 세션,리퀘스트 (0) | 2019.09.10 |
09월 09일 월 | JSP 11 - JSP 미니 프로젝트 Ⅰ- 검색, 페이징 (0) | 2019.09.09 |
09월 06일 금 | JSP 10 - JSP 미니 프로젝트 Ⅰ- 답글쓰기 (DB연결) (0) | 2019.09.06 |
댓글