핵심 개념
- HttpServletResponse
- sendRedirect()
리다리렉트는 http프로토콜로 정해진 규칙이다. 서버는 클라이언트의 요청에 대해 특정 URL로 이동을 요청할 수 있다. 이를 리다이렉트라고 한다.
1. 클라이언트가 요청을 하면 서버는 리다이렉트가 담긴 코드를 보고 HTTP상태코드 302와 헤더 내 LOCATION 값에 이동할 URL을 함께 보낸다.
클라이언트:주소 요청 >>HTTP://WWW.~~~~주소 요청(안에 리다이렉트코드 있음)>>
>>서버: 리다이렉트코드를 보고 내 상태 코드와 바뀐 주솟값을 클라이언트에게 다시 전달 >>>>상태코드 + 주소>>>>
>>클라이언트: 상태값이 302인걸 확인 + 바뀐 주소값으로 자동으로 서버에 재요청 >>> 서버:바뀐 주소 응답.
리다이렉트는 response.sendRedirect("주소")로 사용한다.
핵심 개념
- RequestDispatcher
- forward()
forward는 요청을 받은 서버에서 처리하지 않고 다른 서버에서 처리하도록 보내는 것을 의미한다.
클라이언트는 서버에 request를 하고 서블렛은 처리할 껀 처리한뒤 request에 저장하고 미룰정보와 저장한 정보를
같이 forward로 전송한다.
http://java.scwcd.jobs4times.com/Web-Container-Model.html
redirect는 클라이언트가 요청하고 서버가 응답하고 다시요청 다시응답을 하지만
forward는 클라이언트가 요청하고 서버내 다른곳에 그 정보를 그대로 다시 요청하고 응답한다. 그래서 forward를 하더라도 주소가 바뀌지 않는다.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int diceValue = (int)(Math.random() * 6) + 1;
request.setAttribute("dice", diceValue);
RequestDispatcher requestDispatehcer = request.getRequestDispatcher("/next");
requestDispatehcer.forward(request, response); } }
저장할 값을 setAttribute를 통해 저장한다 앞에 인자는 값을 찾을 키 값이고 뒤에 인자는 저장할 변수다.
그다음 requestdispatcher를 통해 보낼 주소를 입력한다. forward의 경우 반드시 /를 입력해야한다.
그 후 forward로 request와 response를 보내면 된다.
그 후 next에서
int dice = (Integer)request.getAttribute("dice");로 값을 받아 활용하면된다.
인티져로 값을 변환하는 이유는 setAttribute의 경우 값을 object로 저장하기 때문에 형변환을 해야한다.
핵심 개념
- forward
- request.setAttribute()
- request.getAttribute()
jsp는 html코드를 작성하기 편하고 servlet은 프로그램 로직을 작성하기 편하다. 그래서 코드와 로직을 따로따로 처리하기 위해서 forward를 사용한다. 서브렛이 로직을 처리한 후 포워드로 그 결과를 jsp로 보내주면 jsp는 프로그램디자인과 처리된 값을 화면에 출력해준다.
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int v1 = (int)(Math.random() * 100) + 1;
int v2 = (int)(Math.random() * 100) + 1;
int result = v1 + v2;
request.setAttribute("v1", v1);
request.setAttribute("v2", v2);
request.setAttribute("result", result);
RequestDispatcher rd = request.getRequestDispatcher("/jsp/result.jsp");
rd.forward(request, response);
}
여기서 랜덤값 2개와 결과값을 result.jsp로 보낸다
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
int v1 = (int)request.getAttribute("v1");
int v2 = (int)request.getAttribute("v2");
int result = (int)request.getAttribute("result");
%>
<%=v1 %> + <%=v2 %> = <%=result %>
</body>
</html>
이후 jsp에서 받은 값을 처리한다.
'IT > 부스트코스' 카테고리의 다른 글
부스트코스 DB연결 웹앱 #6 EL,JSTL (0) | 2020.01.23 |
---|---|
부스트코스 DB연결 웹앱 #5 scope (0) | 2020.01.22 |
부스트코스 DB연결 웹앱 #3 JS (0) | 2020.01.21 |
부스트코스 DB연결 웹앱 #2 WEB UI 개발- FE (0) | 2020.01.16 |
부스트코스 DB연결 웹앱 #1 자바스크립트 FE (0) | 2020.01.15 |