request 내장 객체가 클라이언트의 요청 정보를 저장했다면
response는 그와 반대로 요청에 대한 응답을 웹 브라우저로 보내준다.
주요 기능으로는 페이지 이동과 응답 헤더 추가가 있다.
1. 페이지 이동 sendRedirect()
JSP 뿐만 아니라 HTML, 자바스크립트에도 페이지 이동을 위한 태그 또는 객체가 있다.
예를 들면 HTML에는 <a> 태그가, 자바스크립트에는 location 객체를 말한다.
JSP에서는 response 내장 객체의 sendRedirect()를 사용한다.
페이지 이동을 알아보기 위해 필요한 준비물은 3가지다.
[예제 (1)]
- 로그인 화면: 아이디와 비밀번호를 입력할 ResponseMain.jsp
- 로그인 처리: 로그인을 수행할 ResponseLogin.jsp (수업 때는 LoginAction.jsp라는 이름을 사용했다.)
- 환영 화면: 성공적으로 마쳤을 때 나타내 줄 ResponseWelcome.jsp
<!-- 페이지 이동: ResponseMain.jsp -->
<h2>로그인</h2>
<%
//로그인 실패 시 띄울 변수
String loginErr = request.getParameter("loginErr");
if (loginErr != null) out.print("로그인 실패");
%>
<form action="./ResponseLogin.jsp" method="post">
아이디: <input type="text" name="id"><br/>
비밀번호: <input type="text" name="pw"><br/>
<input type="submit" value="로그인">
</form>
<!-- 페이지 이동: ResponseLogin.jsp -->
<%
//파라미터 값 받기
String id = request.getParameter("id");
String pw = request.getParameter("pw");
//만약 아이디가 yang이고 비밀번호가 1234면 welcome 페이지로 가라
if (id.equalsIgnoreCase("yang") && pw.equalsIgnoreCase("1234")) {
response.sendRedirect("ResponseWelcome.jsp");
} else {
//그게 아니면 ResponseMain.jsp의 loginErr에 1이라는 값을 줘라.
//loginErr에 값이 담기면 "로그인 실패"가 뜰 것이다.
request.getRequestDispatcher("ResponseMain.jsp?loginErr=1")
.forward(request, response);
}
%>
<!-- 페이지 이동: ResponseWelcome.jsp -->
<h2>로그인에 성공하였습니다.</h2>
[실험 1.]
아이디에 yang, 비밀번호에 1234 넣고 로그인 버튼 클릭
[실험 2]
아이디 yang11, 비밀번호 1234 넣고 실행시켜 보기
ResponseMain.jsp의 화면이지만 주소는 ResponseLogin.jsp인 것을 볼 수 있다.
forward는 실행의 흐름만 특정 페이지로 넘겨주는 역할을 한다.
2. HTTP 헤더 추가
[예제 (2)]
준비물: HTTP 헤더에 대한 개념
response 내장 객체는 응답 헤더에 정보를 추가하는 기능을 제공한다.
정보 추가용 메소드에는 add와 set 계열이 있다.
add계열은 헤더값을 새로 추가할 때 사용되고, set계열은 기존 헤더를 수정할 때 사용된다.
일단 예제코드와 부가 설명을 통해 뭐가 뭔지 알아보자.
- 응답 헤더 설정 페이지: ResponseMain2.jsp
- 응답 헤더에 값 추가하는: ResponseHeader.jsp
처음 보는 것도 있고 <ul> 없이 <li>가 나오는 것도 그렇고
여러모로 신기하므로 우선은 슥 보고만 지나가고자 한다.
<!-- 응답 헤더 설정: ResponseMain2.jsp -->
<h2>응답 헤더 설정</h2>
<form action="">
날짜 형식: <input type="text" name="add_date" value="2022-05-25"><br/>
숫자 형식: <input type="text" name="add_int" value="1123"><br/>
문자 형식: <input type="text" name="add_str" value="잠만보"><br/>
<input type="submit" value="응답 헤더 설정 / 출력">
</form>
<!-- 응답 헤더 추가: ResponseHeader.jsp -->
<%@page import="java.util.Collection"%>
<%@page import="java.text.SimpleDateFormat"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//응답 헤더에 추가할 값 준비
//SimpleDateFormat: 날짜를 2022-05-25 형식으로 출력하겠다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
long add_date = sdf.parse(request.getParameter("add_date")).getTime();
int add_int = Integer.parseInt(request.getParameter("add_int"));
String add_str = request.getParameter("add_str");
//응답 헤더에 값 추가
response.addDateHeader("myBirth", add_date);
response.addIntHeader("myNum", add_int);
response.addIntHeader("myNum", 1114);
response.addHeader("myName", add_str);
response.setHeader("myName", "손흥민");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - response</title>
</head>
<body>
<h2>응답 헤더 정보 출력</h2>
<%
Collection<String> headerNames = response.getHeaderNames();
for (String hName : headerNames) {
String hValue = response.getHeader(hName);
%>
<li><%=hName %> : <%=hValue %></li>
<%
}
%>
<h2>myNum만 출력하기</h2>
<%
Collection<String> myNum = response.getHeaders("myNum");
for (String myNo : myNum) {
%>
<li>myNum : <%=myNo %></li>
<%
}
%>
- 빨간 상자: 기존에 ResponseMain2.jsp에서 넣어놓은 숫자
- 주황 상자: ResponseHeader.jsp에서 add 계열을 통해 넣은 숫자
- 노랑 상자: ResponseMain2.jsp에서는 잠만보였지만, set 계열을 통해 바꾼 이름
아래에 myNum만 출력하기에서는
for 구문을 사용하여 myNo값을 돌려 들어있는 값들을 차례로 출력하였다.
ResponseHeader.jsp에서 add계열을 통해 1114를 추가시켜주었다.
'ebook > jsp' 카테고리의 다른 글
[8] 내장 객체 - application (0) | 2022.05.28 |
---|---|
[7] 내장 객체 - out (0) | 2022.05.27 |
[5] 내장 객체 - request (0) | 2022.05.24 |
[4] 스크립트 요소 (0) | 2022.05.23 |
[3] 지시어 (0) | 2022.05.21 |