Skip to content

Files

Latest commit

6473e90 · Aug 17, 2022

History

History
197 lines (150 loc) · 12 KB

readme13.md

File metadata and controls

197 lines (150 loc) · 12 KB

Web Application

[ 2022-08-17 ]

목차


  • JSP 내장 객체

    개발자가 JSP 파일 내에 객체를 생성하지 않고 바로 사용할 수 있는 객체가 내장 객체이다.
    JSP에서 제공되는 내장객체는 JSP 컨테이너에 의해 서블릿으로 변환될 때 자동으로 객체가 생성된다.

    • JSP 내장 객체 종류

      종류 클래스
      1. request javax.servlet.http.HttpServletRequest
      2. response javax.servlet.http.HttpServletResponse
      3. out javax.servlet.jsp.JspWriter
      4. session javax.servlet.http.HttpSession
      5. application javax.servlet.ServletContext
      6. pageContext javax.servlet.jsp.PageContext
      7. page javax.servlet.jsp.HttpJspPage
      8. config javax.servlet.ServletConfig
      9. exception java.lang.Throwable
    • request 객체

      웹 브라우저를 통해 서버에 어떤 정보를 요청하는 것을 request라고 한다.
      이러한 요청 정보가 담기고 관리되는 곳이 request객체이다.
      request객체는 이러한 요청 정보가 담기고 관리되는 곳이고, 서버와 관련된 정보 읽기 기능,
      클라이언트가 전송한 요청 파라미터 읽기 기능, 클라이언트가 전송한 쿠키 읽기 기능 등을 제공하고 있다.

      • request 객체 관련 주요 메서드

        메서드 기능
        getContextPath() String - 웹 어플리케이션의 컨텍스트 루트의 경로를 얻습니다.
        getMethod() String - 웹 브라우저가 정보를 전송할 때 사용한 요청 방식을 구합니다.(get, post)
        getServerName() String - 연결할 때 사용한 서버 이름을 구합니다.
        getServerPort() int - 서버가 실행중인 포트 번호를 구합니다.
        getRequestURL() String - 요청 URL을 얻습니다.
        getRequestURI() String - 요청 URI를 얻습니다.
        getRemoteAddr() String - 웹 서버에 연결한 클라이언트의 IP주소를 구합니다.
        getProtocol() String - 해당 프로토콜을 얻습니다
        getParameter(name) 이름이 name인 파라미터 값을 구합니다. 존재하지 않을 경우 null을 반환합니다.
        getParameterValues(name) 이름이 name인 모든 파라미터 값들을 배열로 구합니다.
    • response 객체

      웹 브라우저의 요청에 응답하는 것을 response라고 한다.

      메서드 기능
      1. getCharacterEncoding() 응답할 때의 문자의 인코딩 형태를 구합니다.
      2. addCookie(Cookie c) 쿠키를 지정합니다
      3. sendRedirect(URL) 지정한 URL로 이동합니다
    • out 객체

      JSP 페이지가 생성하는 모든 내용은 out 기본 객체를 통해 전송된다.
      JSP 페이지 내에서 사용하는 비스크립트 요소들(HTML코드와 텍스트)이 out 객체에 전달된다.
      값을 출력하는 표현식(expression)의 결과값도 out객체에 전달되는데, 표현식으로 대체한다.

      <%
      out.print("<h1>안녕!<h1>");
      out.print("<h2>반가워</h2>");
      %>
  • 쿠키(Cookie)

    쿠키는 웹사이트 접속시 접속자의 개인장치에 다운로드 되고 브라우저에 저장되는 작은 텍스트 파일이다.
    웹사이트는 쿠키를 통해 접속자의 장치를 인식하고, 접속자의 설정과 과거 이용내역에 대한 일부 데이터를 저장한다.
    웹사이트를 방문할 때, 웹사이트는 여러분이 다시 접속할 경우를 대비하여(몇 가지 기본 설정을 진행했거나 계정에 로그인한 경우) 사용자의 정보들을 저장해두는 역할을 한다.
    기본적으로 쿠키는 나중에 정보를 다시 입력하는 번거로움을 덜어준다.

    웹 브라우저에서 서버로 어떤 데이터를 요청하면, 서버측에서는 알맞은 로직을 수행한 후 데이터를 웹 브라우저에 응답한다.
    그리고 Http 프로토콜은 응답 후에 웹 브라우저와의 관계를 종료한다.
    연결이 끊겼을 때, 어떤 정보를 지속적으로 유지하기 위한 수단으로 쿠키라는 방식을 사용한다.

    쿠키는 서버에서 생성하여, 서버가 아닌 클라이언트측(브라우저)에 정보를 저장한다.
    서버에서 요청할 때마다 쿠키의 속성값을 참조 또는 변경할 수 있다.
    쿠키는 개당 4kb로 용량이 제한적이며, 300개까지(1.2MB) 데이터 정보를 가질 수 있다.

    • 쿠키 문법

      • 순서

        쿠키클래스에서 쿠키 생성 ->  setter메서드로 쿠키의 속성 설정 -> response객체에 쿠키 탑재 -> 로컬 환경에 저장
        
      • 생성

        Cookie cookie = new Cookie("name", "value");
      • 속성 설정

        cookie.setMaxAge(1800); // 초 단위로 유효시간 설정, 30분
      • 쿠키 탑재

        response.addCookie(cookie); // 쿠키를 응답에 탑재
      • 쿠키 호출

        <%
          Cookie[] cookies = request.getCookies(); // 쿠키는 여러개 있을 수 있음으로 Cookie[] 배열 값을 가짐
        
          String value = "";
        
          if (cookies != null) {
            for (Cookie cookie : cookies) {
              if (cookie.getName().equals("name")) {
                value = cookie.getValue();
              }
            }
          }
        %>
    • Cookie 객체 관련 메서드

      메서드 기능
      1. setMaxAge() 쿠키의 유효시간을 설정합니다.
      2. setPath() 쿠키사용의 유효디렉토리를 설정합니다.
      3. setValue() 쿠키의 값을 설정합니다.
      4. setVersion() 쿠키 버전을 설정합니다.
      5. getMaxAge() 쿠키 유효기간 정보를 얻습니다
      6. getName() 쿠키의 이름을 얻습니다.
      7. getPath() 쿠키사용의 유효디렉토리 정보를 얻습니다.
      8. getValue() 쿠키의 값을 얻습니다.
      9. getVersion() 쿠키 버전을 얻습니다.
  • 세션(Session)

    세션은 데이터를 저장한다는 면에서 쿠키와 비슷하다.
    차이점은 웹 컨테이너에서 클라이언트의 정보를 서버에 보관하는 기능이다.
    세션도 쿠키와 마찬가지로 서버와의 관계를 유지하기 위한 수단이다.
    단, 쿠키와 달리 클라이언트의 특정 위치에 저장되는 것이 아니라, 서버상에 객체형태로 존재한다.

    1회성으로 연결이 종료되는 http 프로토콜의 단점을 보완해 클라이언트와 서버 간 접속을 유지시켜준다.
    웹 서버는 웹 컨테이너의 상태를 유지하기 위한 정보를 저장하고, 저장한 정보는 브라우저를 닫을 때,
    일정 시간이 지났을 때, 서버에서 세션을 삭제했을 때 비로소 삭제가 이루어진다.

    서버당 하나의 세션 객체를 가질 수 있다. (브라우저 별 서로 다른 세션 사용)
    세션 객체는 브라우저 창을 종료하면 삭제된다.
    따라서 세션은 서버에서만 접근이 가능하여 보안이 좋고, 저장할 수 있는 데이터에 한계가 없다.
    세션은 클라이언트의 요청이 발생하면 자동생성되어 고유한 ID값을 클라이언트에 넘겨주며 이것은 쿠키에 저장된다.
    JSP에서는 session이라는 내장 객체를 지원하여 세션의 속성을 설정할 수 있다.

    • session 객체 관련 메서드

      메서드 기능
      1. setAttribute() 세션에 데이터를 저장합니다.
      2. getAttribute() 세션에 저장되어 있는 데이터를 얻습니다.
      3. getAttributeNames() 세션에 저장되어 있는 모든 데이터의 세션 이름(key)을 얻습니다.
      4. getId() 자동생성된 세션의 유니크한 아이디를 얻습니다.
      5. getCreationTime() 세션이 생성된 시간을 구합니다.
      6. getLastAccessedTime() 웹 브라우저가 가장 마지막에 세션에 접근한 시간을 구합니다.
      7. setMaxInactiveInterval() 세션의 유효시간을 설정합니다. 초 단위로 기록합니다.
      8. getMaxInactiveInterval() 세션의 유효시간을 얻습니다.
      9. removeAttribute() 특정 세션을 삭제합니다.
      10. invalidate() 모든 세션을 삭제합니다.
  • 쿠키 vs 세션

    쿠키 대신에 세션을 사용하는 가장 큰 이유는 세션이 쿠키보다 보안에서 앞서기 때문이다.
    쿠키의 이름이나 데이터는 네트워크를 통해 전달되기 때문에 HTTP 프로토콜을 사용하는 경우 중간에서 누군가가 쿠키의 값을 읽어올 수 있다.
    그러나 세션은 오직 서버에만 저장되기 때문에 중요한 데이터를 저장하기에 좋다.
    세션을 사용하는 또 다른 이유는 웹 브라우저가 쿠키를 지원하지 않거나 강제로 사용자가 쿠키를 차단한 경우에도 사용할 수 있다는 점이다.

    세션은 여러 서버에서 공유할 수 없는 단점이 있다. 그러나 쿠키는 도메인을 이용해 쿠키를 여러 도메인에서 공유할 수 있기 때문에
    Naver, Daum과 같은 포털사이트들은 쿠키에 로그인 방식을 저장하는 것을 선호한다.

    세션과 쿠키는 각각의 장단점들이 존재하기때문에, 보안상 크게 이슈가 될만한 요소가 없는 부분은 쿠키로,
    보안상 중요한 데이터들은 세션으로 처리하면 용이할 것 같다.