조컴퓨터

201103 JSP 12 - JSP 미니 프로젝트 (세션_로그인) 본문

자바 웹개발자 과정/JSP

201103 JSP 12 - JSP 미니 프로젝트 (세션_로그인)

챠오위 2020. 11. 3. 23:30

웹페이지의 SCOPE(유효범위)

 

1. 내부객체

   1) out

   2) pageContext : JSP 페이지 자체의 Context 제공

   3) request : 요청에 관한 정보

   4) session : 요청에 관한 Context 제공

   5) response : 응답에 관한 정보

   6) application : 서블릿 및 외부 환경 정보 Context 제공

 

2. SCOPE의 종류

   - myweb 프로젝트에서 페이지들 간에 값을 공유하기 위해 사용

   1) page : 현재 페이지에서만 유효. 기본값

   2) request : 부모 페이지와 자식 페이지에서만 유효

   3) session : 모든 페이지에서 유효 (사용자 개별 접근, 시간)

   4) application : 모든 페이지에서 유효 (모든 사용자 접근, 서버 정보)

 

 

3-1. 내장 변수 선언 형식 : 별도의 자료형이 없다.

   1) pageContext.setAttribute("변수명", 값)

   2) request.setAttribute("변수명", 값)

   3) session.setAttribute("변수명", 값)

   4) application.setAttribute("변수명", 값)

 

3-2. 각 SCOPE의 변수값 가져오기

   1) pageContext.getAttribute("변수명")

   2) request.getAttribute("변수명")

   3) session.getAttribute("변수명")

   4) application.getAttribute("변수명")

 

3-3. 각 SCOPE의 변수 삭제하기

   1) pageContext.removeAttribute("변수명")

   2) request.removeAttribute("변수명")

   3) session.removeAttribute("변수명")

   4) application.removeAttribute("변수명")

 

 

예시1) 

 

//각 SCOPE에 내장변수를 이용해서 값 올리기
pageContext.setAttribute("kor", 100);
request.setAttribute("eng", 200);
session.setAttribute("mat", 300);
application.setAttribute("uname", "SOLDESK");
	
//SCOPE영역에 값 가져오기
Object obj=pageContext.getAttribute("kor");
int kor     =(int)obj;
int eng     =(int)request.getAttribute("eng");
int mat     =(int)session.getAttribute("mat");
String uname=(String)application.getAttribute("uname");
	
//출력
out.print("1)pageContext 영역: " + kor + "<hr>");
out.print("2)request 영역: " + eng + "<hr>");
out.print("3)session 영역: " + mat + "<hr>");
out.print("4)application: " + uname + "<hr>");

 

결과값

 

 

 

예시2) 

 

//각 SCOPR 변수 삭제
pageContext.removeAttribute("kor");
request.removeAttribute("eng");
session.removeAttribute("mat");
application.removeAttribute("uname");
	
out.print("<p>* SCOPE 영역 변수 삭제 후 *</p>");
out.print("1)pageContext 영역: " + pageContext.getAttribute("kor") + "<hr>");
out.print("2)request 영역: " + request.getAttribute("eng") + "<hr>");
out.print("3)session 영역: " + session.getAttribute("mat") + "<hr>");
out.print("4)application: " + application.getAttribute("uname") + "<hr>");

 

결과값

 

 

 

예시3) request.setAttribute( )

 

//request.setAttribute()
request.setAttribute("aver", 95);
out.print(request.getAttribute("aver"));
	
out.print("<hr>");

 

결과값

 

 

 

예시4) request.getParameter( )

 

① 

 

//request.getParameter()
out.print(request.getParameter("total"));

 

결과값

 

 

 

② 주소 뒤에 total값 추가

 

//request.getParameter()
//네트워크를 통해서 넘어온 값
//http://localhost:9090/myweb/scope/scopeTest.jsp?total=85
out.print(request.getParameter("total"));

 

결과값

 

 

 

 

4. 페이지 이동

   1) <a href=""></a>

   2) <form action=""></form>

   3) location.href=""

   4) <jsp:forward page=""></jsp:forward> 액션태그

   5) response.sendRedirect("")

 

 

예시) 

 

	<!-- 1) request.getAttribute("eng")는 null값 -->
	<a href="scopeResult.jsp">[SCOPE 결과 페이지로 이동]</a>
	
	
	<!-- 2) request.getAttribute("eng")는 null값 -->
	<form action="scopeResult.jsp">
		<input type="submit" value="[SCOPE 결과 페이지로 이동]">
	</form>
	
	
	<!-- 3) request.getAttribute("eng")는 null값 -->
	<script>
		alert("[SCOPE 결과 페이지로 이동]");
		location.href="scopeResult.jsp";
	</script>
	

	<!-- 4) 액션 태그로 이동 
			request.getAttribute("eng")는 200 접근 가능 -->
	<jsp:forward page="scopeResult.jsp"></jsp:forward>


<%
	//5) 
	//   request.getAttribute("eng")는 null값
	response.sendRedirect("scopeResult.jsp");
	
	//6) 페이지 이동
	//   request.getAttribute("eng")는 200 접근 가능
	String view="scopeResult.jsp";
	RequestDispatcher rd=request.getRequestDispatcher(view);
	rd.forward(request, response);
	
