학습목표
HttpServletResponse 와 기초 함수에 대해 설명할 수 있다.
Redirect 방식에 대해 설명할 수 있다.
RequestDispatcher 를 이용한 include, forward 방식에 대해 설명할 수 있다.
HttpServletResponse
HTTP 클라이언트의 요청에 의한 다양한 결과를 전송하기 위해 사용되는 클래스
service(), doGet(), doPost() 등 함수 호출 시 매개변수로 전달
HttpServletResponse의 주요 메서드
setContentType(String type) : 응답으로 전송되는 문서의 MIME Type 설정
addCookie(Cookie cookie) : response 에 Cookie 객체 저장
sendRedirect(java.lang.String location) : 클라이언트로 하여금 지정된 URL 의 문서를 요청하게 함
setHeader(String name, String value) : 지정된 name/value 를 응답 Header 에 추가 설정
getOutputStream() : 클라이언트에 결과를 전송하기 위한 OutputStream 객체 획득
getWriter() : 클라이언트에 결과를 전송하기 위한 PrintWriter 객체 획득
serContentType()
응답으로 전송되는 문서의 MIME Type(마임 타입) 설정
애플리케이션에서 브라우저에 응답할 때 전송하는 데이터의 타입을 지정
response.setContentType("text/html;charset=EUC-KR");
PrintWriter out = response.getWriter();
out.println("<h1>HelloWorld</h1>, <br/>");
out.println("<h1>안녕하세요</h1>, <br/>");
한글이 깨질 수 잇기 때문에 MIME 타입과 Charset encodig 지정 필요
--> "지금 응답 데이터는 html 데이터이다" 라고 알려주는 것
setHeader()
지정된 name/value 를 응답 Header 에 추가 (자주하진 않지만 필요에 의해 가능)
response.setHeader("cache-control", "no-cache");
response.setHeader("expires", "0");
getOutputStream()
클라이언트에 결과를 전송하기 위한 OutputStream 객체 획득
최종적으로 동적 이미지를 response 하는 경우
★ Redirect 의 개념
클라이언트의 요청에 대한 응답이며 브라우저에서 다시 다른 URL 로 요청하게 하는 응답
클라이언트 요청을 다른 URL 로 돌리기 위해 사용
sendRedirect()
HttpServletResponse 의 sendRedirect() 에 의해 응답
sendRedirect() 의 매개변수에 다시 요청해야 하는 URL 지정
PrintWriter out = response.getWriter();
out.println("<h1>I am One Servlet Page</h1>");
response.sendRedirect("TwoServlet");
RequestDispatcher
클라이언트의 요청을 다른 Servlet으로 Forwarding 시키거나, 다른 Servlet의 수행결과를 포함시키기 위해 사용되는 객체
- Redirect : 클라이언트의 브라우저에 명령
- RequestDispatcher : 서버사이드에서 자동으로 실행
RequestDispatcher 객체 획득
- ServletContext의 getRequestDispatcher() 메서드를 이용해 획득
- ServletRequest의 getRequestDispatch() 메서드를 이용해 획득
RequestDispatcher rd = request.getRequestDispatcher("TwoServlet");
//or
RequestDispatcher rd = getServletContext().getRequestDispatcher("/TwoServlet");
forward
RequestDispatcher의 forward() 함수를 이용해 요청을 다른 Servlet 혹은 JSP로 보낼 수 있음
클라이언트에 응답은 forward된 Servlet에서 하게 됨
자기가 받은 요청을 다른 곳에 보낼 수 있으나 되돌아오진 않음(요청은 A, 응답은 B)
Forward 시킨 Servlet과 forward가 된 Servlet이 Request, Response 객체 공유
처음 요청 받은 Servlet에서 forward하기 전에 Response에 출력한 내용은 clear 됨
include
RequestDispatch의 include() 함수를 이용해 요청을 다른 Servlet 혹은 JSP로 보낼 수 있음
include에 의해 실행된 Servlet의 실행이 끝나면 다시 include 시킨 Servlet 부분이 실행 (포함시킨다 - 돌아온다)
include시킨 Servlet과 forward가 된 Servlet이 Request, Response 객체 공유
처음 요청 받은 Servlet에서 include 하기 전에 Response에 출력한 내용은 유지
실습
ResponseTest.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html;charset=EUC-KR");
response.setHeader("cache-control", "no-cache");
response.setHeader("expires", "0");
PrintWriter out = response.getWriter();
out.println("<h1>HelloWorld</h1><br/>");
out.println("<h1>안녕하세요..</h1>");
}
Redirect 실습
OneServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1> I am One Servlet</h1>");
// One Servlet이 실행 되면서 Two Servlet을 실행시키는 방법
// 1. Redirect
response.sendRedirect("TwoServlet");
}
TwoServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1> I am Two Servlet</h1>");
}
OneServlet을 요청했지만 sendRedirect로 인해 TwoServlet을 요청 + TwoServlet 결과값 출력
forward 실습
OneServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1> I am One Servlet</h1>");
// One Servlet이 실행 되면서 Two Servlet을 실행시키는 방법
// 2. forward
RequestDispatcher rd = request.getRequestDispatcher("TwoServlet");
rd.forward(request, response);
redirect와 forward의 차이점 : URL (여전히 OneServlet = 클라이언트가 TwoServlet을 요청한건 아니다.)
OneServlet 요청에 의해 TwoServlet 결과값 출력
include 실습
OneServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
out.println("<h1> I am One Servlet</h1>");
// One Servlet이 실행 되면서 Two Servlet을 실행시키는 방법
// 3. include
RequestDispatcher rd = request.getRequestDispatcher("TwoServlet");
rd.include(request, response);
}
forward만 include로 변경
OneServlet 요청에 의해 OneServlet + TwoServlet 결과값 출력
'온라인 강좌 > JSP & Servlet 활용' 카테고리의 다른 글
6차시 Servlet 설정 (0) | 2023.06.29 |
---|---|
5차시 웹 Query 문자열 (0) | 2023.06.29 |
3차시 Request 분석 (0) | 2023.06.29 |
2차시 Servlet (0) | 2023.06.28 |
1차시 웹 애플리케이션의 이해 (0) | 2023.06.28 |