반응형
HttpServletRequest
=> HTTP 요청 메시지를 편리하게 조회할 수 있게 하는 객체
HTTP 요청 메시지
- START LINE - HTTP 메소드, URL, 쿼리 스트링, 스키마, 프로토콜
- HEADER - 헤더 조회
- BODY - form 파라미터 형식 조회, msg body 데이터 직접 조회
HttpServletRequest 객체의 여러 기능
- 임시 저장소: 해당 HTTP 요청이 시작 ~ 끝까지 유지
- 세션 관리
기본 사용 방법
src/main/java/hello/servlet/basic/request에 RequestHeaderServlet.java를 생성했다.
@WebServlet(name = "requestHeaderServlet", urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse res) {
printStartLine(req);
}
private void printStartLine(HttpServletRequest request) {
System.out.println("--- REQUEST-LINE - start ---");
System.out.println("request.getMethod() = " + request.getMethod()); //GET
System.out.println("request.getProtocal() = " + request.getProtocol()); //HTTP/1.1
System.out.println("request.getScheme() = " + request.getScheme()); //http
// http://localhost:8080/request-header
System.out.println("request.getRequestURL() = " + request.getRequestURL());
// /request-test
System.out.println("request.getRequestURI() = " + request.getRequestURI());
//username=hi
System.out.println("request.getQueryString() = " + request.getQueryString());
System.out.println("request.isSecure() = " + request.isSecure()); //https 사용 유무
System.out.println("--- REQUEST-LINE - end ---");
System.out.println();
}
}
도메인:포트/request-header를 통해 접근이 가능하고, 종종 쓰이는 메소드들을 출력해보았다.
이 외에도 HttpServletRequest의 정보를 알 수 있는 메소드들을 생성했다.
// Header 모든 정보
private void printHeaders(HttpServletRequest req) {
System.out.println("--- Headers - start ---");
/* Enumeration<String> headerNames = req.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println(headerName + ": "+headerName);
} */
req.getHeaderNames().asIterator() // asIterator(): java 9 이상
.forEachRemaining(headerName -> System.out.println(headerName + ": "+headerName));
System.out.println("--- Headers - end ---");
System.out.println();
}
// Header 정보
private void printHeaderUtils(HttpServletRequest req) {
System.out.println("--- Header 편의 조회 start ---");
System.out.println("[Host 편의 조회]");
System.out.println("req.getServerName() = " + req.getServerName()); //Host 헤더
System.out.println("req.getServerPort() = " + req.getServerPort()); //Host 헤더
System.out.println();
System.out.println("[Accept-Language 편의 조회]");
req.getLocales().asIterator()
.forEachRemaining(locale -> System.out.println("locale = " +locale));
System.out.println("req.getLocale() = " + req.getLocale());
System.out.println();
System.out.println("[cookie 편의 조회]");
if (req.getCookies() != null) {
for (Cookie cookie : req.getCookies()) {
System.out.println(cookie.getName() + ": " + cookie.getValue());
}
}
System.out.println();
System.out.println("[Content 편의 조회]");
System.out.println("req.getContentType() = " + req.getContentType());
System.out.println("req.getContentLength() = " + req.getContentLength());
System.out.println("req.getCharacterEncoding() = " + req.getCharacterEncoding());
System.out.println("--- Header 편의 조회 end ---");
System.out.println();
}
private void printEtc(HttpServletRequest request) {
System.out.println("--- 기타 조회 start ---");
System.out.println("[Remote 정보]");
System.out.println("request.getRemoteHost() = " + request.getRemoteHost()); //
System.out.println("request.getRemoteAddr() = " + request.getRemoteAddr()); //
System.out.println("request.getRemotePort() = " + request.getRemotePort()); //
System.out.println();
System.out.println("[Local 정보]");
System.out.println("request.getLocalName() = " + request.getLocalName()); //
System.out.println("request.getLocalAddr() = " + request.getLocalAddr()); //
System.out.println("request.getLocalPort() = " + request.getLocalPort()); //
System.out.println("--- 기타 조회 end ---");
System.out.println();
}
메소드들을 달달 외울 필요는 없고 필요할 때 찾아쓰면 될 것 같다.
기타 조회에서 주소가 IPv6 기준으로 나오기 때문에 우리가 아는 형식과 다소 차이가 있을 수 있다.
IPv4를 출력하게 하려면 VM Option에 "-Djava.net.preferIPv4Stack=true"를 추가해야 한다
본 게시글은 김영한 님의 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.
내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.
반응형
'Develop > Java' 카테고리의 다른 글
[Servlet] HttpServletResponse (0) | 2021.04.30 |
---|---|
[Servlet] HTTP 요청 데이터 - GET, POST, Text, JSON (0) | 2021.04.30 |
[Servlet] 서블릿 프로젝트 (0) | 2021.04.09 |
[Java] Invalid character found in method name. HTTP method names must be tokens 에러 (0) | 2021.04.06 |
웹 어플리케이션에 대해 (0) | 2021.03.25 |