22.08.01 - [ WAS ] getContextPath() , 페이지 요청 조건 제한 , 정보변경(UPDATE)
-- Index --
1. HTTP servlet 메서드의 종류 | 2. req.getContextPath() | 3. 페이지 요청 조건 제한 | 4. 회원정보변경 |
request 객체의 메서드 확인 | 프로젝트 최상단 경로 | 세션에 data있는지 체크 | UPDATE 작업 진행 |
1. HTTP servlet 메서드의 종류
# request.getContextPath() = 프로젝트 Path (콘텍스트 path)만 가져옵니다.
- 예) http://localhost:8080/project/list.jsp
- [return] /project
# request.getRequestURI() = 프로젝트 + 파일경로까지 가져옵니다.
- 예) http://localhost:8080/project/list.jsp
- [return] /project/list.jsp
- String url = request.getRequestURI.split("/");
- String Name = url[url.length -1]; // list.jsp 반환
# request.getRequestURL() = 전체 경로를 가져옵니다. (L만 바뀜)
- 예) http://localhost:8080/project/list.jsp
- [return] http://localhost:8080/project/list.jsp
# request.ServletPath() = 파일명만 가져옵니다.
- 예) http://localhost:8080/project/list.jsp
- [return] /list.jsp
# request.getRealPath("") = 서버 or 로컬 웹 애플리케이션 절대경로 가져옵니다.
- 예) http://localhost:8080/projectname/list.jsp
- [return] c:\project\webapps\projectname\
# request.getScheme() = 사용하는 요청 프로토콜을 가져옵니다. https, http, ftp ...
- 예) http://localhost:8080/project/list.jsp
- [return] http
# request.getServerName() = 서버 이름
- [return] localhost
# request.getServerPort() = 서버 포트
- [return] 8080
2. req.getContextPath();
- context라는 용어의 의미 -
- 누구의 구역 이런 의미로 해석하면 된다.
- 이 프로젝트의 구역 이런 느낌
- 메인 페이지 url을 직접 타이핑해주어도 되지만. context를 활용해서 사용하자
프로젝트의 최상단 경로를 직접 써주는 것이 아닌 String contextPath 변수에 담아서 사용
- /semi 경로를 사용하는 애들은 이제 모두 다 req.getContextPath() 로 사용할 것이다.
- 변수에 담아놓고 사용할 것이다.
이렇게 해놓으면 header.jsp를 다른 파일에서 includeinclude 하고 있다면
이 변수를 활용해서 경로 사용할 수 있다.
2. 로그인한 회원의 MyPage 화면 보여주기
# 현재 기본 세팅 체크
- 로그인 담당 서블릿이 작업을 완료하면 (로그인이 성공하면 )
- 세션에 "로그인회원객체" 담아서 헤더 페이지로 넘겨줌
- 헤더 페이지에서 "로그인회원객체"가 있으면 마이페이지 버튼 보여줌
# 이제 이어서 마이페이지 화면 보여주는 작업 시작
2-1. "로그인회원객체" 활용해서 "텍스트" 데이터 채워주기
2-2. "로그인회원객체" 활용해서 텍스트 데이터 채워주기 "체크박스" 채워주기
2-2-1. 체크박스 코드 확인
2-2-2 jQuery 연결
- CDN방식으로 연결
- jQuery는 모든 파일에서 사용할 것이다.
- 모든 파일들이 include 할 header 파일에 CDN방식으로 연결해 놓으면 모든 곳에서 사용 가능
- <script> $(function(){ }) </script> - jQuery 활용해보자.
2-2-3 "로그인회원객체"에서 데이터를 가져와서 체크박스에 체크해주기
#1. jQuery 활용해서 - 회원 data 가져오기
#2. 체크박스 애들 다 가져와서 ----- $('input[name=interest]')
#3. 가져온 배열 중 요소 하나하나 접근해서 어떤 작업을 해줄 것이다. ----- .each(function(){};
#4. input 요소 하나하나의 value값 가져오기 ----- this.value
#5. 내가 가져온 interest 배열에 this.value가 있는지 확인하기 ----- interest.indexOf(this.value);
#6. interest에 this.value가 있다면 체크박스에 체크해주기 ----- if(result != -1) this.checked = true;
3. 페이지 접근(요청) 제한하기
- 로그인 안 한 회원이 마이페이지 요청하는 상황 방지 하기
- 현재 header.jsp 에서 - 마이페이지 보여달라는 요청을 하면 - 담당 서블릿이 처리하는데
- 서블릿에서 로그인했는지 안 했는지 체크해서 마이페이지 화면으로 보내든지 말든지 해주기
- 체크하는 방법은 – session에 "로그인회원객체"있는지 없는지 판단하기
- 로그인 서블릿이 로그인 작업에 성공하면 - 세션에 "로그인회원객체"를 담아 놓기로 했다.
- 세션에 "로그인회원객체"가 없다는 것은 로그인을 하지 않았다는 것
- 로그인하지 않았으면 마이페이지 보지 못한다.
4. 회원 정보 변경해보기
4-1. id 같은 거는 변경하지 못하게 해주어야 한다.
- readonly 속성 추가
4-2. 수정된 정보 입력해서 서블릿에게 회원 정보 수정 (UPDATE) 작업 요청하기
- 어떤 회원의 정보를 변경할 것인지 알려주기 위해 "로그인회원객체"에서 회원번호같이 담아서 전달
- 회원번호는 화면에(클라이언트에게) 보여주지 않아도 되므로 type="hidden"으로 전달
사실 이렇게 input 태그로 가져오는 것은 안 좋다..
hidden으로 가져오는 것도 좋지 않다.
session에서 가져오는 것이 바람직
단순히 값을 가져오는 것이 아니라 복잡한 작업을 하는 경우에는 아래처럼 하나하나 써주는 것이 좋다.
협업하는 사람한테도 좋고, 내가 나중에 보고 이해하기도 좋고, 재사용성도 좋고
4-3. member/myPage 요청 처리할 서블릿 만들어서 - ( Controller - Service - Dao 작업하기 )