WEB

Servlet 구조 분석(7) - HttpServletResponse

긍.응.성 2020. 4. 19. 16:52
반응형

Servlet 구조 분석(6) - HttpServletRequest에 이어 HttpServletResponse에 대해 알아보았습니다.

 

Servlet 구조 분석(6) - HttpServletRequest

Servlet 구조 분석(4) - ServletRequest , (5) - ServletResponse 스터디를 통해 Servlet에서 얻을 수 있는 요청과 응답 서블릿에 대해 알아보았습니다. 이어서 HTTP Protocol을 위해 만들어진 서블릿, HttpServle..

ckddn9496.tistory.com

9. Interface HttpServletResponse

ServletResponse의 sub-interface이다. HttpServletRequest와 같이 서블릿 컨테이너가 HttpServletResponse를 생성 후, service 메서드(doGet, doPost)의 인자로 전달한다.

ServletResponse와 차이점은 아래와 같다

     
분류 ServletResponse HttpServletResponse
패키지 javax.servlet javax.servlet.http
상속 - ServletResponse의 sub-interface
함께 사용되는 클래스 GenereicServlet HttpServlet
Usage getWriter()

ServletResponse의 모든 기능 상속

encodeURL(), sendRedirect() 추가

프로토콜 Protocol independent HTTP Protocol
  HTTP가 사용되지 않을 적, Web Conainer는 클라이언트로 부터 온 요청을 ServletResponse를 통해 전달했다 HTTP 등장이후 Web Conainer는 HttpServletResponse를 사용하였다
package javax.servlet.http;
...
public interface HttpServletResponse extends ServletResponse {
    int SC_CONTINUE = 100;
    int SC_SWITCHING_PROTOCOLS = 101;
    int SC_OK = 200;
    int SC_CREATED = 201;
    int SC_ACCEPTED = 202;
    int SC_NON_AUTHORITATIVE_INFORMATION = 203;
    int SC_NO_CONTENT = 204;
    int SC_RESET_CONTENT = 205;
    int SC_PARTIAL_CONTENT = 206;
    int SC_MULTIPLE_CHOICES = 300;
    int SC_MOVED_PERMANENTLY = 301;
    int SC_MOVED_TEMPORARILY = 302;
    int SC_FOUND = 302;
    int SC_SEE_OTHER = 303;
    int SC_NOT_MODIFIED = 304;
    int SC_USE_PROXY = 305;
    int SC_TEMPORARY_REDIRECT = 307;
    int SC_BAD_REQUEST = 400;
    int SC_UNAUTHORIZED = 401;
    int SC_PAYMENT_REQUIRED = 402;
    int SC_FORBIDDEN = 403;
    int SC_NOT_FOUND = 404;
    int SC_METHOD_NOT_ALLOWED = 405;
    int SC_NOT_ACCEPTABLE = 406;
    int SC_PROXY_AUTHENTICATION_REQUIRED = 407;
    int SC_REQUEST_TIMEOUT = 408;
    int SC_CONFLICT = 409;
    int SC_GONE = 410;
    int SC_LENGTH_REQUIRED = 411;
    int SC_PRECONDITION_FAILED = 412;
    int SC_REQUEST_ENTITY_TOO_LARGE = 413;
    int SC_REQUEST_URI_TOO_LONG = 414;
    int SC_UNSUPPORTED_MEDIA_TYPE = 415;
    int SC_REQUESTED_RANGE_NOT_SATISFIABLE = 416;
    int SC_EXPECTATION_FAILED = 417;
    int SC_INTERNAL_SERVER_ERROR = 500;
    int SC_NOT_IMPLEMENTED = 501;
    int SC_BAD_GATEWAY = 502;
    int SC_SERVICE_UNAVAILABLE = 503;
    int SC_GATEWAY_TIMEOUT = 504;
    int SC_HTTP_VERSION_NOT_SUPPORTED = 505;
    // HTTP Status Code

    void addCookie(Cookie cookie);
    // 응답에 쿠키를 추가한다
    // 여러번 호출하여 두 개 이상의 쿠키를 추가할 수 있다

    boolean containsHeader(String name);
    // name에 해당하는 header가 존재하는지 여부를 반환한다

    String encodeURL(String url);
    // sessionID를 포함하여 URL을 인코딩한다
    // 인코딩이 필요하지 않다면 url 변경은 일어나지 않는다

    String encodeRedirectURL(String url);
    // sendRedirect 메서드를 위해 URL을 인코딩한다
    // encodeURL과 같이 인코딩이 필요하지 않다면 변경은 일어나지 않는다

    /** @deprecated */
    @Deprecated
    String encodeUrl(String var1);

    /** @deprecated */
    @Deprecated
    String encodeRedirectUrl(String var1);

    void sendError(int sc, String msg) throws IOException;
    // 응답에 sc로 statusCode를 세팅하고 에러 응답을 전송하고 버퍼를 비운다.
    // statusCode 에 맞는 error-page declaration이 설정되어 있다면, msg는 무시된다

    void sendError(int sc) throws IOException;
    // sc로 statusCode를 변경 후 에러 응답을 전송하고 버퍼를 비운다. 

    void sendRedirect(String location) throws IOException;
    // redirect location URL로 리다이렉트하고 버퍼를 비운다.
    // StatusCode는 302 Found로 적용된다

    void setDateHeader(String name, long date);
    // 응답헤더 name에 date값을 설정한다
    // 이미 존재한다면 새로운 date 값이 적용된다

    void addDateHeader(String name, long date);
    // setDateHeader와 비슷하지만 multiple values 지원

    void setHeader(String name, String value);
    // 응답헤더 name에 value를 설정한다. 덮어쓴다

    void addHeader(String name, String value);
    // setHeader와 같지만 multiple values 지원

    void setIntHeader(String name, int value);
    // setHeader와 같지만 값이 int형이다

    void addIntHeader(String name, int value);
    // setIntHeader의 multiple values 지원형

    void setStatus(int cs);
    // 응답에 status code를 설정한다

    /** @deprecated */
    @Deprecated
    void setStatus(int var1, String var2);

    int getStatus();
    // 응답의 status code를 반환한다

    String getHeader(String name);
    // name에 해당하는 header 값을 반환한다

    Collection<String> getHeaders(String name);
    // name에 해당하는 응답 헤더값에 대한 collection을 반환한다

    Collection<String> getHeaderNames();
    // 응답 헤더의 name에 대한 Collection을 반환한다

    default void setTrailerFields(Supplier<Map<String, String>> supplier) {
    }

    default Supplier<Map<String, String>> getTrailerFields() {
        return null;
    }
}

※ 참고자료

반응형