로그인



회원가입페이지를 만든다는 것은 업무분석이 끝났다는 것이다.
sql
(1) 회원등급 지정

- 관리자 : 모든 권한을 이용할 수 있는 등급 / 의사결정권자
- 일반 사용자: 회원가입 시 기본
- 탈퇴한 회원: 사용자가 탈퇴해도 정보를 남겨놓는다 delete or update - D등급에서 F등급으로 내려간다.
→ 등급에 따라 보여지는 화면이 달라야한다.
→ A1, A2, A3처럼 관리자 안에서도 또 등급이 달라질 수도 있다.
(2) 회원테이블 생성


- cmd로 테이블 생성하고 commit까지 완료하기



(5) net.member package 생성

(6) MemberDTO.java
- sql문 테이블 긁어와서 멤버변수, 기본생성자 작성

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

- getter, setter 소스 자동 생성

- toString() 자동 생성

(7) MemberDAO.java
scope
임시캐비넷 번호


- 사용자가 내 서버에 요청을하면 1차적으로 공용공간에 접근한다.
- 2차로 나만의 공간에 들어간다. (임시로 나만 접근할 수 있는 번호를 준다.)
- 각 사용자를 구별할 수 있는 임시 캐비넷번호를 준다.
임시캐비넷 번호 확인방법


- get방식
- 코드상태 정상 작동되고 있다는 의미



- Application : 모든 사람이 이용할 수 있는 공용 공간
- Session : 나만 이용할 수 있는 전용 공간

- Application 저장소 : 서블릿 컨텍스트(Context)
웹어플리케이션 단위로 정보를 서버 쪽에 유지할 수 있게 하는 객체
내장객체 및 내부변수
/scope/01_scopeTest.jsp

JSP 내장객체
- JSP페이지가 서블릿에서 변환될때(.class) JSP컨테이너(Tomcat웹서버)가 자동적으로 제공
- JSP페이지 내에서 제공하는 특수한 레퍼런스(참조)타입의 변수이다.
- 객체 생성없이 바로 사용할 수 있는 JSP의 객체
1) out : 출력객체
2) pageContext : JSP페이지 자체의 Context 제공(현재페이지에서만 가능)
3) request : 요청에 관한 정보
4) response : 응답에 관한 정보
5) session : 요청에 관한 Context 제공
6) application : 서블릿 및 외부 환경 정보 Context 제공
Scope의 종류
- myweb 프로젝트에서 페이지들간에 값을 공유하기 위해 사용 (내장객체에 있는 함수를 잘 사용하면 된다.)
1) pageContext : 현재 페이지에서만 유효하다. 기본값
2) request : 부모페이지와 자식페이지에서만 유효
3) session : myweb프로젝트의 모든 페이지에서 유효 (사용자 개별 접근, 시간)
4) application : myweb프로젝트의 모든 페이지에서 유효 (모든 사용자 접근, 서버 정보)
내부변수 선언 형식- setAttribute()
1) pageContext.setAttribute("변수명", 변수 안에 넣을 값)
2) request.setAttribute("변수명", 값)
3) session.setAttribute("변수명", 값)
4) application.setAttribute("변수명", 값)
내부변수값 가져오기 - getAttribute()
1) pageContext. - getAttribute("변수명") : 페이지에서만
2) request.getAttribute("변수명") : 요청한 애들끼리만
3) session.getAttribute("변수명") : 나만
4) application.getAttribute("변수명") : 공용
※ 1 -> 4 순서대로 기억하기!
실습해보기


변수에 담기

- getAttribute함수의 내부객체 자동완성을 보면 object로 반환한다는 것을 알 수 있다. 변수에 담기 위해선 Object 안에 담아야한다.


로그인 하기위해선 session영역을 사용해야한다.

내부변수 삭제 - removeAttribute()

- null값이 나온다.

웹페이지의 SCOPE (유효범위)
02_scopeTest.jsp
페이지 이동 종류
1) <a href=""></a>
2) location.href=""
3) <form action=""></form>
4) <jsp:forward page=""></jsp:forward>
5) response.sendRediredt("")
- 값 세팅

