Servlet 핵심 API, HttpServletRequest 와 HttpServletResponse

Yeppi's 개발 일기·2022년 5월 25일
0

Servlet&JSP

목록 보기
6/13

1. HttpServletRequest

HTTP 요청 프로토콜과 관련된 객체

1) 객체 생성

  • 서블릿 객체는 서블릿 컨테이너가 생성하고 관리
  • 콜백 메소드 호출 역시 마찬가지
  • 콜백 메소드가 호출되기 위해서는?
    콜백 메소드의 매개변수로 선언한 데이터가 반드시 인자로 전달되어야 함

1번 HTTP 요청

  • 브라우저가 요청한 수십가지의 모든 정보를 담아서 HttpServletRequest 객체에 세팅

2번 HttpServletRequest

  • 서블릿 컨테이너가 doPost() 메서드를 호출하기 바로 직전에
    HttpServletRequest 객체를 미리 생성하고 있음

3번 doPost() 메서드

  • doPost() 에게/참조변수 넘겨줌

👉 즉, 참조변수를 이용하면? 메모리상의 HttpServletRequest 객체에 접근이 가능해짐

2) 객체 활용

  • 시용자 입력 정보 및 브라우저 정보 등 다양한 정보 활용 가능

  • LoginServlet.java

		System.out.println("-----------------Start Line-----------------");
		String method = request.getMethod();
		String uri = request.getRequestURI();
		String protocol = request.getProtocol();
		System.out.println(method + " " + uri + " " + protocol);
		
		System.out.println("-----------------Message Header-------------");
		System.out.println("Host : " + request.getHeader("host"));
		System.out.println("Connection : " + request.getHeader("connection"));
		System.out.println("User-Agent : " + request.getHeader("user-agent"));
		System.out.println("Accept : " + request.getHeader("accept"));
		System.out.println("Accept-Encoding : " + request.getHeader("accept-encoding"));
		System.out.println("Accept-Language : " + request.getHeader("accept-language"));
		
		System.out.println("-----------------Message Body-------------");
		System.out.println(request.getParameter("id"));


3) 계층 구조

ServletRequest > HttpServletRequest

  • HttpServletRequest, ServletRequest 는 인터페이스

  • 자바의 스펙을 관리하는 오라클이 해당 인터페이스를 만듦

    • 인터페이스에 대한 구현 클래스는 서블릿 컨테이너를 개발하는 각 벤더가 담당
    • 벤더 = 회사
  • HttpServletRequest

    • 인터페이스로서, 상속 구조에서 최상위 부모
    • 부모인 ServletRequest 로부터 상속한 메소드 + 자신이 추가한 메소드를 모두 가짐
      👉 따라서 우리가 직접적으로 알 필요는 없음 (ex. tv 리모컨)



4) 메소드

ServletRequest 로부터 상속받은 메소드

메소드기능
void setAttribute(String name, Object value)ServletRequest에 데이터를 등록한다.
Object getAttribute(String name)ServletRequest에 등록된 데이터를 추출한다.
Enumeration getAttributeNames()ServletRequest에 등록된 데이터의 name 목록을 리턴한다.
void removeAttribute(String name)ServletRequest에 등록된 데이터를 삭제한다.
String getCharacterEncoding()ServletRequest에 설정된 인코딩 정보를 리턴한다.
void setCharacterEncoding(String encoding)message-body에 포함된 문자 데이터에 대한 인코딩을 설정한다.
String getParameter(String name)사용자가 입력한 파라미터 중에서 name에 해당하는 파라미터 값을 리턴한다.
String[] getParameterValues(String name)하나의 name을 통해 전달된 여러 개의 값을 배열로 리턴한다. ex. 체크박스
Enumeration<String> getParameterNames()사용자가 전달한 파라미터들의 name 목록을 리턴한다.
int getContentLength()message-body를 통해 전달한 데이터의 크기를 리턴한다.
String getProtocole()요청에 사용한 프로토콜의 이름/버전을 리턴한다.
String getRemoteAddr()요청한 브라우저의 IP 주소를 리턴한다.
int getServerPort()요청을 받은 서버의 포트 번호를 리턴한다.
ServletContext getServletContext()서버가 구동되는 순간 서버에 등록된 웹 애플리케이션 당 하나씩 생성되는 ServletContext 객체를 리턴한다.
RequestDispatcher getRequestDispatcher(String path)브라우저의 요청을 특정 경로(path)로 이동하기 위한 RequestDispatcher 객체를 리턴한다.


