▶ Redirect(재요청)
클라이언트의 요청을 받은 Servlet/JSP에서
직접 응답하지 않고
다른 Servlet/JSP를 다시 요청 하는 것
1) 보통 Servlet 요청 처리 후 특정 JSP로 요청을 위임해
결과 화면을 응답해 주는 것이 아닌다른 Servlet을 다시 요청하여
다른 Servlet의 결과 화면을 응답해줌
(요청 받은 Servlet이 응답해줄 JSP가 없음)
2) redirect는 다시 요청 하는 것!!!
→ 기존 client의 req, resp 객체가 "사라지고" 새로운 "req, resp 객체가 생성"된다!!!
→ request scope에 세팅된 값들이 모두 사라짐!!
3) redirect는 응답 화면의 주소가
처음 요청한 Servlet 주소가 아닌
다시 요청한 Servlet 주소로 변경된다!
- 다른 Servlet을 요청하기 위해서는
"요청 주소"를 작성해야 한다
#예제
<form action="/fr/redirect">
redirect 입력 1 : <input type="text" name="redirectInput1">
<br>
redirect 입력 2 : <input type="text" name="redirectInput2">
<button>redirect 확인하기</button>
</form>
[Servlet]
package edu.kh.jsp2.controller;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;
@WebServlet("/fr/redirect")
public class RedirectServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// request scope에 값 추가
req.setAttribute("str2", "가나다라마바");
// session scope에 값 추가
HttpSession session = req.getSession();
session.setAttribute("sessionNum", 10000);
// resp.sendRedirect("다시 요청할 Servlet 주소")
// -> 파일 경로가 아닌
// 다시 요청할 Servlet의 @WebServlet()에 작성된 주소
resp.sendRedirect("/fr/result");
}
}
[result Servlet]
package edu.kh.jsp2.controller;
import java.io.IOException;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/fr/result")
public class ResultServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 요청 위임할 JSP 파일 경로 작성
String path = "/WEB-INF/views/fr/redirect_result.jsp";
req.getRequestDispatcher(path).forward(req, resp);
}
}
[redirect_result]
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>redirect 결과 페이지</title>
</head>
<body>
<h3>
/fr/redirect 요청 시
재요청 되어 보여지는 페이지
</h3>
<h3 id = "print"></h3>
<hr>
<h3>request scope로 전달된 값이 존재하나 확인</h3>
<ul>
<li>redirectInput1 : ${param.redirectInput1}</li>
<li>redirectInput2 : ${param.redirectInput2}</li>
<li>str : ${str2}</li>
</ul>
<h3>session scope로 전달된 값 : ${sessionNum}</h3>
<script>
// 아이디가 print인 요소의 내부 내용으로
// 현재 페이지 주소를 대입
document.querySelector("#print").innerText = location.pathname
</script>
</body>
</html>
#결과

'BackEnd > Java' 카테고리의 다른 글
| [JDBC] JDBC 기초 작성방법 (0) | 2024.09.02 |
|---|---|
| [JDBC] dto / dao / common(Template) / run / service / view (0) | 2024.08.27 |
| [Servlet/JSP]Forward(요청 위임) (0) | 2024.08.16 |
| [Servlet/JSP]Dynamic Web Project의 폴더 구조 및 연습하기 (0) | 2024.08.16 |
| [Servlet/JSP]JSTL 예제 (책 목록 조회하기) (0) | 2024.08.16 |