요청과 응답
- WAS는 웹브라우저로부터 Servlet 요청을 받으면 HttpServletRequest, HttpServletResponse 객체를 생성한다.
- 생성된 두 객체를 서블릿에게 전달한다.
HttpServletRequest
- http 프로토콜의 request 정보를 서블릿에게 절달하기 위한 목적으로 사용한다.
- 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 클라이언트로부터 읽어들이는 메소드를 가지고 있다.
- Body의 Stream을 읽어 들이는 메소드를 가지고 있다.
HttpServletResponse
- WAS는 어떤 클라이언트가 요청을 보냈는지 알고 있고, 해당 클라이언트에게 응답을 보내기 위해 해당 객체를 생성하여 서블릿에게 전달한다.
- 서블릿은 해당 객체를 이용하여 content type, 응답코드, 응답 메세지 등을 전송한다.
헤더 정보 읽어 들이기
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String headerName = headerNames.nextElement();
String headerValue = request.getHeader(headerName);
out.println(headerName + " : " + headerValue + " <br> ");
}
- 요청이 들어오면 모든 정보들은 WAS가 HttpServletRequest라는 객체를 만들어서 request 객체 안에 담아둔다. 즉, request로부터 어떤 정보가 들어왔는지 확인할 수 있다.
- request의 메서드 중 getHeaderNames()라는 메서드로 모든 헤더 이름을 enumeration 객체로 반환한다.
- while문을 사용하면 헤더의 이름을 알 수 있고, request.getHeader(헤더의 이름)을 사용하면 헤더의 값 정보를 알아낼 수 있다.
파라미터 읽어 들이기
http://localhost:8080/firstweb/param?name=kim&age=5
해당 URL에서 ? 뒤에 나오는 name은 파라미터 이름, kim은 파라미터 값이다. &로 여러개의 파라미터를 서버로 보낼 수 있다.
String name = request.getParameter("name");
String age = request.getParameter("age");
- getParameter(파라미터이름)메서드를 사용하면 ? 뒤에 기입한 순서대로 파라미터값을 받을 수 있다.
- 이런 파라미터는 반드시 URL에 직접 기입해야만 넘어오는 것이 아니고, HTML form의 자식태그 input이라는 태그를 사용하면 똑같은 메커니즘으로 서버로 파라미터 값을 넘길 수 있다.
그외의 요청정보 출력
String uri = request.getRequestURI();
StringBuffer url = request.getRequestURL();
String contentPath = request.getContextPath();
String remoteAddr = request.getRemoteAddr();
- request는 다양한 get메서드를 가지고있다.
- URI는 도메인과 포트번호(http://localhost:8080) 이하의 값을 말한다.(/firstweb/info)
- url는 요청 주소 전체가 해당된다.
- ContextPath는 웹 애플리케이션과 매핑된 path라고 보면된다.
- getRemoteAddr는 클라이언트의 주소를 리턴한다.