WEB

Servlet 구조 분석(6) - HttpServletRequest

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

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

 

Servlet 구조 분석(5) - ServletResponse

Servlet 구조 분석(4) - ServletRequest 에 이어서, Servlet interface의 service 메서드의 파라미터로 들어오는 응답, ServletRespone에 대해 분석해보았습니다. Servlet 구조 분석(4) - ServletRequest Servlet..

ckddn9496.tistory.com

8. interface HttpServletRequest

ServletRequest의 sub-interface이다. ServletRequest와 같이 서블릿 컨테이너는 HttpServletRequest를 생성한 후 서블릿의 service 메서드(doGet, doPost, etc)의 인자로 넘긴다.

ServletRequest와 차이점은 아래와 같다

     
분류 ServletRequest HttpServletRequest
패키지 javax.servlet javax.servlet.http
상속 - ServletRequest의 sub-interface
함께 사용되는 클래스 GenereicServlet HttpServlet
프로토콜 Protocol independent HTTP Protocol
  HTTP가 사용되지 않을 적, Web Conainer는 클라이언트로 부터 온 요청을 ServletRequest를 통해 전달했다 HTTP 등장이후 Web Conainer는 HttpServletRequest를 사용하였다
package javax.servlet.http;
...
public interface HttpServletRequest extends ServletRequest {

    String BASIC_AUTH = "BASIC";
    String FORM_AUTH = "FORM";
    String CLIENT_CERT_AUTH = "CLIENT_CERT";
    String DIGEST_AUTH = "DIGEST";
    // getAuthType에 사용될 AUTH_TYPE

    String getAuthType();
    // 서블릿을 보호하는데 사용중인 authentication scheme의 이름을 반환한다
    // 모든 서블릿 컨테이너는 basic, from 긜고 client certificate authentication을 지원하며 추가적으로 digest authentication이 지원될 수 있다
    // 아무 authentication이 지원되지 않으면 null 을 반환한다

    Cookie[] getCookies();
    // 클라이언트가 보낸 요청에 존재하는 모든 쿠키를 배열에 담아 가져온다
    // 쿠키가 존재하지 않을 경우 null 을 반환한다

    long getDateHeader(String name);
    // Date를 표현하는 long값을 반환한다
    // If-Modified-Since와 같이 date 정보를 갖고있는 헤더가 있을 때 사용할 수 있다
    // 날짜에 대한 값을 가진 헤더가 존재하지 않는다면 -1을 반환한다
    // IllegalArgumentException: header 값이 date로 전환될 수 없는 예외

    String getHeader(String name);
    // name에 해당되는 헤더의 값을 반환한다
    // name에 해당되는 헤더가 존재하지 않으면 null을 반환한다
    // header name은 case-insensitive (대소문자 구분) 하다
    // name에 해당하는 헤더의 값이 많다면 가장 첫번째 값을 반환한다. 모든 값을 받고싶다면 getHeaders()를 사용하라

    Enumeration<String> getHeaders(String name);
    // name에 해당되는 모든 헤더 값에 대한 Enumeration을 반환한다
    // 대소문자를 구분하며, 해당하는 헤더 값이 없다면 empty Enumeration이 반환된다.

    Enumeration<String> getHeaderNames();
    // 요청에 들어간 모든 헤더 name에 대한 Enumeration을 반환한다
    // 일부 서블릿 컨테이너는 서블릿에서 header 정보에 접근하지 못하게 하고 이 경우 null을 반환한다

    int getIntHeader(String name);
    // name에 해당되는 헤더의 값을 int형으로 반환한다
    // name에 해당되는 헤더가 존재하지 않으면 -1을 반환한다
    // NumberFormatException: int형으로 변환할 수 없는 예외

    default HttpServletMapping getHttpServletMapping() {
    // HttpServletMapping: HttpServlet이 HttpServletRequest를 Runtime에 invoke한 방법을 정한다.
    // web.xml에 지정한 servlet, servlet-mapping 태그의 정보를 HttpServletMapping 객체에 담을 수 있다
    // 일단은 default 매핑 정보로 반환하게 되어있다

        return new HttpServletMapping() {
            public String getMatchValue() {
                return "";
            }

            public String getPattern() {
                return "";
            }

            public String getServletName() {
                return "";
            }

            public MappingMatch getMappingMatch() {
                return null;
            }

               ...
        };
    }

