본문 바로가기
Develop/Java

[Servlet] HttpServletRequest 이용하기

by 연로그 2021. 4. 9.
반응형

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편 - 백엔드 웹 개발 핵심 기술' 강의를 구매 후 정리하기 위한 포스팅입니다.

내용을 임의로 추가, 수정, 삭제한 부분이 많으며 정확한 이해를 위해서 강의를 구매하시는 것을 추천 드립니다.

 

inf.run/B756

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., 원

www.inflearn.com

 

반응형