/*
	           [scopeTest.jsp에서 scopeResult.jsp로 이동한 경우]
	-------------------------------------------------------------
	page		○		x
	request		○		○ 또는 x
	session		○		○
	application	○		○
*/
%>	

 

 

 

 

Session 세션

1. session 내부 객체

   - HttpSession session

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

   - 요청한 정보의 상태를 유지하기 위해서 선언된 세션 변수는 전역적인 성격으로 유지된다.

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

 

 

2. 세션 시간

 

1) 현재 세션 유지 시간

 

out.print("현재 세션 유지 시간:");
out.print(session.getMaxInactiveInterval());
out.print("초(30분)");
out.print("<hr>");

 

결과값 

 

1800

 

※ 1800초이므로 30분이다.

 

 

2) 변경된 세션 유지 시간

 

session.setMaxInactiveInterval(60*10);
	
out.print("변경된 세션 유지 시간:");
out.print(session.getMaxInactiveInterval());
out.print("초(10분)");
out.print("<hr>");

 

결과값

 

60*10=600초(10분)

 

 

3) /WEB-INF/web.xml 배치관리자에서 세션시간 변경

 

<!-- 세션 유지 시간 설정(20분) -->
<session-config>
	<session-timeout>20</session-timeout>
</session-config>

 

 

3. 세션 변수

   - 별도의 자료형이 없다.

   - myWeb 프로젝트의 모든 페이지에서 공유되는 전역 변수

 

//세션 변수 선언
session.setAttribute("s_id", "soldesk");
session.setAttribute("s_pw", "12341234");
	
    
//세션 변수값 가져오기
Object obj=session.getAttribute("s_id");
String s_id=(String)obj;
String s_pw=(String)session.getAttribute("s_pw");
	
out.print("세션변수 s_id :" + s_id + "<hr>");
out.print("세션변수 s_pw :" + s_pw + "<hr>");
	
    
//세션 변수 강제 제거(로그아웃) -> null
session.removeAttribute("s_id");
session.removeAttribute("s_pw");

out.print("세션 변수 삭제 후 <hr>");
out.print("세션 변수 s_id :" + session.getAttribute("s_id"));
out.print("<hr>");
out.print("세션 변수 s_pw :" + session.getAttribute("s_pw"));
out.print("<hr>");
	

//세션 영역에 있는 모든 값을 전부 강제 삭제
session.invalidate();
	
    
//세션 객체에서 발급해 주는 아이디
out.print("세션 임시 아이디 : ");
out.print(session.getId());
out.print("<hr>");

 

 

4. application 내부 객체

   - ServletContext application

   - 서버에 대한 정보를 관리하는 객체

  - 사용자 모두가 공유하는 전역적인 성격의 객체

 

예시) 실제 물리적 경로

 

application.getRealPath();

//사용 지양
request.getRealPath();

 

결과값 예시

 

웹경로 http://localhost:9090/myweb/bbs

실제경로 D:\java0812\workspace\myweb\WebContent\bbs

 

 

5. response 내부 객체

   - 요청한 사용자에게 응답할 때

 

//페이지 이동
response.sendRedirect("")
	
//요청한 사용자에게 응답 메세지 전송(AJAX에서 많이 사용)
PrintWriter write=response.getWriter();

 

 

 

 

 

1. 로그인 개발환경 구축

 

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,     -- 우편번호, 12345
    address1 VARCHAR(255) NULL,     -- 주소 1
    address2 VARCHAR(255) NULL,     -- 주소 2(나머지주소)
    job      VARCHAR(20)  NOT NULL, -- 직업
    mlevel   CHAR(2)      NOT NULL, -- 회원 등급, A1, B1, C1, D1, E1, F1
    mdate    DATE         NOT NULL, -- 가입일    
    PRIMARY KEY (id)
);

 

 

2) 테스트용 행 추가

 

insert into member(id, passwd, mname, tel, email, zipcode, address1, address2, job, mlevel, mdate)
values('webmaster', '12341234', '솔데스크'
       , '123-4567', 'soldesk3@naver.com'
       , '12345', '서울시 종로구 관철동', '코아빌딩5층'
       , 'A02', 'A1', sysdate);

insert into member(id, passwd, mname, tel, email, zipcode, address1, address2, job, mlevel, mdate)
values('soldesk', '12341234', '솔데스크'
       , '123-4567', 'soldesk@naver.com'
       , '12345', '서울시 종로구 관철동', '코아빌딩5층'
       , 'A01', 'D1', sysdate);

insert into member(id, passwd, mname, tel, email, zipcode, address1, address2, job, mlevel, mdate)
values('user0', '12341234', '솔데스크'
       , '123-4567', 'user@naver.com'
       , '12345', '서울시 종로구 관철동', '코아빌딩5층'
       , 'A01', 'F1', sysdate);

 

 

3) 아이디 중복 확인

 

select count(*) from member where id='webmaste';

 

 

4) 로그인 성공하면 회원등급 가져오기

   (단, 비회원(E1), 탈퇴회원(F1)은 제외)

 

select mlevel
from member
where id='soldesk' and passwd='12341234' 
and mlevel in ('A1', 'B1', 'C1', 'D1');