본문 바로가기
Servlet

[Servlet] 정보객체 HttpServletRequest, HttpServletResponse

by happyhelen 2021. 12. 19.

 

** 공유가 아닌 개인 공부에 목적을 둔 글입니다

** 설명이 불충분할 수 있으며 잘 정리된 글이 아닐 수도 있습니다

 

 

 

 

서블릿이 실행되기까지의 흐름을 그림으로 나타내면 다음과 같다

 

 

위 그림에서 알 수 있듯이 HttpServletRequest 객체는 HTTP 프로토콜의 요청정보를 Servlet 에게 전달하기 위해,

 

HttpServletResponse 객체는 응답을 웹브라우저에게 보내기 위해 사용된다

 

HttpServletRequest 에는 헤더정보, 파라미터 정보, 쿠키, URL 등의 정보를 읽어들이는 메소드,

 

또한 Body 의 Stream 을 읽어들이는 메소드가 있다

 

WAS 가 HttpServletResponse 를 생성해 Servlet 에게 전달하면

 

Servlet 은 이 객체를 이용해 contentType, 응답 코드 및 메시지를 전송한다

 

 

 

 

클라이언트 요청시의 갖고 들어온 헤더정보 눈으로 확인하기

 

package exam;
// import 생략

@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>");
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

 

doPost() 는 다시 doGet() 을 호출하고 있으므로 그냥 doGet() 에 코드를 작성해보도록 하겠다

 

 

요청시 헤더정보

 

 

 

 

 


 

 

 

 

 

이번에는 파라미터를 읽어들여서 출력하는 서블릿을 만들어보자

 

package exam;
// import 생략

@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>");
		
		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>");
	}

}

 

 

 

URL 을 살펴보면 파라미터 값을 넘겨주지 않았을 때와 넘겨주었을 때의 결과가 달라지는 것을 확인할 수 있다

 

 

 

 

 

 


 

 

 

 

HttpServletRequest 가 갖고있는 다양한 메소드를 이용해 다양한 값을 출력할 수도 있다

 

 

package exam;
// import 생략

@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>form</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("urcontentPathi : " + contentPath + "<br>");
		out.println("remoteAddr : " + remoteAddr + "<br>");
		
		out.println("</body>");
		out.println("</html>");
	}
}

 

 

 

 

 

remoteAddr : 요청한 클라이언트의 주소 ( 접속한 운영체제에 따라 다를수 있지만 현재 로컬pc 에서 접속했기 때문에

 

위와같이 나온다)