Response
1) sendRedirect() 페이지전환
2) addHeader() --- getHeader : 캐시에 저장활용
* 페이지 전환
1) forward 방식
- 받은 request를 다음 페이지에 위임하는 것
- request 객체는 요청이 끝날 때 까지 공유된다 (같은 request객체다)
- jsp:forward로 할 수도 있다.
2) redirect 방식
- 최초 신규접속과 같은 방식으로 이동된다.
- 매번 호출할 때마다 새로운 request 객체가 생성된다.
- 브라우저에 새로운 URL로 이동할 것을 지시하는 것과 같다.
jsp7_Response1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Response1</title>
</head>
<body>
<% response.sendRedirect("jsp7_Response2.jsp"); %>
</body>
</html>
jsp7_Response2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Response2</title>
</head>
<body>
<%
out.print("<h3>로그인에 성공하셨습니다. 여기는 메인 페이지입니당!</h3>");
%>
</body>
</html>
jsp8_sendredirect1.jsp --- > jsp8_sendredirect2.jsp
sendredirect()
. 서버안에서 페이지전환되는 방법 중 하나이다.
. 웹 서버가 웹 브라우저에게 다른페이지로 이동하라고 지시하는 것을 의미한다.
. 클라이언트가 요청하는 방식과 동일하므로 새로운 request객체가 생성된다.
. getParameter()로 받아야 한다.
. 주소줄에 한글이나 특정한 특수문자가 있다면, 반드시 URLEncoding해서 넘겨야한다.
jsp8_sendredirect1.jsp
<%@page import="java.net.URLEncoder" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String url = "http://127.0.0.1:8080/Ch4/jsp8_sendredirect2.jsp?name=";
String e_name = URLEncoder.encode("서대길","utf-8");
String e_addr = URLEncoder.encode("서울","utf-8");
response.sendRedirect(url+e_name+"&addr="+e_addr);
%>
</body>
</html>
jsp8_sendredirect2.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>redirect로 보낸 데이터를 읽어와서 출력</h3>
<%
String name = request.getParameter("name");
String addr = request.getParameter("addr");
out.print("이름 : "+name+", 주소 : "+addr);
%>
</body>
</html>
jsp9_sendRedirect.jsp
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
String search = "JSP프로그래밍";
String url = "http://search.naver.com/search.naver?where=nextearch&query=";
String e_search = URLEncoder.encode(search,"utf-8");
response.sendRedirect(url+e_search);
%>
</body>
</html>
* 응답(response)헤더에 정보를 설정하기
; 웹 브라우저는 응답을 받으면 브라우저 자신이 관리하는 캐시(Cache)에 응답 관련 데이터를 저장해 둘 수 있다.
; 나중에 서버에 동일한 요청을 보내서 응답을 기다리는 대신에 캐시에 있는 데이터를 이용해서 출력할 수 있다.
addHeader(String name, String value)
setHeader(String name, String value)
getHeader(String name)
jsp10.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>캐시에 응답결과 저장</h3>
<%
response.addHeader("name","서대길");
response.addHeader("age", "30");
pageContext.forward("jsp11.jsp");
%>
</body>
</html>
jsp11.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h3>여기는 응답페이지입니당</h3>
<%
String name = response.getHeader("name");
response.setHeader("age", "23");
String age = response.getHeader("age");
%>
이 름 : <%= name %><br>
나 이 : <%= age %>
</body>
</html>