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

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

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

[1] 강의

웹 프로그래밍(풀스택)

5. Servlet - BE

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

 

[2] 개념 정리

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

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

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

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

 

[3] 강의 정리
  request가 가지고 있는 좀 더 다양한 메서드를 이용해서 다양한 값을 출력해도록 하겠다. 이번에도 예제를 통해서 한번 만들어보자. 서블릿을 하나 만들겠다. 이번에도 예제를 통해서 만들어볼 거다. 서블릿을 하나 만들어 줄 거다. 이번에는 다양한 정보를 출력하니까 InfoServlet 이렇게 하나 만들어줄거다. URL mappinginfo라고 그냥 지정해보겠다. 이렇게 바꾼다. Finish 해보자. 이제 너무 많이 만들어서 많이 익숙해졌다. 이 안에서 여러분들이 얻어낼 수 있는 굉장히 많은 정보들이 존재하고 있다. 필요 없으니까 지워보고 출력해보겠다. 여기 까지 응답 똑같다. 그 다음에 여러분이 출력하고 싶은 요청 정보부터 해서 출력하고 싶은 정보가 있다면 넣어보면 된다. 그냥 현재 이번 예제에서는 이정도다. 그런데 여러분 이클립스가 굉장히 편한 도구다. 보면 대부분은 get이라는 메서드가 가져와봐 이런 부분이기 때문에 get 해보면 이렇게 굉장히 많은 메서드들이 존재하고 있는 걸 볼 수 있다. 이런 부분들이 뭔가 값들을 다 가지고 있는 부분이다. 나중에도 여기에는 없지만 여러분들이 더 다양한 정보들을 출력해보고싶다 한다면 이런 메서드들을 이용해서 테스트를 해보는 것도 좋을 거 같다. 이런 정보들을 한번 출력해서 확인을 해볼 거다. 일단은 저장을 해보고 실행을 시켜보도록 할거다.

  실행을 해보면 어떤 결과가 나올까. 일단은 화면을 조금만 키워보자. 첫 번째 uri 하고 나온다. 해당 부분은 getRequestURI()return 해 준 값이다. 도메인과 포트 이하에 있는 값을 return 하는 것을 볼 수 있을 거다. 그래서 여기서 URL이다. 요청한 URL에서 포트 번호 이하, 우리 프로젝트명. 그 다음에 URL mapping에 적어줬던 이름, 이 부분이 나오고 있다. URI, URL 이런 것들을 조금 구분해보면 좋을 거 같다. URI 정보는 이런 부분이 보이고 있다. URL 정보는 요청 주소 전체가 보이고 있는 걸 볼 수 있다. 혹시 웹 애플리케이션 생성할 때 가장 마지막 단계에 우리 contextPath 이런 거 지정했었던 거 혹시 기억날까? 그 부분이다. 우리 기본적으로 현재 프로젝트 이름이 contextPath로 지정이 된다. 이 부분을 나중에는 없앨 수 있다. 그래서 / 이렇게 할 수도 있다. 그건 뒤쪽에서 조금 더 자세히 보도록 한다. 일단 이 부분이 웹 애플리케이션과 매핑된 path라고 생각하면 될 거 같다. 그러니까 WAS 내에 웹 애플리케이션이 굉장히 여러 개 있을 수 있다. 라고 이야기를 했었다. 그때 웹 애플리케이션을 찾아가는 이름 그 이름을 우리가 프로젝트 만들 때 꼭 프로젝트 이름하고 똑같이가 아니라 거기에서 지정할 수도 있었다는 소리다. 우리는 그냥 프로젝트랑 똑같이 만들었기 때문에 프로젝트 이름이 그대로 나오기 있는 걸 볼 수 있을 거다.

  그 다음에 이제 getRemoteAddr() 메서드가 출력해주는 클라이언트의 주소 값이다. 어떤 주소에서 댓글을 달았는지 다 나온다. 근데 우리는 0:0: 이렇게 나오고 있는 걸 볼 수 있을 거다. 현재 로컬 컴퓨터에서 접속을 했기 때문에 그런다. 실제 로컬 컴퓨터에서 접속하면 여러분 운영체제에 따라서 로컬 호스트는 127.0.0.1 혹은 localhost 이런 부분이 출력이 될 수도 있다. 운영체제가 IPv6 같은 경우에는 지금 저처럼 IP가 출력이 되는 경우도 있다. 만약 원격 컴퓨터가 접속을 했었다면 원격에 있는 컴퓨터의 IP가 출력이 되겠다. 여기까지 request, response 객체를 알아보면서 클라이언트가 요청할 때 도대체 어떤 정보들을 가지고 들어오는지 여기에 대한 내용들을 예제들을 통해서 알아봤다. 꼭 이 예제, 지금 제가 제공한 예제에는 엇ㅂ다 하더라도 아까 말했던 get 하고 보면 request라는 객체가 클라이언트가 보내, 클라이언트가 요청할 때 보내준 정보들을 모두 추상화해서 가지고 있는 객채고 필요하다면 이 객체로부터 원하는 값을 얻어서 사용할 수 있겠다. 이렇게 정리해보면 좋을 거 같다.

 

[4] 코드 정리

package examples;

import java.io.IOException;
import java.io.PrintWriter;

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 InfoServlet
 */
@WebServlet("/info")
public class InfoServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public InfoServlet() {
        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>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>");
	}


}
반응형