안드로이드&IOS 앱 개발자 양성

안드로이드&iOS 앱 개발자 양성(50일차) - <jsp:include>, <%@ include %>, <jsp:include>&<%@ include %> 태그의 목적, 웹 프로그래밍에서의 요청과 결과 출력, HTTP & HTTPS, Cookie, Session

HRuler 2020. 6. 17. 17:11
더보기

 ** <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 파일에서 로그인을 처리

아이디 저장을 누르지 않고 로그인을 하게 되면 cookie에 저장되었던 id(cookie)의 수명을 0으로 만들어 삭제 시킨다.

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번만 읽어서 사용하기 때문이다.