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 넣고 로그인 버튼 클릭

 

ResponseMain.jsp에서 아이디/비밀번호 똑바로 넣어보기
-> ResponseWelcome.jsp _ 로그인 성공 메시지 출력

[실험 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>
<%
}
%>

ResponseHeader.jsp

  • 빨간 상자: 기존에 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

+ Recent posts