// Redirection
- 서버에서 페이지를 전환해 준다.
- html 주소를 설정하면 submit 할 때 뒤로가기 하지 않아도 됨!
~ pageContext.forward()
- 데이터를 넘기면서 이동할 때 주로 사용
- 서버측 이동 > 주소 바뀌지 않음
~ response.sendRedirect()
- 일반적으로 사용
- 클라이언트측 이동 > 주소 바뀜
- response.sendRedirect()
//calc2.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="calc2" method="post">
<div>
<label>입력 : </label>
<input type="text" name="v" />
</div>
<div>
<input type="submit" name="operator" value="+" />
<input type="submit" name="operator" value="-" />
<input type="submit" name="operator" value="=" />
</div>
</form>
</body>
</html>
package com.sorrelcalc.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/calc2")
public class Calc2 extends HttpServlet{
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Cookie[] cookies = request.getCookies();
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
String v_ = request.getParameter("v");
String op = request.getParameter("operator");
int v = 0;
if(!v_.equals("")) v = Integer.valueOf(v_);
if(op.equals("=")) {
int x = 0;
int y = v;
for (Cookie c : cookies) { //쿠키 읽기
if (c.getName().equals("value")) {
x = Integer.valueOf(c.getValue());
break;
}
}
String operator = "";
for (Cookie c : cookies) {
if (c.getName().equals("op")) {
operator = c.getValue();
break;
}
}
int result = 0;
if(operator.equals("+"))
result = x+y;
else
result = x-y;
out.println("계산 결과는 = " + result);
} else { //operator가 + 또는 -
Cookie valueCookie = new Cookie("value", String.valueOf(v));
Cookie opCookie = new Cookie("op", op);
valueCookie.setPath("/calc2");
valueCookie.setMaxAge(60*60*24);
opCookie.setPath("/calc2");
response.addCookie(valueCookie); //클라이언트에 전달
response.addCookie(opCookie);
response.sendRedirect("calc2.html");
}
}
}
- pageContext.forward()
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
/*
서버측 자원의 생명 주기
- 서블릿 or JSP > 여러 가지 자원 > 언제 생성 ~ 소멸
- 현재 JSP 페이지가 실행 중일 때 > JSP 페이지 처리 종료 > 자원 소멸
*/
int a = 10;
pageContext.setAttribute("b", 20); //pageContext 변수
request.setAttribute("c", 30); //request 변수
/* response.sendRedirect("ex12_pagecontext_two.jsp"); */ //http://localhost:8090/jsp/ex12_pagecontext_two.jsp
pageContext.forward("ex12_pagecontext_two.jsp"); //http://localhost:8090/jsp/ex12_pagecontext_one.jsp
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="stylesheet" href="https://me2.do/5BvBFJ57">
<style>
</style>
</head>
<body>
<h1>첫 번째 페이지</h1>
<div>a: <%= a %></div>
<div>b: <%= pageContext.getAttribute("b") %></div>
<div>c: <%= request.getAttribute("c") %></div>
<a href="ex12_pagecontext_two.jsp?a=<%= a %>">두 번째 페이지로 이동하기</a>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.4/jquery.min.js"></script>
<script>
</script>
</body>
</html>
'서버 > Servlet-JSP' 카테고리의 다른 글
[Servlet-JSP] 입력 데이터 - 상태 유지 (0) | 2023.01.16 |
---|---|
[Servlet-JSP] Cookie (0) | 2023.01.15 |
JSP 내장 객체 - Session, Application (0) | 2023.01.13 |
JSP 내장 객체 - request, response, pageContext (0) | 2023.01.03 |
JSP 구성 요소 - 액션 태그 (0) | 2023.01.03 |