웹 브라우저에 URL을 입력하고 Enter를 입력하면 웹 브라우저는 도메인과 포트 번호를 이용해서 서버에 접속한다. 그리고 나서 path 정보, 클라이언트 IP, 클라이언트의 다양한 정보를 포함한 요청 정보를 서버에게 전송한다.
클라이어트로부터 요청이 들어오면 WAS는 어떤 일을 하게 되냐면
HttpServletRequest라는 객체와 HttpServletResponse라는 객체를 생성한다.
HttpServletRequest 객체에는 요청할 때 가지고 들어온 다양한 정보들을 이 객체에 담긴다.
그리고 이 HttpServletResponse라는 객체는 현재 이 요청을 보낸 클라이언트에게 전송하기 위해서 담을 수 잇는, 정보를 담을 수 있는 객체에 HttpServletResponse 객체를 생성해 준다.
이렇게 생성된 두 개의 객체를 요청 정보에 있는 path로 매핑된 서블릿에게 전달을 하기 된다.
그리고 전달한 객체는 service(), doGet(), doPost() 같은 메서드에 파라미터로 전달돼서 사용하게 된다.
HttpServletRequest
- http프로토콜의 request정보를 서블릿에게 전달하기 위한 목적으로 사용
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드를 가지고 있음
- Body의 Stream을 읽어 들이는 메소드를 가지고 있음.
HttpServletResponse
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위한 HttpServleResponse객체를 생성하여 서블릿에게 전달
- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송
클라이언트가 서버에게 요청을 보낼 때 들어오는 요청 정보들
1. 헤더(header) 정보 읽어 들이기
웹 브라우저가 요청정보에 담아서 보내는 header값을 읽어들여 브라우저 화면에 출력해 보자
HttpServeltRequest의 getHeaderNames() 메서드를 이용한다.
소스 코드
...
@WebServlet("/header")
public class HeaderServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
out.println(headerName + " : " + headerValue + " <br> ");
}
out.println("</body>");
out.println("</html>");
}
}
출력 결과
2. 파라미터 읽어 들이기
URL 주소의 파라미터 정보를 읽어 들여 브라우저 화면에 출력해 보자.
http://localhost:8080/firstweb/param?name-kim&age=5 라는 URL로 요청을 보낸다고 할 때,
?를 기준으로 뒤에 있는 것들을 파라미터라고 한다.
중간에 &은 기준점으로 이를 계속 사용함으로써 더 많은 파라미터를 사용할 수 있다.
=를 기준으로 앞에 있는 것을 이름 뒤에 있는 것을 값으로 볼 수 있다.
HttpServletRequest의 getParameter() 메서드를 이용한다.
소스 코드
...
@WebServlet("/param")
public class ParameterServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>form</title></head>");
out.println("<body>");
String name = request.getParameter("name");
String age = request.getParameter("age");
out.println("name : " + name + "<br>");
out.println("age : " +age + "<br>");
out.println("</body>");
out.println("</html>");
}
}
출력 결과
3. 그 외의 요청정보 출력
URI, URL, PATH, Remote host 등에 대한 정보를 출력해 보자.
HttpServletRequest의 getRequestURI(), getRequestURL(), getContextPath(), getRemoteAddr() 등을 이용
소스 코드
...
@WebServlet("/info")
public class InfoServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
...
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>info</title></head>");
out.println("<body>");
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
String contentPath = request.getContextPath();
String remoteAddr = request.getRemoteAddr();
out.println("uri : " + uri + "<br>");
out.println("url : " + url + "<br>");
out.println("contentPath : " + contentPath + "<br>");
out.println("remoteAddr : " + remoteAddr + "<br>");
out.println("</body>");
out.println("</html>");
}
}
출력 결과
[부스트코스 관련 강의 링크]
Request, Response 객체 이해하기 - https://www.edwith.org/boostcourse-web/lecture/16689/
'Tech > BoostCourse - WEB' 카테고리의 다른 글
[부스트코스] 자바스크립트 비교-반복-문자열 (0) | 2020.02.18 |
---|---|
[부스트코스] 자바스크립트 변수-연산자-타입 (0) | 2020.02.18 |
[부스트코스] Servlet 라이프 싸이클 (0) | 2020.02.13 |
[부스트코스] Servlet 작성 방법 (0) | 2020.02.13 |
[부스트코스] Servlet 이란? (0) | 2020.02.13 |