Web/Jsp

[Jsp] Forward & Bind

hikr90 2025. 1. 9. 22:03

# Forward

- 프로그램 구동 시, 서블릿과 서블릿 혹은 서블릿과 Jsp 간의 연동 작업이 필요한 경우 사용하는 방법

- Model2에서 서블릿에서 Jsp로 정보를 전달하는 경우 자주 사용된다.

 

장점
요청에대한 추가 작업을 다른 서블릿이 수행하도록 한다.
요청에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있다.
요청에 다른 정보를 포함시켜 다른 서블릿에 전송할 수 있다.

  

# 1 Redirect

- 응답 객체 (HttpServletResponse) 의 sendRedirect 메소드를 이용

- 웹 브라우저에 재 요청하는 방식

- GET 방식으로 값을 전송하는 경우, 받는 쪽 서블릿에서는 REQUEST객체의 getParameter메소드로 받을 수 있다.

# 기본적인 형태 
response.sendRedirect("포워드할 서블릿 또는 JSP");

# GET방식의 REDIRECT
response.sendRedirect("test.do?변수1=값1&변수2=값2");

 

(1) 클라이언트의 웹 브라우저에서 SERVLET(1)로 요청

(2) 서블릿(1)에서 sendRedirect 메소드로 서블릿(2) 을 웹 브라우저를 통해서 재 요청

(3) 웹 브라우저에서 재 요청한 두번째 서블릿을 다시 요청


 

# 2 Refresh

- 응답 객체 (HttpServletResponse) 의 addHeader 메소드를 이용

- 웹 브라우저에 재 요청하는 방식

response.addHeader("Refresh",경과시간(초);"url=요청할 서블릿 또는 JSP");

 

(1) 클라이언트의 웹 브라우저에서 서블릿(1)로 요청

(2) 서블릿(1)에서 addHeader 메소드로 서블릿(2) 을 웹 브라우저를 통해서 재 요청

(3) addHeader에 지정된 시간(초) 가 지난 뒤 웹 브라우저에서 재 요청한 두번째 서블릿을 다시 요청


 

# 3 location.href

- 자바스크립트 location 객체의 herf 속성을 이용

- 자바스크립트에서 재 요청하는 방식 (서버에 접근하지 않고 처리)

- get 방식처럼 뒤에 ? 맵핑 주소와 파라미터를 붙여 파라미터와 함께 전송할 수 있다.

location.href = '요청할 서블릿 또는 jsp';

 

# 4 dispatcher

- RequestDispatcher 클래스를 사용하는 방식 (기본적인 포워딩 방식)

- 요청 영역에 요청받은 요청 객체를 저장한 뒤 포워딩으로 다른 Jsp 페이지로 넘기는 역할

- 서블릿이 직접 요청하는 방식으로 forward 메소드를 사용

- 서버에서 진행하므로 URL이 변경되지 않고 진행된다. (클라이언트에서는 변경되는 것을 알 수 없다.)

# 기본적인 형태
RequestDispatcher disp = request.getRequestDispatcher("포워드할 서블릿 혹은 JSP");

disp.forward(request, response);

# get방식의 포워딩
RequestDispatcher disp = request.getRequestDispatcher("test.do?변수1=값1&변수2=값2");
disp.forward(request, response);

 

 

(1) 클라이언트의 웹브라우저에서 첫번째 서블릿에 요청

(2) 서블릿(1)에서 RequestDispatcher를 이용하여 서블릿(2)로 포워드


 

# Bind

- FOWARD에서 GET방식으로 전달할 수 없는 큰 데이터를 전송해야하는 경우 사용한다.

- 웹 프로그램 실행 시, 서블릿 관련 객체에 데이터(자원)를 저장하는 방법

- 관련 객체로는 HttpServletRequest, HttpSession, ServletContext등이 있다.

- BIND은 POST방식의 전송만 가능하다.

request.setAttribute("바인딩하는 데이터의 명칭", 데이터);

 

 

메소드

메소드
설명
setAttribute(String name, Object obj)
데이터를 객체에 바인딩
getAttribute(String name)
객체에 바인딩된 데이터를 name값 기준으로 가져온다.
removeAttribute(String name)
객체에 바인딩된 데이터를 name값 기준으로 제거한다.

 

[참고] 웹 브라우저 재 요청 방식의 경우, BIND 방식을 사용할 수 없다.

 

- redirect처럼 웹 브라우저에서 재 요청하는 방법의 경우  바인딩 방식으로 값을 전송할 수 없다.

- 사진의 (1)에의 요청와 요청 (2)의 는 서로 다른 요청이기 때문이다.

- get방식으로 전송 자체는 가능하나, 보안상의 문제와 대용량의 데이터를 전송할 수 없다는 문제가 있다.

 

 

타입
설명
dispatcher
- 요청, 응답 객체를 함께 넘긴다.
- 서버에서만 작업이 진행되므로 url이 변경되지 않는다.
sendRedirect
- 요청, 응답 객체가 새롭게 생성된다.
- 완전히 새로운 페이지로의 호출이 있으므로 url이 변경된다.

[예시] a.jsp >>> b.jsp
a에서 b로 redirect시 클라이언트에게 redirect할 b를 리턴하고 클라이언트는 b페이지로 다시 새로운 요청을 생성하여 보내게되면서 처음 a로 요청했던 requsetScope에 담긴 정보는 초기화된다.

 

포워드와 바인드의 차이

타입
설명
예시
forwarding
요청을 서블릿에서 직접 처리하지 않고 다른 서블릿으로 위임
forward(요청객체, 응답객체);
binding
서블릿에서 다른 서블릿으로 데이터 공유
request.setAttribute("requestScope 명칭", 데이터);

 

전송 방식 차이

타입
설명
dispatcher
EL표기법을 통해서 데이터를 뿌려줘야하는 상황(바인딩, 포워딩)에서 사용한다.
sendRedirect
따로 뿌려줘야할 데이터가 없고 페이지 새로고침이 있어야하는 경우, get방식으로만 파라미터 전송이 가능하다.
location.href
페이지로 파라미터등을 보내거나 페이지 새로고침등의 작업이 가능하지만 get방식만 가능하다.