서블릿 Servlet 총정리

MIN.DI·2021년 7월 20일
0

TIL

목록 보기
8/15

서블릿 개요

  • Servlet은 HttpServlet 클래스 상속해야 한다.

  • Tomcat은 구동되는 시점에서 새로이 생성된 Servlet을 인식함.
    (톰캣 이미 구동되어있는 상태에서, 수정한 서블릿 실행하면 404 not found 에러 뜨는 이유)

  • URL : 요청 프로토콜부터 서버 주소, 포트번호까지 포함한 전체 주소 문자열.
    http://서버주소:포트번호/ContextPath명/서블릿 URL mapping명

  • URI : Uniform Resource Identity.
    서버에 요청하는 자원에 대한 패스 정보만을 추출.
    /ContextPath명/서블릿URL mapping명

    Context path : 이클립스 내에 생성된 web project에 대한 path.
    일반적으로 web project 명과 동일하게 context path 명이 정해짐.

  • web.xml 파일 = 디스크립터 파일.
    이클립스 project Explorer에 보이는 Deployment Descriptor (DD)
    WEB-INF 폴더에 만든다.
    <servlet> 태그와 <servlet-mappig> 태그를 정의해야 함.

Servlet의 수행

  • Application Server 기능을 포함한 Web Server(웹서버)
    = WAS (톰캣 서버)
  • Web Container
    = Web Application(서블릿, JSP 등 Web Components 들로 이루어짐) + Web Application
    웹 어플리케이션을 관리하고 수행시키는 프로그램
  • Web Application
    = 이클립스 내의 Web Project
    웹 컨테이너가 관리하는 웹 자원.
  • Web Components
    Servlet, JSP, Filter, Listener 등 웹 서버에서 수행되는 자원들
  • DD
    = web.xml
    웹 애플리케이션의 환경 파일.
    웹 애플리케이션이 웹 컨테이너에 배치될 때 인식됨.
  • static resources
    HTML, CSS< JS 등 웹 클라이언트에서 처리되는 자원들
  • Library
    확장 API. 서블릿이 내장하고 있는 API외에 추가로 필요로 하는 API들.
    주로 jar파일로 구성됨.
    (ex. JDBC 드라이버)

  • 웹 컨테이너는 구동될 때 인식되는 웹 애플리케이션들을 하나의 context객체로 생성하여 관리.
  • 즉,
    Web Project폴더 = Context(톰캣 입장) = 웹 애플리케이션(개발자)

Servlet 요청

  • 요청문서는 요청 라인 / 요청 헤더 / 요청 바디 로 구성

    요청 라인 : GET, POST 같은 방식 표시
    헤더 : name, value로 구성된 다양한 요청으로 구성
    바디 : post방식의 경우에만 query 문자열 들어감

  • 응답문서는 응답 상태 라인 / 응답 헤더 / 응답 바디로 구성

    응답 상태 라인 : 응답 상태코드. 요청이 성공했을 때 200. redirect 메세지는 302.
    바디 : 브라우저에 출력될 으답 콘텐츠


Query String 처리

  • Query String = 요청 파라미터.
  • 웹 클라이언트가 웹 처버에 요청 보내면서 함께 전달하는 추가 문자열.

GET방식

  • URL 주소 뒤에 ?name=value 형태로 구성됨.
    URL?name1=value1&name2=value2
  • req객체의 getParameter(name) 로 value값 추출. value값 여러개일 땐 getParameterValues(name) 메소드로 추출.
  • 모든 전송파라미터 리턴타입은 String이다.
    (다른 타입의 변수에 넣으려면 형변환 해야함)

POST방식

  • Query String이 요청바디에 담겨 전달.
    <form>태그 이용하거나, js로 구현하여 요청.

@MultipartConfig 어노테이션 (파일 업로드)

@MultipartConfig(locatin = "C:/upload", maxFileSize = 1024 * 1024 * 20, maxRequestSize = 1024 * 1024 * 20)

location : 업로드 될 파일 ㅈ정하는 위치 지정. 생략시, 컨텍스트 홈 폴더 사용.
maxFileSize : 업로드된 파일에 허용되는 최대 크기. Byte 기준. 1024 * 1024 = 1MB. 기본크기는 무제한
maxRequestSize : form 데이터 요청에 허용되는 최대크기. 기본크기는 무제한


상태정보 관리

  • Cookie 기술 : 클라이언트별 상태 정보를, 브라우저 (=클라이언트) 안에 저장.
    브라우저에 저장하므로, 보안이 중요한 정보는 저장하면 안됨.
    가벼운 정보(작은 정보)위주로 저장.
  • HttpSession 기술 : 클라이언트별 상태 정보를, 웹 서버의 HttpSession 객체 에 저장.
    서버에 저장하므로, 보안이 주용한 정보 저장.
    모든 브라우저의 상태정보를 웹 서버 혼자 저장하므로 웹 서버에 부담이 될 수 있기 대문에,
    저장을 유지하는 시간은 브라우저가 구동되어있는 시간 동안으로 제한.
    ( = 웹 브라우저와 생명주기 같음)
    로그인기능, 쇼핑카트 기능 등.

HttpSession 객체

  • 브라우저 별로 한 개의 객체만 생성.
  • req객체의 getSession() 또는 getSession(true) 메소드 호출하여 생성
  • HttpSession 객체에 보관되는 상태정보는 객체로 만들어서, 유일한 이름과 함께 저장.
    ==> 속성바인딩. session.setAttribute("name", value);
    (이름 unique하게 지정해야 함)
  • HttpSession 객체 생성시, 세션 ID가 부여됨 -> Cookie 에 담아서, 요청헤더에 담아 전송.

forward

  • 클라이언트로부터 수행 요청받은 A가, 수행 권한을 B에게 넘겨서 대신 응답하게 함.
    (= 위임. Delegation)
    URL문자열 변화 없음. 동일 서버의, 동일 웹 어플리케이션 자원으로만 요청 재지정 가능.
    따라서, contextPath는 생략해야 한다.
    (어차피 같은 웹앱 자원이니까, 서버가 자동으로 붙여서 대상 찾기 때문)

redirect

  • 클라이언트로부터 수행 요청받은 A가, 302 라는 응답코드와 재요청할 B자원 URL 정보를 응답.
    -> 브라우저가 응답 내용 파악하여 서버에 B 자원 재요청.
  • 동일 서버 뿐만 아니라, 다른 웹사이트 자원으로도 요청 재지정 가능.
profile
내가 보려고 쓰는 블로그

0개의 댓글