바인딩(Binding)

2022. 2. 11. 11:28·Back/JSP

 

 

서블릿에서 다른 서블릿으로 전달하려는 데이터의 양이 많을 때는 GET방식으로 데이터를 전달하는 것이 불편하다.

서블릿에서 다른 서블릿 또는 JSP로 대량의 데이터를 공유하거나 전달하고 싶을 때는 바인딩 기능을 사용한다.

 

웹 프로그램 실행 히 데이터를 서블릿 관련 객체에 저장하는 방법으로, 주로 HttpServletRequest, Httpession, ServletContext 객체에서 사용되며 저장된 데이터는 프로그램 실행 시 서블릿이나 JSP에서 공유하여 사용한다.

 

관련 메소드 기능
 setAttribute(객체명, "객체값") 데이터를 객체에 바인딩 한다.
객체명 = 객체값
ex) address = "수원시 권선구"
 getAttribute(String name) setAttribute에서 받아온 데이터를 가져온다.
ex) getAttribute(address)
 removeAttribute(String name)   각 객체에 바인딩 된 데이터를 name으로 제거한다.

 

 

 

HttpServletRequest를 이용한 redirect 포워딩 시 바인딩

브라우저에서 전달받은 request를 서블릿에서 redirect 방식으로 다른 서블릿에 전달

 

FirstServlet.java

package ex02;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/first")
public class FirstServlet extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=\"UTF-8\"");
		
		//request에서 요청한 request객체의 address 값으로 "수원시 권선구"를 바인딩
		request.setAttribute("address", "수원시 권선구");
		
		//두 번째 서블릿으로 전달하기 위해 sendRedirect()를 호출
		response.sendRedirect("second");
		
	}

}

 

SecondServlet.java

package ex02;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/second")
public class SecondServlet extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=\"UTF-8\"");
		
		PrintWriter out = response.getWriter();
		String address = (String) request.getAttribute("address");
		
		out.println("<html><body>");
		out.println("주소: " + address);
		out.println("<br>");
		out.println("redirect를 이용한 바인딩 실습");
		out.println("</body></html>");
		
	}

}

 

 

 

실행 결과를 보면 정상적으로는 '수원시 권선구'가 출력되어야 하는데 null이 출력된다.

 

이유는 redirect 방식 포워드 과정 때문이다.

포워딩 과정 1단계인 웹브라우저에서 요청할 때 서블릿에 전달되는 첫 번째 request는 웹 브라우저를 통해 재 요청되는 3단계의 두 번째 request와는 다른 요청이다.

즉, redirect 방식으로는 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없다는 것이다.

 

 

 

HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩

FirstServlet.java

package ex02;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/first")
public class FirstServlet extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=\"UTF-8\"");
		
		//웹 브라우저의 최초 요청 request에 바인딩한다.
		request.setAttribute("address", "수원시 권선구");
		
		//바인딩된 request를 다시 두 번째 서블릿으로 포워드한다.
		RequestDispatcher dispatch = request.getRequestDispatcher("second");
		dispatch.forward(request, response);
		
	}
}

 

SecondServlet.java

package ex02;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@WebServlet("/second")
public class SecondServlet extends HttpServlet 
{

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
	{
		//한글 인코딩
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=\"UTF-8\"");
		
		PrintWriter out = response.getWriter();
		//전달된 request에서 getAttribute()를 이용해 주소를 받아온다.
		String address = (String) request.getAttribute("address");
		
		out.println("<html><body>");
		out.println("주소: " + address);
		out.println("<br>");
		out.println("dispatch를 이용한 바인딩 실습");
		out.println("</body></html>");	
	}
}

 

 

이 포워딩 과정을 보면 첫 번째 서블릿에서 두 번째 서블릿으로 전달되는 request가 브라우저를 거치지 않고 바로 전달되었다. 따라서 첫 번째 서블릿의 request에 바인딩 된 데이터가 그대로 전달된 것이다.

 

모델2, 스트릿츠, 스프링 프레임워크로 개발할 때는 dispatch방식으로 바인딩 된 데이터를 서블릿이나 JSP로 전달한다.

저작자표시

'Back > JSP' 카테고리의 다른 글

[JSP] scope란?  (0) 2023.05.17
[JSP] MVC 디자인 패턴  (0) 2022.02.08
세션을 이용한 웹페이지 연동기능  (0) 2022.02.05
DataSource 이용해 데이터베이스 연동하기  (0) 2022.02.05
서블릿의 비즈니스 로직 처리 방법  (0) 2022.01.31
'Back/JSP' 카테고리의 다른 글
  • [JSP] scope란?
  • [JSP] MVC 디자인 패턴
  • 세션을 이용한 웹페이지 연동기능
  • DataSource 이용해 데이터베이스 연동하기
soyeon26
soyeon26
  • soyeon26
    개발 일지
    soyeon26
  • 전체
    오늘
    어제
    • 분류 전체보기 (107)
      • Web (22)
        • Web (1)
        • HTTP (0)
      • Language (29)
        • Java Script (3)
        • Type Srcipt (1)
        • Java (25)
      • Front (19)
        • HTML+CSS (4)
        • React (15)
      • Back (41)
        • Spring(Springboot) (9)
        • JSP (21)
        • Database (5)
        • NestJS (6)
      • Devops (6)
        • Docker (1)
        • Git & SVN (5)
      • App (7)
        • Android (7)
      • IT 정보 (3)
  • 블로그 메뉴

    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    강의 후기
    인프런
    javascript
    과학기술인번호 조회
    csr과ssr의 차이
    Next.js 필요성
    김영한
    과학기술인 등록번호 발급
    중복제거
    데이터베이스 강의
    자바스크립트set
    SQL강의 추천
    Java
    Next.js
    React Next.js
    React
    프론트엔드
    sql강의
    스프링부트
    Spring
    과학기술인 번호 발급
    과학기술인등록번호 조회
    SSR
    서블릿
    백엔드
    과학기술인 등록
    강의후기
    csrvsssr
    springboot
    java의 정석
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
soyeon26
바인딩(Binding)
상단으로

티스토리툴바