자바 (16). HttpServletRequest, HttpServletResponse 그리고 HandlerInterceptor 하나하나 파해쳐보기
HttpServletRequest, HttpServletResponse 그리고 HandlerInterceptor 하나하나 파해쳐보기
0. 들어가기전에
이제 본격적으로 챗봇에 대해 배우고 있다.
배울게 왜이렇게 많은거야!!
챗봇을 직접적으로 이곳에 포스팅 하진 않겠지만
그곳에서 사용하는 elasticsearch, rabbitMQ, redddis 등등등등을 하나하나 다루어 보고자 한다.
오늘은 일단 위의 HttpServletRequest, HttpServletResponse 그리고 HandlerInterceptor를 알아보려한다.
1.HttpServletRequest
WAS는 클라이언트로부터 요청이 들어오면 HttpServletRequest 객체를 생성하여 요청정보에 있는 패스로 서블릿에게 값(정보와 동작)을 전달한다.
-
http 프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용
-
헤더정보, 파라미터, 쿠키, URL 등의 정보를 읽어 들이는 메소드를 가지고 있다.
-
BODY의 STREAM을 읽어 들이는 메서드를 가지고 있다.
1-1 HTTPServletRequest 메소드 정리
- local의 기본 정보 (IP, Name, Port)
Local IP : request.getLocalAddr() Local Name : request.getLocalName() Local Port : request.getLocalPort()
- 클라이언트 (IP, Host, Port)
Remote IP : request.getRemoteAddr() Remote Host : request.getRemoteHost() Remote Port : request.getRemotePort()
- 서버(Name, Port)
Server Name : request.getServerName() Server Port : request.getServerPort()
- 지역정보, 프로토콜, 스키마, 보안 채널 사용 여부
Locale : request.getLocale() Protocol : request.getProtocol() Scheme : request.getScheme() // http, https, ftp 사용여부 Secure Channel : request.isSecure()
- URI, URL, 컨텍스트 경로, 서블릿 경로, 메소드
REQUEST URI : request.getRequestURI() REQUEST URL : request.getRequestURL() Context Path : request.getContextPath)() Servlet Path : request.getServletPath() Method : request.getMethod() // GET, POST 구분
- Session ID 에 대한 정보
Session ID : request.getREquestedSessionId() Cookie Session ID : request.getRequestSEssionFromCookie() URL Session ID : request.isRequestdSessionFromURL() still valid Session : request.isRequestedSessionValid()
- Header 정보 확
Enumeration oHeader = request.getHeaderNames(); whild(oHeader.hasMoreElements()) { String strName = (String) oHeader.nextElement(); STring strValue = request.getHeader(strName); }
- Cookie 정보 확인
Cookie oCookiesp[] = request.getCookies(); for(int i = 0; i < oCookies.length; i++) { String strName = oCookies[i].getName(); String strValue = oCookies[i].getValue(); }
- HTML 폼을 통해 넘어온 데이터를 받는 방법
Enumeration oParam = request.getParamaeterNames(); while(oParam.hasMoreElements()) { String strName = (String)oParam.nextElement(); String strValue = request.getParameter(strName); }
1-2 Body 정보를 확인하는 방법인
@RequestMapping(value = "example")
public void example(HttpServletRequest request, HttpServletResponse response, HttpEntity<String> httpEntity, ModelMap Model) throws Exception {
// 1. HttpServletRequest request를 통하여 BODY를 전달 받는 경우
request.getReader().readLine();
// 2. HttpEntity 를 통하여, BODY를 전달 받은 경우
String reqBody = httpEntity.getBody();
JSONArray mArray = new JSONArray(reqBody);
JSONObject jsonObj;
// 3. Body 프로퍼티를 지정하여 받을경우
String attrKey = "JSON_BODY";
JsonNode jn = (JsonNode) request.getAttribute(attrKey);
}
2 번은 reqBody에 String 형태의 JsonArray (HttpEntity.getBod())에 담긴 DATA 를 가져온다. 다시, JSONArray 형태로 변환하기 위해서, reqBody를 JSONArray로 변환하여 준다.:
2. HttpServletResponse
요청정보에 대한 값을 웹브라우저에 다시 보낼 때 사용하기 위해 HttpServletResponse 객체를 생성한다.
WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServletResponse 객체를 생성하여 서블릿에게 전달한다.
서블릿은 해당 객체를 이용하여 content-type, 응답코드 응답메시지등을 전송한다.