    String getMethod();
    // HTTP Method 이름을 반환한다.
    // ex> GET, POST, PUT

    // requestURI = contextPath + servletPath + pathInfo [+queryString]

    String getPathInfo();
    // pathInfo를 반환한다. query string은 제외
    // extra path information 정보가 없다면 null 값을 반환한다

    String getPathTranslated();
    // path info을 real path로 변환한 값을 반환한다
    // extra path information 정보가 없다면 null 값을 반환한다

    default PushBuilder newPushBuilder() {
        return null;
    }

    String getContextPath();
    // contextPath를 반환한다
    // ServletContext.getContextPath()값을 반환한다.

    String getQueryString();
    // 요청의 query string을 반환한다
    // query string이 없다면 null을 반환한다

    String getRemoteUser();
    // 인증된 사용자에게 로그인에 대한 정보를 반환한다
    // 인증되지 않았다면 null을 반환한다

    boolean isUserInRole(String var1);
    // 인증된 사용자에 대해 특정 logical role에 대한 권한이 있는가의 여부를 반환한다

    Principal getUserPrincipal();
    // 현재 인증된 사용자에 대한 Principal 객체를 반환한다

    String getRequestedSessionId();
    // 클라이언트의 sessionId를 반환한다
    // 현재 유효한 sessionId 와 같지 않아야 한다
    // 클라이언트가 session ID가 없다면 null을 반환한다

    String getRequestURI();
    // URI를 반환한다
    // ex> GET http://foo.bar/a,html HTTP/1.0 -> /a.html

    StringBuffer getRequestURL();
    // URL을 반환한다
    // forward된 요청일 경우, server path가 아닌, RequestDispatcher에서 반영된 경로를 반환한다

    String getServletPath();
    // servlet path를 반환한다

    HttpSession getSession(boolean create);
    // 요청과 관련된 세션을 반환한다. 세션이 없고 create = true일 경우 새로운 세션을 반환한다

    HttpSession getSession();
    // 현재 세션을 가져오고 존재하지 않으면 생성하여 반환한다.

    String changeSessionId();
    // 현재 세션을 변경하고 새로운 세션 id를 반환한다
    / IllegalStateException: 이 요청에 세션이 없을 때 발생하는 예외

    boolean isRequestedSessionIdValid();
    // 유효한 session 일경우 true
    // 아닐경우 false 반환

    boolean isRequestedSessionIdFromCookie();
    // Session이 HTTP cookie로 전달되었으면 true
    // 아닐경우 false 반환

    boolean isRequestedSessionIdFromURL();
    // Session이 URL의 부분으로 전달되었다면 true
    // 아닐경우 false 반환

    /** @deprecated */
    @Deprecated
    boolean isRequestedSessionIdFromUrl();

    boolean authenticate(HttpServletResponse response) throws IOException, ServletException;
    // ServletContext에서 명시된 로그인 메커니즘을 이용하여 사용자 인증 여부 확인
    // 인증 여부에 따라 true, false 반환


    void login(String username, String password) throws ServletException;
    // username과 password로 login을 진행한다.
    // ServletContext에서 정의한 login 메커니증에 따라 성공적으로 로그인되었다면
    // getUserPrincipal, getRemoteUser, getAuthType의 값이 만들어져 반환된다

    void logout() throws ServletException;
    // 로그아웃
    // 이후 getUserPrincipal, getRemoteUser, getAuthType 함수는 null을 반환하게 된다

    Collection<Part> getParts() throws IOException, ServletException;
    // multipart/form-data 요청에 모든 part들 가져온디

    Part getPart(String name) throws IOException, ServletException;
    <T extends HttpUpgradeHandler> T upgrade(Class<T> var1) throws IOException, ServletException;
    // name에 해당하는 part를 가져온다

    default Map<String, String> getTrailerFields() {
        return Collections.emptyMap();
    }
    // Trailer Field를 위한 Map을 반환한다

    default boolean isTrailerFieldsReady() {
        return true;
    }
}

※ 참고자료

 

반응형