[JSP] 내장객체

박정현·2023년 10월 26일

🔶 JSP

목록 보기
3/4
post-thumbnail

1. 내장 객체란?

  • JSP 프로그램코드에서 프로그래머가 선언하지 않아도 사용할 수 있는 미리 선언된 객체를 의미한다.
  • 스크립트(<%…%>) 안에서만 사용할 수 있다.
  • 웹 어플리케이션은 네 개의 영역을 가지고 있다.
    • PAGE영역: 하나의 JSP페이지를 처리할 때 사용되는 영역, pageContext기본객체
    • REQUEST 영역: 하나의 HTTP 요청을 처리할 때 사용되는 영역(처리하는데 사용되는 모든 JSP페이지) , request기본객체
    • SESSION 영역: 하나의 웹 브라우저와 관련된 영역, session기본객체
    • APPLICATION 영역: 하나의 웹 어플리케이션과 관련된 영역 (모든 JSP 페이지, 모든 요청, 모든 브라우저 세션), application기본객체

2. 내장객체 종류

1) 내장객체의 종류

  • request: 사용자 요청 처리
  • response: 처리결과 응답
  • pageContext: 페이지의 정보
  • session: 사용자별(로그인, ) 세션접오
    • 서블릿 이용해서 로그인, 로그아웃
  • application: 전체 웹 어플리케이션
  • config: 초기화 설정
  • out: 브라우저에 표시 → HTML
  • exception: 예외
  • page: 현재 페이지 설정

2) request객체

  • 사용자 요청 정보를 처리
  • HTML 폼을 통해 정달되는 값을 가져올 때
  • HTTP요청 다체에 담겨 있는 정보를 가져올 때 사용
  • request.getParameterNames() : 요청받은 파라미터 이름들
    • Enumeration 인터페이스는 객체들의 집합(Vector)에서 각각의 객체들을 한순간에 하나씩 처리할 수 있는 메소드를 제공하는 클래스이다.
    • 코드
      <%
      Enumeration en = request.getParameterNames();
      	
      	while(en.hasMoreElements()){
      		String nameVal = en.nextElement().toString();
      		out.println(nameVal);
      	}
      %>
  • request.getParameter(String): 요청받은 파라미터 name의 값(value)
    • { key : value }
  • requst.getParameterValuse(): 여러 요청 파라미터 name값 → 배열
  • 코드
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
    쿠키: <%=request.getCookies() %> <br />
    GET, POST: <%=request.getMethod() %> <br />
    session객체: <%=request.getSession() %> <br />
    IP: <%=request.getRemoteAddr() %> <br />
    서버 호스트 이름: <%=request.getServerName() %> <br />
    서버포트: <%=request.getServerPort() %> <br />
    요청 URL: <%=request.getRequestURI() %> <br />
    요청 URL 쿼리 스트링: <%=request.getQueryString() %> <br />
    요청에 대한 기본 패스 항상"/" 시작: <%=request.getContextPath() %> <br />
    요청 캐릭터 셋: <%=request.getCharacterEncoding()%> <br />
    
    헤더의정보<br />
    접속정보: <%=request.getHeader("referer") %> <br />
    접속정보: <%=request.getHeader("user-agent") %> <br />
    접속정보: <%=request.getHeader("host") %> <br />
    접속정보: <%=request.getHeader("WL-Proxy-Client-IP") %> <br />
    접속정보: <%=request.getHeader("Proxy-Client-IP") %> <br />
    접속정보: <%=request.getHeader("X-Forvarded-For") %> <br />
    
    </body>
    </html>
  • response 기본 객체의 응답 형식 지정 메소드
  • 컨텐츠 타입이나 문자셋에 대한 정보를 지정할 때 사용하는 메소드이다.
  • setContentType(String): 요청에 대한 응답 → MIME타입을 지정, 부가적으로 글자의 인코딩 지정
  • getCharacterEncoding() : 응답하는 내용의 글자 인코딩 형태를 구함
  • response객체의 리다이렉트 가능
    • response객체에서 많이 사용되는 기능 중에 하나가 리다이렉트 기능이다.
    • 웹 서버가 웹 브라우저에게 지정한 페이지로 이동하도록 지시한다.
    • 리다이렉트 기능은 주로 록드인 과정에서 사용된다.
    • 로그인 성공시 바로 이동 → login.html
  • 페이지의 헤더 정보를 입력하는 용도, 페이지를 리다이렉트하는 용도로 많이 사용된다.
    • response객체가 제공하는 주요 메소드
    • response.sendRedirect(”이동할 주소”);
    • reponse.sendRedirect(String location): 현재 페이지에서 다른 페이지 (”지정한 url”)로 이동한다.

