본문 바로가기
강의/웹 프로그래밍(풀스택)

부스트코스 웹 프로그래밍(풀스택) - 1. 웹 프로그래밍 기초 - 5-4-2 강의 정리

by 리드민 2022. 4. 16.
반응형

[1] 강의

웹 프로그래밍(풀스택)

5. Servlet - BE

4) Request, Response 객체 이해하기-2

 

[2] 개념 정리

HttpServletRequest : Http프로토콜의 request 정보를 서블릿에게 전달하기 위한 목적으로 사용

Header정보, Parameter, Cookie, URI, URL 등의 정보를 읽어들이는 메소드를 가진 클래스

BodyStream을 읽어들이는 메소드를 가지고 있음

HttpServletResponse : HTTP 응답 메시지 생성, HTTP 응답코드 지정, 헤더 생성, 바디 생성 등의 기능이 있다.

 

[3] 강의 정리

  클라이언트가 서버에게 요청을 보낼 때는 굉장히 많은 정보들을 함께 가지고 요청을 하게 된다. 이때 들어오는 요청 정보들이 어떤 것이 있는지 실습을 통해서 알아보려고 한다. 첫 번째는 요청할 때 가지고 들어오는 헤더 정보들이 존재한다. 웹 브라우저가 전송한 모든 헤더의 이름과 값들을 출력한는 HeaderServlet이라는 걸 하나 만들어서 실습을 하려고 한다. 이클립스를 하나 열어두고. 작성을 해보자. 서블릿을 하나 만들어주는데 HeaderServlet하고 하나 만들어주면 될 거 같죠? 우리 요청할 때 이름은 그냥 간단하게 header 이렇게 해보자. 이렇게 하면 서블릿이 하나 요청이 될 거다. 메서드 중에 어떤 메서드를 오버라이드 할까? 지금 이런 부분이다. 두 개 다 크게 놔도 상관은 없는 게 지금 보니까 doPost()는 뭐하고 있나? 그냥 doGet()을 호출하도록 하고 있다. GET으로 요청이 들어오나 POST로 요청이 들어오나 GET에다가 구현하면 똑같이 구현된 내용들이 들어온다. 현재 해보고 싶은 내용은 뭐였냐면 요청이 들어올 때 들고 들어온 헤더 정보가 뭐가 있을까? 이걸 한번 출력 해보려고 하는 거다. 예제를 잠깐만 살펴보면 우리 항상 응답 보내기 전에 ContentType은 뭐예요 알려주여 된다 그랬다. 그 다음에 요청 객체로부터 응답을 보낼 통로를 알아야한다. 클라이언트와의 연결통로를 하나 가져오는 거고. 그 다음에는 응답으로 보내줄 HTML 태그들이 들어있는 것을 볼 수 있다. 내가 알아보고 싶은 건 헤더에 대한 정보이다. 요청이 들어왔을 때 모든 정보들은 WASHttpServletRequest라는 객체를 만들어서 이 객체 안에다가 다 담아둬라고 설명했던거 기억하시나? 그 담아둔 객체를 우리는 doGet() 메서드에 지금 파라미터로 가지고 들어왔다. 그럼 request한테 물어보면 다 알아낼 수 있겠다. request가 갖고 있는 메서드 중에 getHeaderNames()라는 메서드가 있다. 이 메서드는 모든 헤더 이름을 문자열 Enumeration 객체로 반환해준다. Enumeration 객체로 반환받았으니까 그 부분을 while 문을 통해서 알아보면 헤더의 name을 알아낼 수 있을거다. name을 알고 있으면 또 request가 갖고 있는 getHeader()라는 메서드를 통해서 헤더의 값 정보를 알아낼 수 있을 거다. 이거를 뭐하고 싶은 거나면 브라우저에 출력하게 하고 싶다. 응답 결과에 담아줘야 될 거니까 out.println() 안에다가 넣어주면 될 거 같다. 헤더의 이름과 헤더의 값을 콜론 값을 기준으로 출력을 해준다. 줄바꿈 하기 위해서는 반드시 br를 써줘야 한다. 이렇게 하고서 결과를 한번 실행 시켜보겠다. 실행을 시켜보면 어떤 정보들이 나올까? 출력된 결과를 살펴보면 이렇게 헤더의 이름 그리고 값 이런식으로 나오고 있는 것을 볼 수 있다. host는 누구고 이런 헤더가 가지고 있는 정보들이 다 들어있다. 여러분들이 헤더의 이름을 알고 있었다면 그냥 바로 getHeader()라는 메서드를 이용해가지고 결괏값을 알아낼 수 있겠죠. 이렇게 클라이언트가 요청했을 때 가지고 들어온 헤더의 정보를 알아내는 방법을 실습을 통해서 알아보았다.

 

 

[4] 코드 정리

package examples;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class HeaderServlet
 */
@WebServlet("/header")
public class HeaderServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public HeaderServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	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>");
	}

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

}
반응형