HttpServletRequest 에 추가된 메소드

메소드기능
String getHeader(String headerName)headerName에 해당하는 헤더 값을 리턴한다.
Enumeration getHeader(String headerName)headerName에 해당하는 헤더 값 여러 개를 Enumeration으로 리턴한다.
Enumeration getHeaderNames()헤더 이름 목록을 Enumeration으로 리턴한다.
Cookie[] getCookies()브라우저가 전송한 쿠키 정보를 배열로 리턴한다.
HttpSession getSession()브라우저와 매핑된 세션 객체를 리턴하고, 없으면 새로 생성해서 리턴한다.
HttpSession getSession(boolean create)브라우저와 매핑된 세션이 없을 때 create 설정이 true면 새로운 세션을 생성하여 리턴하고, false면 null을 리턴한다.
boolean isRequestedSessionValid()브라우저와 매핑된 세션이 유효한지 리턴한다.
String getRequestedSessionId()브라우저와 매핑된 세션의 아이디를 리턴한다.
boolean isRequestedSessionIdFromCookie()브라우저와 매핑된 세션의 ID가 쿠키로 전달됐는지 리턴한다.
boolean isRequestedSessionIdFromURL()브라우저와 매핑된 세션의 ID가 요청 URL에 포함되어 전달됐는지 리턴한다.
StringBuffer getReqeustURL()브라우저가 요청한 URL을 리턴한다.
String getRequestURI()브라우저가 요청한 URL에서 URI만 리턴한다.
String getQueryString()요청에서 쿼리 문자열을 리턴한다.
String getMethod()요청 방식을 리턴한다.


2. HttpServletResponse

HTTP 응답 프로토콜과 관련된 객체

1) HttpServletResponse 계층 구조

ServletResponse > HttpServletResponse

  • 서블릿 객체의 service() 메소드의 매개변수로 선언

  • 서블릿 컨테이너가 생성하여 전달

  • HttpServletRequest 와 유사



2) HttpServletResponse 메소드

ServletResponse가 제공하는 메소드

메소드기능
void setContentType(String type)응답 메시지의 데이터 형식(MIME TYPE)을 설정한다.
응답에 대한 인코딩
꼭 출력 스트림 얻기 전에 선언해야 함
PrintWriter getWriter()HTTP 응답 프로토콜 message-body와 연결된 출력 스트림을 리턴한다.
void setBufferSize(int size)출력 스트림의 버퍼 크기를 설정한다.


ServletResponse 로부터 상속받아 추가된 메서드

메소드기능
void setStatus(int statusCode)HTTP 응답 상태 코드를 설정한다.
void addCookie(Cookie cookie)message-header에 Set-Cookie 헤더 값으로 쿠키(Cookie)를 추가한다.
void setHeader(String name, String value)message-header에 name-value 쌍의 헤더를 설정한다.
void sendRedirect(String path)요청한 브라우저가 Path에 해당하는 화면을 다시 요청(Redirect)하도록 지정한다.

sendRedirect

  • 네트워크 트래픽 증가
  • 포워딩과 비슷
  • 두번 요청과 두번 응답

빨간색으로 표시된 메서드는 꼭 기억하고,
볼드처리된 메서드도 자세하게 알아두자

profile
imaginative and free developer. 백엔드 / UX / DATA / 기획에 관심있지만 고양이는 없는 예비 개발자👋

0개의 댓글