request 기본 객체와는 정반대의 기능을 수행한다.
request 기본 객체가 웹 브라우저가 전송한 요청 정보를 담고 있는 반면에
response 기본 객체는 웹브라우저에 보내는 응답 정보를 담는다.
response 객체의 기능
- 헤더 정보 입력
- 리다이렉트 하기
웹 브라우저에 헤더 정보 전송하기
add로 시작하는 메소드는 기존의 헤더에 새로운 값을 추가할 때 사용되며, set으로 시작하는 메소드는 새로 헤더의 값을 지정할 때 사용됨
헤더 정보에는 주로 웹 서버에 대한 정보를 담는 경우가 많으며, JSP 프로그래밍 자체에서는 많이 사용되지 않는다.
헤더 정보는 부가적인 정보를 지정하는 경우에 많이 사용됨.
리다이렉트를 이용해서 페이지 이동하기
위에서 보듯이 리다이렉트 기능은 웹 서버 측에서 웹 브라우저에게 어떤 페이지로 이동하라고 지정하는것이다.
그러므로 리다이렉트를 지시한 JSP페이지가 있을 경우 웹 브라우저는 실질적으로 요청을 두번 하게 된다.(이것은 중요한사실이다.)
리다이렉트 함수 : response.sendRedirect(String location)
인코딩 함수 Tip!!!
앞에서 웹 서버에 전송되는 파라미터의 값은 알맞게 인코딩된다고 했었다. 즉, 알파벳과 숫자 그리고
몇몇 기호를 제외한 나머지 글자들을 URL에 포함시키기 위해서는 인코딩 작업을 해주어야 한다.
마찬가지로 response.sendRedirect()메소드를 사용할 때에도 마찬가지로 인코딩을 알맡게 수행해 주어야 한다.
예를들어 이름이 name인 파라미터의 값을 '자바'로 지정해서 리다이렉트하고 싶다고 해보자.
이 경우도 '자바'를 인코딩한 형태로 URL을 입력해야 한다.
이런 작업을 손쉽게 해주는 메소드를 자바의 java.net.URLEncoder 클래스는 제공한다.
URLEncode.encode() 메소드를 사용하여 파라미터값으로 사용될 문자열을 인코딩 할 수 있다.
responseA.jsp
pageEncoding="UTF-8"%>
<!-- 리다이렉트를 설정할경우 필요가없다. 용량만 커짐
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>responseA입니다</title>
</head>
<body>
현재 페이지는 responseA.jsp입니다. 화면에 보여지지 않습니다.
</body>
</html>
-->
<%
response.sendRedirect("/chap03/responseB.jsp");
%>
responseB.jsp
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>responseB입니다</title>
</head>
<body>
현재 페이지는 responseB.jsp입니다.
</body>
</html>
chap03/login.jsp
<%
String id =request.getParameter("memberId"); //meberId 파라미터의 값이 "era13"인지 비교한다.
if(id !=null && id.equals("era13")){response.sendRedirect("/chap03/index.jsp"); // 인 경우 "/"페이지로 이동
}else{ // 아닌경우 HTML코드를 출력한다.
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login 실패</title>
</head>
<body>
아이디가 era13이 아닙니다.
</body>
</html>
<%
}
%>
chap03/index.jsp
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Login 성공</title>
</head>
<body>
아이디가 era13 입니다.
</body>
</html>
http://localhost:8080/chap03/index.jsp
http://localhost:8080/chap03/index.jsp?memberId=era13
이름이 name인 파라미터의 값을 '자바'로 지정해서 리다이렉트하고 싶다고 해보자. 이경우 다음과 같이 '자바'를 인코딩 한 형태로 URL을 입력해야한다.
chap03/redirectEncodingTest.jsp
pageEncoding="UTF-8"%>
<%@ page import ="java.net.URLEncoder" %>
<%
String value ="자바";
String encodedValue =URLEncoder.encode(value, "UTF-8");
response.sendRedirect("/chap03/main.jsp?name="+encodedValue);
%>
chap03/main.jsp
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>메인</title>
</head>
<body>
<%
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
%>
<%= name %>
</body>
</html>
댓글