HttpServletResponse

EUNJI LEE·2023년 5월 29일
0

Servlet/JSP

목록 보기
5/9

HttpServletResponse

브라우저에게 응답을 전송하기 위해 요청에 대한 처리 결과를 작성하려고 사용하는 객체로 javax.servlet.ServletRespons를 상속받는다. HttpServletRequest와 마찬가지로 인터페이스나 구현은 컨테이너가 알아서 설정하기 때문에 메소드만 이용하면 된다.

setCharacterEncoding(String)

응답하는 데이터의 CharacterSet을 지정해주는 메소드로 보내는 데이터를 인코딩할 타입을 지정하기 위해 사용하는 메소드이다.

setContextType(String)

응답으로 작성하는 페이지의 MIME type을 정해주는 메소드로 html, json등을 매개변수로 넣어줄 수 있다.

💡 MIME type?
Multipurpose Internet Mail Extensions의 약자로 이메일과 함께 전송할 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위해 개발되었다. 현재는 웹을 통해서 여러가지 파일을 전송하기 위해서 사용하고 있다.

요청 전송을 위해 Stream을 가져오는 메소드

getWriter() : 문자를 페이지에 전송하기 위해서 Stream을 열어서 가져오는 메소드로 문자열을 사용하는 html, css 파일등을 전송할 때 사용한다.

getOutputStream() : byte단위로 페이지에 전송하기 위해서 Stream을 열어 가져오는 메소드로 파이너리 파일을 전송할 때 사용한다.

sendRedirect(String)

클라이언트가 매개변수로 들어오는 페이지를 다시 서버에 “요청”하게 하는 메소드이다.

HttpServletResponse객체가 제공하는 sendRedirect() 메소드 이용한다. getRequestDispatcher()와 다르게 응답은 먼저 실행한다. 응답을 이미 한 후 다른 곳에 요청을 다시 보내는 방식으로 작동한다.

이 때, 요청을 다시 보냈기 때문에 요청이 변경되면서 처음 서블릿에서 받은 request 데이터를 그대로 사용할 수 없게 된다. 때문에 회원 가입, 상품 등록 같은 화면에서 클라이언트가 보낸 데이터를 DB에 저장하고 더 이상 해당 데이터를 사용할 일이 없을 때 사용한다. 만약 요청이 전환되지 않으면 해당 데이터가 그대로 유지돼서 새로 고침 할 때마다 게시글이 다시 작성되는 상황이 발생할 수 있다.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		System.out.println("sendredirectTestServelt 실행!");
		response.sendRedirect("dispatcherView.do"); //슬래쉬를 빼고 상대경로로 시작. 해당 페이지로 전환된다.
	}

sendRedirect를 실행하며서 요청에 새로운 데이터를 보내지 않으면 request에는 null값이 들어있다. 아래 같은 경우 sendRedirect() 메소드도 실행 됐고 DispatcherViewServlet도 정상적으로 실행했지만 request에 접근해도 아무런 데이터가 없기 때문에 null값을 형변환하려고 하면서 NumberFormatException을 발생하게 된다.

객체가 제공하는 정보를 가져오는 메소드

getContextPath() : Context Path를 가져올 수 있는 메소드.

💡 Context Path?
서블릿을 구분하기 위해 사용되는 주소를 ContextPath라고 한다. 프로젝트를 생성하면 자동으로 server.xml에 추가되며 서버 실행 시 자동으로 잡히는 경로로 보통 프로젝트 명을 그대로 사용한다.
localhost:9090 까지를 WAS 주소라고 보면 /02_servletdata/는 ContextPath라고 보면 된다.

getHeader(String) : HttpRequest의 header 정보를 가져올 수 있다. 매개변수로 찾을 데이터의 key값을 입력해서 페이지의 검사 화면에서 확인 가능하던 header정보를 찾을 수 있다.

getRequestURI()/getRequestURL() : 요청한 주소에 대한 정보를 가져올 수 있는 메소드.

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//HttpServletRequest객체가 제공하는 정보들
		//1.ContextRoot 가져오기
		//경로가 달라져도 하나씩 수정하지 않고 변경된 값으로 가져올 수 있다. 좀더 추상적으로 작성 가능
		String contextPath=request.getContextPath();
		System.out.println(contextPath);
		
		//2.HttpRequest의 header 정보 가져오기
        //User-Agent : 사용자의 브라우저 및 운영체제 정보를 담고있다.
		String userAgent=request.getHeader("User-Agent");
		System.out.println(userAgent);
		//이전 페이지 정보
		//파싱해서 필요한 뒤에 주소만 가져가 쓴다. contextroot를 이용해서 잘라낸다.
		String prevPage=request.getHeader("Referer"); 
		System.out.println(prevPage);
		
		//3.요청한 주소에 대한 정보를 가져오기
		String uri=request.getRequestURI();
		System.out.println(uri);
		StringBuffer url=request.getRequestURL();
		System.out.println(url);
		
		System.out.println(request.getCookies());
	}

profile
천천히 기록해보는 비비로그

0개의 댓글