은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (43)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (3)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화

뚜렷한 기억보단 흐릿한 잉크를

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

반응형
저작자표시

'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
    'IT/부스트코스' 카테고리의 다른 글
    • 부스트코스 DB연결 웹앱 #6 EL,JSTL
    • 부스트코스 DB연결 웹앱 #5 scope
    • 부스트코스 DB연결 웹앱 #3 JS
    • 부스트코스 DB연결 웹앱 #2 WEB UI 개발- FE
    은세고화
    은세고화

    티스토리툴바