스프링 수업노트

 

http 비연결성

tcp 연결성 : 프로세스 시작부터 종료까지 연결

2의 16승정도의 port 가 있고 1000개정도는 예약되어 있고,

연결되어 있으면 : client 가 요청을 보낼때 client 가 누군지 알고 있다.

http 는 : connectionless (비연결성이다)

요청할떄 연결이 된다. → client 에 응답을 보내면 연결이 끝는다.

서버입장에서는 누가 연결을 하는지 알 수가 없다.

http protocol 에서는 session , cookie 를 이용해서 처리를 한다.

웹기반 어플리케이션

HTTP 프로토콜의 특징

  1. 비연결성

    • 요청을 보내고 응답을 받게 되면 서버와의 연결은 끊어진다.
    • 서버로 재요청시 서버는 클라이언트가 누군지 알 수 있도록 session 과 cookie 를 이용한다.
  2. 웹브라우저는 서버로 요청시 해당 서버(도메인) 에 설정된 쿠키 값을 항상 같이 전송한다.

    • 서버가 클라이언트가 누군지 식별할 때 사용

    • cookie : 브라우저에 저장되는 정보 : 누군지 알기 위한 규약으로 제공하는 것.

      (쿠키 확인하는 법 개발자 도구 → application → Storage → Cookies )

  3. java 기반 서버는 요청을 받게 되면 해당 요청의 쿠키 정보 중에

    • JSESSIONID 라는 쿠키가 있는지 확인한다.

    • JSESSIONID 쿠키가 없을 경우

      서버는 신규 접속 요청이라고 판단, session 을 새롭게 만들고 응답을 생성할 때 session ID(SESSIONID) 를 응답 헤더에 포함하고

      해당 응답을 받은 브라우저는 JSESSIONID 쿠키 값을 브라우저에 저장

    • JSESSION 쿠키가 있을 경우

      JSESSIONID 에 해당하는 SESSION 을 사용 ( 기존 접속한 사용자로 인식한다. )

    • session 은 사용자다.

      쿠키는 웹브라우저에 저장이 되고, 보안이 취약하다. delete 키를 통해서 지울 수도 있다.

    • 동일한 웹브라우저에서 작업을 했지만 JSESSIONID 가 있고 없고에 따라서 새로운 사용자로 인식한다.

    • JSESSIONID 를 이름 변경할 수 있다.

웹에서 사용자(client) 란?

  • 동일한 인물이 아니다.
  • 웹에서 사용자란 웹브라우저를 의미한다.
  • 시크릿모드 : 다른 유저로 인식을 한다.
  • (탭추가는 제외 → 탭추가는 같은 유저로 인식을 한다. )

스코프 :

웹 어플리케이션에서 객체(속성)을 유지/공유하는 영역

속성 :

클라이언트의 요청을 처리하는 과정에서 SERVLET/JSP 사이에서 공유하는 정보(데이터를 공유하기 위해 사용)

  • 기본스펙에서는 속성은 변경가능하지만 파라미터는 setPatameter 가 없다.

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a25cdfcd-dc9a-4baf-8b72-d00de998c270/11.jpg

