http 요청을 개발자 대신에 파싱해 주는 객체. service에 인자로 넣어두면 알아서 받아줌.
요청을 처리할 동안 잠깐 쓸 수 있는 임시 저장소
request.setAttribute("name",value)
request.getSession() 처럼 세션 알 수 있는것도.
메시지 바디를 통으로 읽어들이는 것도 있음.
@WebServlet(name="requestHeaderServlet",urlPatterns = "/request-header")
public class RequestHeaderServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
printStartLine(request);
}
private static void printStartLine(HttpServletRequest request) {
System.out.println(request.getMethod());
System.out.println(request.getProtocol());
System.out.println(request.getScheme());
System.out.println(request.getRequestURI());
System.out.println(request.getRequestURL());
System.out.println(request.getQueryString());
System.out.println(request.isSecure());
}
}
저 외에도 정말 많은 정보를 얻을 수 있다.
헤더에 관한 정보도. 그냥 다 얻을 수 있다.
private void printHeaders(HttpServletRequest request) {
System.out.println("--- Headers - start ---");
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
System.out.println(headerName + ": " + request.getHeader(headerName));
}
// request.getHeaderNames().asIterator()
// .forEachRemaining(headerName -> System.out.println(headerName + ":"
// + request.getHeader(headerName)));
// System.out.println("--- Headers - end ---");
// System.out.println();
}
헤더 key, 이름들을 받아서,
request.getHeader(headerName)으로 값을 받는다.
참고로 request.getHeader("host") 이런 것도 가능.
private void printHeaderUtils(HttpServletRequest request) {
System.out.println("--- Header 편의 조회 start ---");
System.out.println("[Host 편의 조회]");
System.out.println("request.getServerName() = " +
request.getServerName()); //Host 헤더
System.out.println("request.getServerPort() = " +
request.getServerPort()); //Host 헤더
System.out.println();
System.out.println("[Accept-Language 편의 조회]");
request.getLocales().asIterator()
.forEachRemaining(locale -> System.out.println("locale = " +
locale));
System.out.println("request.getLocale() = " + request.getLocale());
System.out.println();
System.out.println("[cookie 편의 조회]");
if (request.getCookies() != null) {
for (Cookie cookie : request.getCookies()) {
System.out.println(cookie.getName() + ": " + cookie.getValue());
}
}
System.out.println();
System.out.println("[Content 편의 조회]");
System.out.println("request.getContentType() = " +
request.getContentType());
System.out.println("request.getContentLength() = " +
request.getContentLength());
System.out.println("request.getCharacterEncoding() = " +
request.getCharacterEncoding());
System.out.println("--- Header 편의 조회 end ---");
System.out.println();
}
이렇게 서버이름, (이번같은 경우 localhost), 포트 번호, Locales 요청한 언어들, 또 쿠키, Content에 대한 것들까지 조회 가능.
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();
}
remote 정보는 요청이 온거에 대한 정보.
local 정보는 서버에 대한 정보
포스트맨을 쓰면, 여러 http 메소드나 헤더등을 설정해서 요청을 보낼 수 있어서 편리함. 바디도 내가 직접 넣을 수 있음.
테스트에 용이
'스프링 > 3. 스프링 MVC' 카테고리의 다른 글
10. GET 요청 정보 (0) | 2023.08.04 |
---|---|
9. http 요청 데이터 (0) | 2023.08.04 |
7. Hello Servlet (0) | 2023.08.03 |
5. 자바 웹 기술 발전 역사 (0) | 2023.08.03 |
4. 서버의 클라이언트에게 제공 방식 (0) | 2023.08.02 |