3) pageContext객체

  • request기본객체를 반환 <%=pageContext.getRequest()%>
  • response기본객체를 반환 <%=pageContext.getResponse() %>
  • session기본객체를 반환 <%=pageContext.getSession() %>
  • application기본객체를 반환 <%=pageContext.getServletContext() %>
  • config기본객체를 반환 <%=pageContext.getServletConfig() %>
  • out기본객체를 반환 <%=pageContext.getOut() %>
  • Exception기본객체를 반환 <%=pageContext.getException() %>
  • Page기본객체를 반환 <%=pageContext.getPage() %>

4) session 객체

Spring Boot Project → Spring Security(권한, 인가)

4-1) 세션이란?

  • 클라이언트 상태를 유지하기 위한 방법
  • session: 서버측의 컨테이너에 저장
    • 현재 안전성이 상대적으로 좋다,
  • Cookie: 클라이언트의 웹 브라우저에 저장
  • 세션은 쿠키를 기반 → 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 세션은 서버 측에서 관리
  • 서버에는 클라이언트를 구분하기 위해 세션 ID를 부여
    • 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지
    • 접속 시간에 제한을 두어 일정시간 응답이 업ㄱ다면 세션을 귾도록 설정이 가능
      • 기본이 30분
    • 사용자에 대한 정보를 서버에 저장하기 때문에 쿠킺보다 보아넹 좋다.
    • 사용자가 많아질수록 서버 메모리를 많이 차지( 과부하를 주게 되므로 성능 저하의 요인)

4-2) 세션의 동작방식

  • 클라이언트는 세션 ID에 대해 쿠키를 사용해서 저장 (쿠키이름 → JSESSIONID이다.)
  • 클라이언트가 서버에 다시 접속 시 이 쿠키를 ㅣ용해서 세션 ID값을 서버에 전달

4-3) 세션의 특징

  • 각 클라이언트에게 고유 ID → 세션 ID로 클라이언트를 구분해서 클라이언트의 요구에 맞는 서비스 제공 → 쿠키보다 보안이 우수 → 사용자 증가로 인한 서버 메모리를 많이 차지

4-4) 세션의 사용 예

  • 로그인과 같이 보안상 중요한 작업을 수행할 때 사용
  • 세션은 쿠키를 기반으로 사용자 정보 파일을 브라우저에 저장하는 쿠키와 달리 서버측에서 관리한다.
  • 서버에서는 클라이언트를 구분하기 위해 세션ID를 부여한다.
    • 웹 브라우저가 서버에 접속해서 브라우저를 종료할 때까지 인증상태를 유지한다.
    • 접속 시간에 제한을 두어 일정시간 응답이 없다면 세션을 끊도록 설정이 가능하다.
      • 기본이 30분
    • 사용자에 대한 정보를 서버에 저장하기 때문에 쿠키보다 보안에 좋다.
    • 사용자가 많아질수록 서버 메모리를 많이 차지( 과부하를 주게 되므로 성능 저하의 요인)

4-5) HTTP의 특징과 쿠키와 세션을 사용하는 이유

  • 서버와 클라이언트가 통신을 할 때마다 서버는 클라이언트가 누구인지 인증
  • HTTP프로토콜이 connectionsless, stateless한 특성이 있기 때문
  • Connectionless: 클라이언트가 요청을 한 후 응답을 받으면 그연결을 끊어버리는 특징
  • Stateless: 통신이 끝나면 상태를 유지하지 않는 특징
  • 쿠키와 세션을 사용햇을 경우에는 최초 로그인을 하면 서버가 그 사용자에 대한 인증을 유지
    • 쿠키와 세션을 통해 서버는 클라이언트를 기억

5) 쿠키(Cookie)

5-1) 쿠키(Cookie)란?

  • 쿠키: 클라이언트 측 (브라우저)에서 관리되는 작은 기록 정보 파일
  • 쿠키에는 사용자 인증이 유효한 시간을 명시할 수 있으면 한 번 유효 시간이 정해지면 브라우저를 끄더라도 인증이 유지

5-2) 쿠키 구성요소

  • 이름: 각각의 쿠키를 구별하는 데 사용
  • 값: 쿠키가 가지고 있는 값
  • 유효시간: 쿠키 유지시간
  • 도메인: 쿸키를 전송할 도메인
  • 경로 : 쿠키를 전송할 요청 경로

5-3) 쿠키의 사용 예시

  • 로그인 시, 장바구니 기능

5-4) 쿠키와 세션차이

  • 쿠키와 세션은 비슷한 역할을 하며, 동작원리도 비슷 → 세션도 결국 쿠키를 사용
  • 가장 큰 차이점은 저장위치이다.
    • 쿠키(로컬 컴퓨터)
    • 세션(서버)
  • 보안면에서 세션이 더 우수
  • 요청 속도는 쿠키가 빠르가 (세션은 서버에서의 처리)
profile
개발을 개발괴발하지 않기 위한 노력

0개의 댓글