IT/부스트코스

부스트코스 DB연결 웹앱 #4 redirect & forward

은세고화 2020. 1. 21. 20:57
반응형

핵심 개념

  • 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에서 받은 값을 처리한다.

반응형