jsp 파일
responseTest.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Response 객체 - forward , sendRedirect 연습</title>
</head>
<body>
<h2>forward, sendRedirect 연습</h2>
<hr>
<form method="post" action="/servletTest/responseTest012.do">
forward 로 처리하기 : <input type="text" name="username">
<input type="submit" value="확인">
</form>
<hr>
<form method="post" action="/servletTest/responseTest02.do">
response.sendRedirect로 처리하기 :
<input type="text" name="username">
<input type="submit" value="확인">
</form>
</body>
</html>
/////////////////////////////////////////////////////////////////////////////////////////////////////////
-----------------------------------------------------------------------------------------------------
responseTest01
/*
forward
특정 서블릿에 대한 요청을 다른 서블릿이나 jsp로 넘겨준다
(이때 파라미터로 넘겨 줄 수 있다. )
다른 서블릿이나 jsp 로 제어가 넘어갈 때 url 주소는 변하지 않는다.
그래서 클라이언트에게 페이지 주소를 숨길 때 사용할 수 있으며 ( 중간페이지)
redirect 보다 성느이 좋다
(웹 어플리케이션 내부에서만 접근이 가능하다 )
이동되는 페이지로 원하는 '데이터'를 넘기려면 request 객체의 serAttribute() 메서드를 이용하여 데이터를 셋팅하고 받는 쪽에서는 request 객체의 getAttribute() 메서드로 읽어온다.
*/
/*
forwading 작업 순서
1. 전달할 데이터가 있으면 setAttribute () 메서드로 셋팅한다.
rquest.setAttribute("tel", "010-1234-5678");
2. RequestDispacher 객체를 생성한다.
==> 이때 이동할 페이지를 지정한다.
RequestDispatcher rd = request.getRequestDispatcher("/requestForwardTest.do");
//서블릿에서 다른 서블릿으로 이동 가능하고, 서블릿에서 jsp 로 이동도 가능하다.
3. RequestDispatcher 객체의 forward() 메서드를 호출한다.
이때 HttpServletReques 객체와 HttpServletResponse 객체를 매개값으로 넘겨준다.
rd.forward(request, response);
*/
package kr.or.ddit.reqres;
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;
@WebServlet("/responseTest012.do")
public class ResponseTest01 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//전달할 데이터를 setAttribute() 메서드로 셋팅한다.
request.setAttribute("tel" , "010-2345-2342");
//RequestDispatcher객체를 생성한다. ( 주소 설정 )
RequestDispatcher rd =
request.getRequestDispatcher("/requestForwardTest.do");
//forward 값 으로 넘겨줌
rd.forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
-----------------------------------------------------------------------------------------------------
RequestFowardTest
package kr.or.ddit.reqres;
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;
@WebServlet("/requestForwardTest.do")
public class RequestFowardTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("utf-8");
//forward 로 넘어올때는 넘겨준 페이지의 request 객체와 response 객체
// 공유해서 사용할 수 있다.
//요청할 때 보내온 데이터 가져오기
String serName = request.getParameter("username");
//setAttribute() 로 설정한 데이터 가져오기
String tel = (String)request.getAttribute("tel");
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>forward 연습 </title></head>");
out.println("<body>");
out.println("<h2>forward 결과 </h2>");
out.println("이름(form데이터 : " + userName + "<br>");
out.println("전화번호 : " + tel + "<br>");
out.println("</body>");
out.println("<html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
-----------------------------------------------------------------------------------------------------
ResponseTest02
/*
redirect
-다른 페이지로 넘어가도록 한다. ( 직접 파라미터를 넘길 수 없다 )
-redirect 명령은 넘어갈 URL 주소를 클라이언트에게 전달하고, 클라이언트 ( 웹 브라우저) 가
넘어갈 url 주소로 새로운 요청을 하고 그에 따른 응답을 하는 과정으로 처리된다.
-URL 주소로 넘어가기 때문에 주소의 길이에 제한이 있다.
-redirect 명령은 HttpServletResponse 객체의 sendRedirect() 메서드이다.
-이 메서드에 이동할 페이지의 URL 주소를 넣어서 호출한다.
-responseRedirectTest 에 보내려면 기본적인 방법으로 할 수 없다.
( 기본방식 : request.setAttribute("tel", "010-2343-3423");
response.sendRedirect("/servletTest/responseRedirectTest.do"); )
String userName = request.getParameter("username");
-response.sendRedirect("/servletTest/responseRedirectTest.do?username=" + userName + "&tel=010-7777-8888");
*/
package kr.or.ddit.reqres;
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;
@WebServlet("/responseTest02.do")
public class ResponseTest02 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String userName = request.getParameter("username");
response.sednRedirect("/servletTest/responseRedirectTest.do?username=" + userName + "&tel=010-7777-3333");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
-----------------------------------------------------------------------------------------------------
package kr.or.ddit.reqres;
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;
@WebServlet("/responseRedirectTest.do")
public class ResponseRedirectTest extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
PrintWriter out = response.getWriter();
request.setCharacterEncoding("utf-8");
//null 로 나온다.
String userName = request.getParameter("username");
//String tel = (String) request.getAttribute('tel');
String tel = (String) request.getParameter("tel");
out.println("<html><head><meta charset='utf-8'>");
out.println("<title>forward 연습 </title></head>");
out.println("<body>");
out.println("<h2>forward 결과 </h2>");
out.println("이름(form데이터) : " + userName + "<br>");
out.println("전화번호 : " + tel + "<br>");
out.println("</body>");
out.println("<html>");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
}
}
댓글
댓글 쓰기