response.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>페이지 이동 연습</title>
</head>
<body>
<h2>forward, redirect 연습</h2>
<form method="post" action="<%=request.getContextPath() %>/responseTest01.do">
forward 이동 : <input type="text" name="username">
<input type = "submit" value="확인">
</form>
<hr>
<form method="post" action="<%=request.getContextPath()%>/responseTest02.do">
response.sendRedirect : <input type="text" name="username">
<input type = "submit" value="확인">
</form>
</body>
</html>
ResponseTest01
package kr.or.ddit.basic.reqreusp;
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 ResponseTest01
*/
@WebServlet("/responseTest01.do")
public class ResponseTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* - forward
* ==> 특정 서블릿에 대한 요청을 다른 서블릿이나 JSP로 넘겨준다.
* (파라미터도 같이 넘겨 줄 수 있다.)
* ==> URL주소는 처음 요청할 때의 값이 바뀌지 않으며,
* 서버 내부에서만 접근이 가능하다.
* (Request객체와 Response객체를 공유해서 사용한다.)
*/
//이동되는 페이지로 값을 넘기려면 Request객체의 setAttribute()
//메서드로 데이터를 셋팅하여 보내고,
//받는 쪽에서는 Request객체의 getAttribute()메서드로 데이터를 읽어온다.
//형식) request.setAttribute("키값", 데이터); //데이터를 세팅할때
//형식) request.getAttribute("키값");
request.setAttribute("tel", "010-1234-5678");
//형식) request.getRequestDispatcher("이동할 URL주소");
// '이동할 URL주소'는 Context Path이후의 경로를 기술한다.
// '/subvletTest/myurl.do' ==> '/myurl.do'
RequestDispatcher rd =
request.getRequestDispatcher("/responseForwardTest.do");
rd.forward(request, response);
}
/**
* @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);
}
}
ResponseTest02
package kr.or.ddit.basic.reqreusp;
import java.io.IOException;
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 ResponseTest02
*/
@WebServlet("/responseTest02.do")
public class ResponseTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
/*
* - redirect
* 다른 페이지로 제어가 넘어가도록 한다.
* (이 때 직접 파라미터를 넘길 수 없다.)
* 응답시 브라우저에게 '이동할URL'을 전송하여 브라우저가
* 해당 URL로 이동하는 방식이다.
* (이때는 무조건 GET방식으로만 이동한다.)
* redirect 방식은 Request객체를 유지하지 못한다.
* (이유는 브라우저에게 새로운 요청을 하기 때문에...)
*
* 명령 : response.sendRedirect("이동할URL");
* ==> '이동할URL'은 전체 URL주소를 기술한다.
*
*/
/*
//request객체는 공유가 불가능 하다는 것을 보여주는 예제(null갑ㅅ만나옴)
request.setAttribute("tel", "010-9999-8888");
response.sendRedirect(request.getContextPath()+"/responseRedirectTest.do");
*/
//데이터를 보내려명 GET방식으로 보낼 수 있다.
String userName = request.getParameter("username");
response.sendRedirect(request.getContextPath()
+"/responseRedirectTest.do?username="
+userName+"&tel=010-9999-8888");
}
/**
* @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);
}
}