** <jsp:include>
** <%@ include %>
** <jsp:include>, <$@ include %> 태그의 목적
** 웹 프로그래밍에서의 요청과 결과 출력
1. Web Client Page에서 서버에게 요청하는 방법
2. Parameter 생성
3. Webserver에서 Parameter 읽기
4. WebServer에서 결과를 전송
** HTTP & HTTPS
1. Cookie
2. HttpSession - session
3. HTML5의 Web Storage, Web SQL, Indexed DB
4. HTML5의 Web Socket
** Cookie
1. 쿠키의 동작 방식
2. 구성요소
3. 생성과 저장
4. Cookie의 메소드
5. 서버에서 모든 쿠키 읽기
6. Cookie의 수정과 삭제
** Session
1. 용도
2. 사용
3. 세션 초기화 - 모든 데이터 삭제 : 로그아웃
4. 로그인 처리
5. 세션 사용 시 고려 사항
6. 세션을 이용한 로그인 처리
** <jsp:include>
- 다른 페이지를 태그가 위치한 부분에 포함시킬 때 사용하는 태그
<jsp:include page = "포함할 페이지" flush = "true" 또는 "false">
- 페이지의 수행 결과를 포함
** <%@ include %>
- 다른 페이지를 태그가 위치한 부분에 포함시킬 때 사용하는 태그
<%@ include file = "포함할 파일" %>
- 페이지의 코드를 포함
** <jsp:include>, <%@ include %> 태그의 목적
- 동일한 코드가 여러 곳에서 사용이 되는 경우 하나만 만들어서 사용하기 위해서 만들어진 태그이다.
- 페이지의 수행 결과를 가져오면 페이지의 코드를 사용할 수 없지만 코드를 가져오면 사용할 수 있다.
** 웹 프로그래밍에서의 요청과 결과 출력
1. Web Client Page에서 서버에게 요청하는 방법
1) 태그를 이용하는 요청 방법
- a 태그 이용 : href 속성에 요청할 URL을 설정하고, 글자나 이미지를 배치해서 글자나 이미지를 누르면 서버에게 요청한다.
- form 태그 이용 : action 속성에 요청할 URL을 설정하고 form 안에 submit type의 버튼을 만들어서 버튼을 누르면 설정한 URL에 요청한다.
2) 자바스크립트를 이용한 요청 방법
- location.href = "요청할 URL" 대신에 window.location을 이용해도 동일한 결과를 리턴한다.
- form객체.submit() : form 안에서 submit 버튼을 누른 것과 동일한 효과를 갖는다.
- ajax 요청
- location.reload() : 새로고침
- history.go(인덱스), history.back(), history.forward()
2. Parameter 생성
- Parameter는 Web Client에서 Web Server에게 전송하는 데이터이다.
- Parameter는 Encoding해서 전송해야 한다.
1) a 태그의 경우는 URL 뒤에 ?를 추가하고 이름=값&이름=값... 의 형태로 직접 설정
2) form 태그나 form 태그의 submit()을 직접 호출하는 경우는 form 안에 name 속성을 갖는 객체들의 값이 자동으로 parameter가 된다.
- get 방식이면 URL 뒤에 붙여서 전송하고 post 방식이면 header에 감추어서 전송한다.
3) ajax의 경우는 데이터(FormData 객체를 만들어도 되고 {이름=값, 이름=값,...})를 별도로 만들어서 전송
3. WebServer에서 Parameter 읽기
- request 객체의 getParameter(String 리턴)나 getParameterValues(String [] 리턴) 메소드를 이용한다.
4. WebServer에서 결과를 전송
- Web Client에서만 사용 가능
- json 이나 xml : 모든 Client에서 사용이 가능
1) 서버에서 만든 결과를 attribute
2) attribute를 저장할 수 있는 객체
- page : 현재 페이지에서만 공유
- request : forwarding 했을 때 만 공유
- session : forwarding이나 redirect 모두 공유
- application : 전체가 공유
3) 메소드
- setAttribute(String name, Object Value) : 저장
- getAttribute(String name) : name에 해당하는 데이터를 Object 타입으로 리턴된다.
- Object 타입으로 리턴되기 때문에 출력만 할 때는 바로 출력하면 되지만, 다른 용도로 사용할 때는 원래의 자료형으로 강제 형 변환을 해서 사용해야 한다.
- removeAttribute(String name) : 삭제
4) 결과 페이지 이동
- forwarding : URL을 변경하지 않고 결과 페이지를 가져오는 방식으로 이동한다.
- 새로고침을 하면 결과 페이지가 다시 보여지는 것이 아니고 처리를 다시 하고 결과를 재출력하는 방식이다.
- 자신의 서버 이외의 요청을 못한다.
- 조회 작업은 forwarding을 사용한다.
- redirect : URL을 변경하고 결과 페이지로 이동한다.
- 새로고침을 하면 결과만 다시 출력한다.
- 자신의 서버 이외의 요청을 할 수 있다.
- 조회 작업이 아니면(갱신, 삭제 등) redirect를 사용한다.
** HTTP & HTTPS
- HTTP와 HTTPS는 연결에 사용된 어떠한 정보도 저장하지 않는다.
- 연결하고 나면 이전 상태를 알 수 없다.
- 이전 요청과 연관된 작업을 연속해서 수행하는데 문제가 발생한다.
1. Cookie
- 정보를 저장하고 클라이언트의 브라우저에 보관한 후 서버에게 요청이 발생할 때 마다 같이 전송해서 서버가 클라이언트의 상태를 알게 하는 개체이다.
2. HttpSession - session
- 정보를 서버의 객체에 저장하고 사용자가 세션을 소멸시켜 달라고 하거나 브라우저를 종료할 때까지 정보를 유지하는 개체이다.
3. HTML5의 Web Storage, Web SQL, Indexed DB
- 이전 상태를 사용은 하지만 서버가 알 필요가 없는 데이터들을 Cookie 나 Session에 저장하는 것은 불필요한 행동이다.
- HTML5의 Web Storage, Web SQL, Indexed DB는 위의 불필요 행동을 해결하기 위해서 이전 상태를 브라우저에만 저장되고 서버에는 전송되지 않는 기술이다.
4. HTML5의 Web Socket
- Web 환경에서 TCP 통신을 하기 위한 기술이다.
** Cookie
- Web Server와 Web Browser 간의 상태를 주고받는 방법 중의 하나이다.
- Web Browser에 데이터를 저장하고 Web Server에 요청을 할 때마다 전송되는 데이터를 저장한다.
- 데이터가 클라이언트의 브라우저에 저장되어 있어서 클라이언트가 임의로 조작하는 것이 가능하기 때문에 보안이 필요한 데이터의 저장에는 적합하지 않다.
1. 쿠키의 동작 방식
- 쿠키 생성
- 쿠키를 저장
- 쿠키를 전송
2. 구성요소
- 이름 : 구별하기 위한 요소
- 값 : 실제 저장된 내용
- 유효시간
- 사용할 수 있는 도메인
- 사용할 수 있는 경로
3. 생성과 저장
1) 생성 : new Cookie(String name, String value)
- name이나 value는 인코딩해서 저장해야 한글이 깨지지 않는다.
2) 저장 : response객체.addCookie(Cookie cookie)
4. Cookie의 메소드
- String getName()
- String getValue()
- void setValue(String value)
- void setMaxAge(int 유효시간)
5. 서버에서 모든 쿠키 읽기
Cookie [] request객체.getCookies()
6. Cookie의 수정과 삭제
- Cookie를 수정하고자 할 때는 setValue 메소드를 이용한다.
- Cookie를 삭제하는 메소드는 없어서 setMaxAge를 이용해서 유효시간을 0으로 설정하는 방식을 이용
2) login.jsp 파일에서 로그인을 처리
3) 로그인 결과 페이지 작성 - loginresult.jsp
4) index.jsp 페이지 수정
- id를 저장한 쿠키가 있으면 쿠키의 값을 id 란에 출력하고 아이디 저장 란을 체크하기
** Session
- 자료형은 HttpSession이다.
- jsp 파일에는 처음부터 존재하고 다른 곳에서 사용하고자 할 때는 request객체.getSession()으로 리턴받아서 사용한다.
- 하나의 브라우저에서 서버에 접속을 하면 그 브라우저를 위한 Map을 서버에 하나 생성하는데 이 Map을 Session이라고 한다.
- 사용자가 10명까지 접속할 수 있다라는 얘기는 Session을 10개 까지 생성할 수 있다라는 의미이다.
- Session이라는 말 대신 Token이라는 단어를 이용하기도 한다.
1. 용도
- 브라우저가 접속을 시작해서 종료할 때까지 유지해야 하는 데이터를 저장한다.
- 로그인 정보나 장바구니 정보 같은 것을 저장하는 용도로 많이 사용한다.
2. 사용
1) 데이터 저장 : void setAttribute("이름", 데이터)
2) 데이터 읽기 : Object getAttribute("이름"); -> 데이터를 사용할 때는 원래의 자료형으로 강제 형 변환해서 사용한다.
3) 데이터 삭제 : void removeAttribute("이름");
4) 데이터 수정 : 존재하는 이름을 이용해서 저장하면 수정
3. 세션 초기화 - 모든 데이터 삭제 : 로그아웃
1) 세션 객체가 invalidate() 호출
2) web.xml 파일에 설정
<session-config>
<session-timeout>분단위시간</session-timeout>
</session-config>
- 설정한 시간동안 세션을 사용하지 않으면 초기화되는 시간을 설정
4. 로그인 처리
- 아이디와 비밀번호를 입력해서 로그인을 시도하면 데이터베이스에 가서 확인하고 아이디와 비밀번호 정보가 맞으면 그 때 필요한 정보(아이디나 닉네임)를 세션에 저장하고 이 후에 로그린 여부는 세션에 저장된 데이터를 가지고 판단하며 로그아웃은 세션에 저장된 데이터를 삭제하는 형태이다.
5. 세션 사용 시 고려 사항
- 세션은 서버의 메모리를 사용한다.
- 세션에 많은 양의 정보를 저장하는 것은 권장하지 않고, 세션에 많은 양의 정보를 저장할 것 같다면 메모리 데이터베이스를 사용하는 것을 권장한다.
6. 세션을 이용한 로그인 처리
1) login.jsp 파일의 하단에 로그인 된 경우에 세션에 정보를 저장하는 코드를 추가
2) index.jsp 파일을 수정
- 로그인이 안된 경우는 로그인 화면을 출력하고 로그인 된 경우는 nickname을 출력하고 로그아웃 링크를 출력하도록 수정
3) 로그아웃 페이지 - logout.jsp
4) web.xml 파일에 세션 만료 시간을 설정
5) web.xml 파일을 수정하면 서버를 다시 구동해야 한다.
- web.xml 파일은 서버가 구동될 때 1번만 읽어서 사용하기 때문이다.