Java[HttpServletRequest,HttpServletResponse]
HttpServlet
HttpServletRequest
서블릿에서 클라이언트의 HTTP 요청에 대한 정보를 담고 있는 객체입니다.
주로 데이터에 접근할 수 있도록 도와주는 역할을 하고 있습니다.
서블릿에서 HTTP 요청을 받아오면 헤더에 대한 정보를 확인할 수 있습니다.
예제 코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@WebServlet(name = "requestHeaderServlet", urlPatterns = "/information")
public class loginServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
request.getMethod();
//Get
request.getProtocol();
//HTTP/2.0
request.getScheme();
//http://localhost:8080/information
request.getQueryString();
//username=example
response.getWriter().write("ok");
}
}
- http://localhost:8080/information?username=example
- request.getMethod(); -> HTTP의 요청메시지의 Method를 확인할 수 있습니다.
- request.getProtocol(); -> HTTP의 요청메시지의 프로토콜을 확인할 수 있습니다.
- request.getScheme(); -> HTTP의 요청메시지의 스키마를 확인할 수 있습니다.
- request.getQueryString(); -> HTTP의 요청메시지의 쿼리를 확인할 수 있습니다. 이 외에도 다양한 기능들이 존재합니다.
HTTP 요청 데이터
HTTP 요청 메시지를 통해 클라이언트에서 서버로 데이터를 전달하는 방법은 주로 3가지가 있습니다.
- GET - 쿼리 파라미터
- 메세지 바디 없이 URL에 쿼리 파라미터에 데이터를 포함해서 전달하는 방법입니다.
- /{url}?username=example
- 주로 검색, 필터, 페이징에 많이 사용됩니다.
- 메세지 바디 없이 URL에 쿼리 파라미터에 데이터를 포함해서 전달하는 방법입니다.
- POST - HTML Form
- 메세지 바디에 쿼리 파라미터 형식으로 전달하는 방법입니다
- username=example
- 주로 회원가입, 상품주문, HTML Form에 사용됩니다.
- 메세지 바디에 쿼리 파라미터 형식으로 전달하는 방법입니다
- HTTP message body에 데이터를 직접 담아서 요청
- HTTP API에서 주로 사용됩니다.
- JSON, XML, TEXT
- HTTP API에서 주로 사용됩니다.
HttpServletResponse
요청을 받고 이에 맞는 요청을 처리한 뒤, 다시 서블릿에서 클라이언트로 응답을 보낼때 데이터를 담당하는 객체입니다.
응답의 컨텐츠 타입과, 문자 인코딩 등 설정을하고, 클라이언트에게 전송할 데이터를 생성하여 보내는 역할을 담당하고 있습니다.
HTTP 응답 데이터
- 단순히 텍스트로 응답합니다.
- writer.println(“ok”);
- HTML 응답
- 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
@WebServlet(name = "responseHtmlServlet", urlPatterns = "/response-html") public class ResponseHtmlServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //Content-Type: text/html;charset=utf-8 response.setContentType("text/html"); response.setCharacterEncoding("utf-8"); PrintWriter writer = response.getWriter(); writer.println("<html>"); writer.println("<body>"); writer.println(" <div>안녕?</div>"); writer.println("</body>"); writer.println("</html>"); } }
- 헤더를 만들고나서, 본분 바디를 작성합니다.
- 예시
- HTTP API - MessageBody JSON 응답
- 예시
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
@WebServlet(name = "responseJsonServlet", urlPatterns = "/response-json") public class ResponseJsonServlet extends HttpServlet { private ObjectMapper objectMapper = new ObjectMapper(); @Override protected void service(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { //Content-Type: application/json response.setHeader("content-type", "application/json"); response.setCharacterEncoding("utf-8"); HelloData data = new HelloData(); data.setUsername("kim"); data.setAge(20); //{"username":"kim","age":20} String result = objectMapper.writeValueAsString(data); response.getWriter().write(result); } }
- 헤더를 만들고나서, 보낼 데이터 객체를 만들고, 데이터를 담은뒤에 JSON 문자로 변환합니다.
- 단 여기서는 content-type를 application/json으로 지정해야 합니다.
- 예시
결론
HttpServletRequest는 서블릿에서 클라이언트의 HTTP 요청 정보를 다루는 객체로, 주로 데이터에 접근하는 역할을 합니다.
HttpServletResponse는 서블릿에서 클라이언트로 응답을 보내는데 사용되며, 응답의 컨텐츠 타입과 문자 인코딩 설정 및 데이터 생성과 전송 역할을 수행합니다.
This post is licensed under CC BY 4.0 by the author.