02_scopeResult.jsp
1) <a href=""></a>





3) location.href=""



4) <jsp:forward page=""></jsp:forward>


➡️ request 내부변수는 부모페이지(02_scopeTest.jsp)와 자식페이지(02_scopeResult.jsp)에서만 유효한다.
➡️ bbsList 페이지에서는 사용할 수 없다.
5) response.sendRediredt("")
JSP 내부객체에 있는 함수


★ 6) response.sendRediredt("")


➡️ 4)<jsp:forward page=""></jsp:forward> 보다 6)번을 더 많이 사용해야한다.
- request만 신경써서 사용하면 된다.


웹서버에서 사용자들이 입력한 값을 서블릭에서는 request를 이용해 값을 불러올 수 있다. request에 모두 저장된다.
session 내장객체
03_sessionTest.jsp
아이디가 없을 때 서버에 요청을 하면 임시로 캐비넷이 생성된다. (ex.200번)그 캐비넷 번호가 서버에 저장이되고(ex.200번) 그 이후엔 다시 쓸 수 없다.
아이디가 생성되면 생성된 아이디에 캐비넷이 발급(ex.107번)되는데 그 이후엔 계속 그 캐비넷 번호로 계속 저장된다.(ex.107번) 아이디가 생성된후 캐비넷이 생성되면 페이지를 이동해도 캐비넷 번호는 계속 유지된다.메일로 가도 107번, 다른 페이지로 이동해도 107번이 유지된다.
- HttpSession session
- 요청한 사용자에게 개별적으로 접근(나만의 캐비넷, 방) - 이름을 만들어줌
- 선언한 세션변수는 전역적 상태로 유지된다. 즉, 내 방번호
- 요청한 정보의 상태를 유지하기 위해서
- 일정시간동안 이벤트가 발생되지 않으면 자동 삭제 (일정시간이 지나면 재로그인 해야되는 것)
세션 내장객체에서 발급해주는 임시 아이디 - getId()


세션변수

세션변수값 가져오기
getAttribute()


세션변수 강제 제거 01 (로그아웃할 때) → null값
removeAttribute()


세션변수 강제 제거 02 세션영역에 있는 모든값 전부 강제 삭제
session.invalidate();
removeAttribute(), invalidate() 둘 다 사용할 수 있다.
세션시간


세션시간 변경


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



- 이부분을 추가해준다.

application
04_applicationTest.jsp
application 내장객체
- ServletContext application
- 사용자 모두가 공유하는 전역적 의미의 객체
- 서버에 대한 정보를 관리하는 객체


- 물리적인 경로가 나온다


aplication 내부 변수


response 내장객체

로그인/로그아웃 연습
sql

- cmd에서 행추가하기

로그인 sql문 작성

- 아이디와 비밀번호가 일치하면 회원등급을 가져올 것이다
- (1등급인 사람에게는 1등급화면을 보여주고, 2등급인 사람에게는 2등급만 볼 수 있는 화면을 보여줄 것이다.)
- 유효한 회원 - A1,B1,C1,D1 만 조건을 따로 주어야 한다.(비회원과 탈퇴회원은 제외)
로그인 DAO 작성


- 물음표에 이 값을 넣어주면 된다.

- 기존 bbs 폴더안에 있던 ssi.jsp를 복사해와서 저 부분만 바꾸어준다.

- loginForm.jsp에서 ssi.jsp를 include해주고, form이 전송될 수 있도록 action=""기능을 넣어준다.
- loginProc.jsp로 loginForm이 보내진다.
실행확인
- webmaster / A1 - 로그인 성공



- itwill / D1 - 로그인 성공



- user1 / F1 - (탈퇴회원) 로그인 실패



⚠️ 에러 : 로그인 실패 오류 해결방법

- cmd 창에서 테이블 commit; 해준 후 다시 실행시키니 정상 로그인 되었다.