브라우저에서 요청 정보를 HTTP 객체에 담아 전송한다.

전달받은 HTTP객체를 서버(=Tomcat)이 해석하여 요청을 처리할 서블릿을 호출한다. 서블릿의 service() 메소드에서는 request, response 요청 정보를 가지고 처리 로직을 거쳐 응답한다.
http://localhost:8080/sendMessage?message=abc&code=20@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println(request.getCharacterEncoding());
}| method 명 | 내용 |
|---|---|
| getParameter(String) | client가 전송한 값의 명칭이 매개변수와 같은 값 가져옴 |
| getParameterNames() | client가 전송한 값의 명칭 가져옴 |
| getParameterValues(String) | client가 전송한 값이 여러 개이면 배열로 가져옴 |
| getParameterMap() | client가 전송한 값 전체를 Map방식으로 가져옴 |
| setAttribute(String, object) | request 객체로 전달할 값을 String 이름-Object 값으로 설정 |
| getAttribute(String) | 매개변수와 동일한 객체 속성 값 가져옴 |
| removeAttribute(String) | request객체에 저장된 매개변수와 동일한 속성 값 삭제 |
| setCharacterEncoding(String) | 전송 받은 request객체 값들의 CharaterSet 설정 |
| getRequestDispatcher(String) | 컨테이너 내에서 request, response객체를 전송하여 처리한 컴포넌트(jsp파일 등)를 가져옴 (forward() method와 같이 사용) |
General header
Request header
Response header
Entity header
getHeader() 메소드로 확인 가능한 값
| header 속성 | 값 |
|---|---|
| accept | 요청을 보낼 때 서버에게 요청할 응답 타입 |
| accept-encoding | 응답 시 원하는 인코딩 방식 |
| accept-language | 응답 시 원하는 언어 |
| connection | HTTP 통신이 완료된 후에 네트워크 접속을 유지할지 결정 |
| (기본값: keep-alive = 연결을 열린 상태로 유지) | |
| host | 서버의 도메인 네임과 서버가 현재 Listening 중인 TCP포트 지정 |
| (반드시 하나가 존재. 없거나 둘 이상이면 404) | |
| referer | 이 페이지 이전에 대한 주소 |
| sec-fetch-dest | 요청 대상 |
| sec-fetch-mode | 요청 모드 |
| sec-fetch-site | 출처(origin)와 요청된 resource 사이의 관계 |
| sec-fetch-user | 사용자가 시작한 요청일 때만 보내짐 (항상 ?1 값 가짐) |
| cache-control | 캐시 설정 |
| upgrade-insecure-requests | HTTP 메시지 전송 시 보안 적용 |
| user-agent | 현재 사용자가 어떤 클라이언트(OS, browser 포함)을 이용해 보낸 요청인지 명시 |
cross-site : 요청 개시자와 resource를 호스팅하는 서버가 다른 사이트일 경우same-origin : 요청 개시자와 resource를 호스팅하는 서버가 동일한 출처(origin)를 가질 경우same-site : 요청 개시자와 resource를 호스팅하는 서버가 동일한 scheme, 도메인/서브도메인을 가지지만 port가 다른 경우none : 요청이 사용자로부터 시작되었을 경우. (ex. 주소창에 URL 입력, 브라우저 창에 파일 끌어다 놓기 등.)cors : CORS protocol 요청navigate : HTML document 사이 이동 시no-cors : no-cors 요청same-origin : 요청 중인 resource와 동일한 출처websocket : websocket 연결을 설정하기 위한 요청| method 명 | 내용 |
|---|---|
| setContentType(String) | 응답으로 작성하는 페이지의 MIME type을 설정 |
| setCharacterEncoding(String) | 응답하는 데이터의 CharacterSet을 지정 |
| getWriter() | 페이지에 문자 전송을 위한 Stream을 가져옴 |
| getOutputStream() | 페이지에 byte단위의 전송을 위한 Stream을 가져옴 |
| sendRedirect(String) | client가 매개변수의 페이지를 다시 서버에 요청함 |
sendError() 메소드를 사용하여 에러를 발생시킬 수 있다.
// response.sendError(*에러상태 코드*, "*현출할 에러 메시지*");
response.sendError(500, "서버 내부 오류입니다. 서버 오류는 개발자의 잘못이고, 개발자는 여러분입니다.");

web.xml 파일에 를 등록하여 에러 상태코드에 해당하는 에러가 발생하면 서블릿에서 가로채도록 설정할 수 있다.
<error-page>
<error-code>404</error-code>
<location>/showErrorPage</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/showErrorPage</location>
</error-page>

응답 헤더의 타입을 설정한다.
response.setContentType("text/html");
응답할 내용의 인코딩 방식을 설정한다.
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");※ 반드시 getWriter()로 스트림을 얻어오기 전에 설정해야 한다.
응답을 위한 스트림을 가져와 응답을 내보낸다.
PrintWriter out = response.getWriter();
out.print(responseBuilder.toString());
응답에 사용한 스트림을 닫는다.
out.close();


요청받은 서블릿에서 forward하는 코드 예시
request.setAttribute("userId", userId);
RequestDispatcher r.....d = request.getRequestDispatcher("print");
rd.forward(request, response);
위임(forward)받은 서블릿에서 속성 값을 꺼내는 코드 예시
String userId = (String) request.getAttribute("userId");


타 사이트로 이동하는 경우
response.sendRedirect("http://www.naver.com");
타 서블릿으로 이동하는 경우 (타 서블릿의 url pattern 작성)
response.sendRedirect("redirect");


| method | 내용 |
|---|---|
| setAttribute(String,Object) | 공유 데이터 저장 |
| getAttribute(String) | 공유 데이터 가져옴 |
| getAttributeName() | 공유 데이터 전체의 명칭 가져옴 |
| removeAttribute(String) | 공유 데이터 자체를 삭제 |