갈림길 이정표

[JSP] Redirect / Forward 방식 본문

Programming Language/Servlet & JSP

[JSP] Redirect / Forward 방식

이몽뇽 2020. 8. 26. 10:25

[jsp1call.html]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Redirect / Forward test
<br>
<form action="irum.go" method="post">
자료 입력: <input type="text" name="data" value="tom">
<input type="submit">
</form>

</body>
</html>
[Jsp1Servlet.java]

package kr.co.pack;

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("/irum.go")
public class Jsp1Servlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// get,post 둘다 받겠다는 뜻
		request.setCharacterEncoding("utf-8");

		String data = request.getParameter("data");
		
		/*넘어온 자료로 이런 저런 작업을 하다가....*/

		//현재 Servlet 파일의 자료를 특정 jsp 파일에게 자바의 자료를 전달하는 방법...   (Servlet이 jsp를 부를때)
		//파일 호출 방법1 : *redirect 방식* ← client를 통해 서버의 파일을 호출 (default방식)
		/*response.sendRedirect("jsp1called.jsp?data=" + data);*/	//넘길 자료가 더 있으면 & 사용
		//이렇게 넘기면 단점: String 이외 객체(ex. ArrayList, Collection, car객체, animal객체 등)를 넘길 수 없다.
		
		//해결점: 서버에서 서버를 호출하도록 하면 됨 (Forward 방식)
		//파일 호출 방법2: *Forward 방식* ← 서버에서 직접 서버의 파일을 호출 (마치 html이 jsp를 부르는 것 처럼)
		request.setAttribute("test", data);//현재 파일에서 유효한 객체(컨테이너 기능) | setAttribute: test라는 key의 속성을 data value로 받기
		/*session, application, request 모두 key-value 형식으로 argument받음[컨테이너 기능]*/
		/*※session은 각각의 client에서 사용가능한 모든 파일이 public | request는 private*/
		
		/*
		 * RequestDispatcher dispatcher =
		 * request.getRequestDispatcher("jsp1called.jsp"); dispatcher.forward(request, response);
		 * //jsp파일은 service메소드를 Override 한것임
		 */		//dispatcher.forward를 통해 request 값을 response 로 전달
		//※ 클라이언트 통해서 전달되면 다사라짐
		
		request.getRequestDispatcher("jsp1called.jsp").forward(request, response);	//두 줄을 한줄로 통합시킴
		
		
	}

}
[jsp1called.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1called</title>
</head>
<body>
서블릿에 의해 호출된 파일
<br>

<%
// redirect 방식 
request.setCharacterEncoding("utf-8");
String data = request.getParameter("data");
//*out.println("자료는 " + data);	/*http://localhost/web_pro4/jsp1called?data=tom*/
/* (지금은 String 객체 넘기는 거라 상관없지만 Colleciton 등 String 이외 객체면 호출 불가)*/

out.println("<br>");

// forward 방식
String data2 = (String)request.getAttribute("test");	//getAttribute: key를 부르는 것!이므로 data가 아닌 test!
out.println("자료는 " + data2);	/* http://localhost/web_pro4/irum.go (주소가 다름!)*/
%>
</body>
</html>
Comments