HttpServletRequest, HttpServletResponse 객체란

Minkyeong Kim·2021년 10월 19일
1

[boostcourse] Web-Backend

목록 보기
10/55


웹브라우저가 WAS에게 Servlet request
-> WAS는 HttpServletRequest 객체를 생성하여 저장
응답을 보낼 때 사용하기 위해 HttpServletResponse 객체 생성
-> Servlet에게 두 객체 전달
-> doGet, doPost, Service 등과 같은 메서드에 파라미터로 전달되어 사용됨

HttpServletRequest

  • http프로토콜의 request정보를 서블릿에게 전달하기 위해 사용
  • 헤더정보, 파라미터, 쿠키, URI, URL 등의 정보를 읽어 들이는 메소드 포함
  • Body의 Stream을 읽어 들이는 메소드 포함

HttpServletResponse

  • 요청을 보낸 클라이언트에게 응답을 보내기 위해 WAS에서 생성되어 서블릿에게 전달됨
  • 서블릿은 이 객체를 이용하여 content type, 응답코드, 응답 메시지등을 전송

헤더 정보 브라우저에 띄워보기

소스코드

@WebServlet("/Header")
public class HeaderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    public HeaderServlet() {
        super();
    }
	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>");
	}

}

결과

파라미터 읽어들이기

parameter: URL에서 '?' 기준으로 뒤에 있는 것들, '&'기호로 파라미터들을 구분

http://localhost:8080/firstweb/param?name=kim&age=5 에서 name과 age는 파라미터 이름, kim과 5는 파라미터 값임

소스코드

@WebServlet("/Param")
public class ParameterServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    public ParameterServlet() {
        super();
        // TODO Auto-generated constructor stub
    }
	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>");
		
		//parameter를 가져오는 것은 form태그 안에서 입력받은 input값과 유사하게 사용할 수 있다
		String name = request.getParameter("name"); //getParameter: String으로 파라미터 값이 반환됨
		String age = request.getParameter("age");
		
		out.println("name: "+name+"<br>");
		out.println("age: "+age+"<br>");
		out.println("</body>");
		out.println("</html>");
	}

}

결과

클라이언트의 요청시 보내지는 정보 get으로 받아 출력해보기

@WebServlet("/Info")
public class InfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public InfoServlet() {
        super();
    }

	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 remote = request.getRemoteAddr();
		
		out.println("uri: "+uri+"<br>");
		out.println("url: "+url+"<br>");
		out.println("contentPath: "+contentPath+"<br>");
		out.println("remoteAddr: "+remote+"<br>");
	}

결과

uri: 도메인과 포트 이하의 값들
url: 요청 주소 전체
contextPath: 웹 어플리케이션과 매핑된 path, 웹 어플리케이션이 여러개 있을 때 웹 어플리케이션을 찾아가는 이름, 제거할 수도 있음
remoteAddr: 클라이언트의 주소 값(IP)

0개의 댓글