WEB
Servlet 구조 분석(6) - HttpServletRequest
긍.응.성
2020. 4. 19. 16:21
반응형
Servlet 구조 분석(4) - ServletRequest , (5) - ServletResponse 스터디를 통해 Servlet에서 얻을 수 있는 요청과 응답 서블릿에 대해 알아보았습니다. 이어서 HTTP Protocol을 위해 만들어진 서블릿, HttpServlet에서 사용하는 HttpServeltRequest와 HttpServletResponse에 대해 알아보았습니다.
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;
}
}
※ 참고자료
반응형