웹 프로그램 실행 시 자원(데이터)을 서블릿 관련 객체에 저장하는 방법
GET방식으로 많은 데이터를 전달하기에 한계가 있다. 많은 양의 데이터를 전달할 때 바인딩binding을 사용한다.
그냥 key-value다.
/*데이터를 각 객체에 바인딩한다.*/
setAttribute(String name, Object obj)
/*각 객체에 바인딩된 데이터를 name으로 가져온다.*/
getAttribute(String name)
/*각 객체에 바인딩된 데이터를 name으로 제거한다.*/
removeAttribute(String name)
예제
보내는 쪽
@WebServlet("/bind")
public class BindingTestServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
request.setAttribute("address", "소행성 b-612");
RequestDispatcher dis = request.getRequestDispatcher("/getBind");
dis.forward(request, response);
}
}
받는 쪽
@WebServlet("/getBind")
public class GetBindingTestServlet extends HttpServlet {
public 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");
System.out.println("adress : " + address);
out.print("<html><body><h1>나의 주소 : "+address+"</h1></body></html>");
}
}
redirect가 아닌 RequestDispatcher를 이용한 이유는 redirect는 클라이언트를 거치기 때문에 중간에서 데이터가 손실된다. 반면 dispatcher는 다이렉트로 지정한 서블릿으로 가기 때문에 데이터를 유지한다.