2020.11.27 고급자바 Servlet redirect / forward

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);
}

}






댓글