웹에서 제공하는 4개의 스코프

  1. page(pageContext) :
  • jsp 페이지 내에서만 공유(유효한) 되는 영역(공간)
  • (비유 : java 의 block 안에 선언된 지역변수 ex) 지역변수 if, for block 들)
  • 해당 jsp 에만 유효한 공간
  1. request (HttpServletRequest) *****
  • 요청이 처리될 때 까지만 유호한 공간
  • 비유 : java에서의 지역변수
  • 클라이언트의 정보가 유지되는 동안 공유되는 영역
  • Dispatch (요청이 응답이 될 때까지 유효
  • 비유 : page보다 더 넓은 범위의 지역변수
  1. session (HttpSession) *
  • 세션이 유효한 동안만 유지되는 공간
  • 클라이언트의 정보가 유지되는 동안 공유되는 영역(비유 : 인스턴스 변수)
  1. application (ServletContext) : 웹 어플리케이션 내에서 공유되는 객체의 영역 딱 1개만 유지되는 공간( 비유 : java 의 static 변수 )

실습

scope 객체 실습

실습 요구 사항

  1. 웹 브라우저로 다음 주소에 접속 localhost/scope(get방식)

  2. 해당 요청을 처리해줄 servlet 생성 ( kr.or.ddit.servlet.scope.Scope.java)

  3. scopr.jsp 에서는 하나의 input xorm(name-scope) 와 submit 버튼 생성

  4. 전송 메소드는 post , 전송 주소는 /scope

  5. Scope.java 의 dopost 에서는 요청 파라미터 중 scope 파라미터를 확인하여 request, session, application scope 에 다음과 같이 속성을 저장

request : 속성명 =request , 속성값 = scope파라미터값 + "_request" session : 속성명 =session , 속성값 = scope파라미터값 + "_session" application : 속성명 = application, 속성값=scope 파라미터값 + "_application"

  1. 속성 설정이 끝나면 webapp/jsp/scopeResult.jsp 로 forward

  2. scopeResult.jsp 에서는 Scope servlet 에서 설정한 3개의 속성을 출화면에 출력하기

참고

scope 객체의 속성관련 메소드 속성 조회 : 스코프객체.getAttribute ("속성명") , 반환타입 : Object **비교 getParameter("파라미터명") , 반환타입 : String 속성 저장 : 스코프객체.setAttribute ("속성명" , "속성값" ), 반환타입 : void 속성 삭제 : 스코프객체.removeAttribute("속성명") , 반환타입 : void (규약에서는..) 속성 이름 검색 : 스코프객체.getAttributeNames() , 반환타입 : Enumeration (열거자) (참고 : iterator )

Scope.java

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9605073c-ca2f-4aba-b55c-3b527d0f3bb1/java.jpg

첫번째로 anotation - /scope 를 통해 Scope.java로 연결이 되면 doGet 메소드가 호출되어서 scope.jsp 로 이동한다.

scope.jsp

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a6cce194-8cd2-4117-a73a-cc2d17092a07/scope.jsp.jpg

scope.jsp 에서 scope 값을 입력해서 form 타입을 doPost 로 보내주면 받은 값을 바탕으로 session 과 request 와 application 의 값을 설정해준다.

scope.result

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/f20b3b48-4539-4e8f-87d0-4ab79a9267d1/scope.result.jpg

scopeResult.jsp 로 가서 그 값을 출력해준다.

실습의 의미

  • 봐야하는 값 : session, application , request 값이다.

  • 각각이 가진 특징 :

    session 값은

    request : 요청이 끝나면 값은 사라진다.

    application : java 에서 static 처럼 전체에 값이 공유된다.

    session : 브라우저를 client 로 보고 브라우저를 변경하지 않는한 저장된다 ( 자동 session 값 소멸일때 제외하고 )

  1. 정상경로로 접근
  • chrome 브라우저 접근
  • localhost/scope 접속
  • 최초 접속
  • sujeong 값 입력 후 전송 버튼
  • servlet 요청 → jsp 에서 값 얻기 → servlet 요청 → jsp 로 값 얻어오기
  1. servlet 요청없이 localhost/jsp/scopeResult.jsp 로 바로 요청
  • 1번과 같이 Chrome 브라우저로 접근

  • localhost/jsp/scopeResult.jsp 로 바로 접속시

  • 요청이 없음 null

  • session 은 같은 브라우저이기 때문에 저장이 됨

  • application : static 처럼 전체에 1개 저장이 되어 있다.

  1. 1번과 다른 edge 브라우저를 사용하여 접근
  • localhost/jsp/scopeResult.jsp 로 바로 접근시

    https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c26d952a-ee47-42bf-9e28-2c4f5d19842c/3.jpg

  • 요청은 없으니 null 저장된 session도 없어서 ( 새로운 브라우저는 새로운 client 로 인식) null

  • application 은 전역 1개로 인식

  1. 3번과 동일한 브라우저 사용 localhost/scope 로 접속

input 태그에 aurora 입력 후 전송

  • 새로운 요청 생성 → request 도 입력한 이름을 반영
  • session 도 새로운 client 로 인식( 새브라우저는 새로운 client)
  • application 도 요청이 변경되서 새롭게 중첩되서 변경된다.
  1. 1번 브라우저와 동일한 브라우저 접속 ( 크롬 )

localhost/jsp/scopeResult.jsp 로 접속

  • 요청이 없었고, session 은 같은 브라우저이기 때문에 저장된 값으로 쓰이고 application 은 저장된 값으로 만들어진다.

범위 참고

-클라이언트에서는 서버 사이드 변수 값을 활용할 수 있으나 서버 사이드 변수에 클라이언트 사이드 변수 값을 대입할 수는 없다.

<script>

var test = "<= request.getAttribute("request")" %> <br>

var test = "sally_application";

</script>

댓글