FireDrago

[Servlet] 포워드, 바인딩 본문

프로그래밍/Servlet

[Servlet] 포워드, 바인딩

화이용 2023. 7. 4. 17:39

포워드 

  • 서블릿에서 다른 서블릿 혹은 JSP로 요청을 전달하는 것
  • 요청시 다른 데이터를 포함시켜 전달 할 수 있다.
굳이 왜 다른 파일로 분리해서 전달할까 그냥 한 페이지에 모든 기능을 쓰면 안되나
  1. 코드를 분리하면 기능별로 모듈화 즉 필요할때 꺼내서 사용할 수 있다. 
  2. 유지보수가 용이하다. 예를들어 데이터베이스 결합 부분을 수정한다 하더라도,
      다른 클래스들은 메서드만 호출해서 사용하므로 수정할 부분이 없다. (= 결합도가 낮아진다.)

 

서블릿에서 포워드 방식 

1. Redirect 방법

  • HttpServletResponse 객체의 sendRedirect( ) 메서드를 사용한다.
  • 웹 브라우저를 통해 두번째 서블릿을 요청한다.
  • 코드 중간에 사용하는 경우 버그발생 할 수 있다.

2. Refresh 방법

  • HttpServletRequest 객체의 addHeader( ) 메서드를 이용한다.
  • response.addHeader("Refresh" , 시간(초) : url=서블릿, Jsp);
  • main 페이지등에 자주 사용된다.

3. Dispatch 방법

  • 서블릿이 직접 요청하는 방법
  • RequestDispatcher dis = request.getRequestDispatcher(" 서블릿")
  • 위의 두 방법과 달리 클라이언트를 거치지 않고 바로 서블릿에 요청 (보안 유리)

 

 

 

바인딩 

 

서블릿의 관련 객체에 데이터를 저장하는것 

-  포워드는 Get 방식을 사용하므로 대용량 데이터 전송에 적합하지 않다.

-  URL에 데이터가 드러나기 때문에 보안문제도 있다.

-  Request  , Session , ServletContext  객체를 사용한다.

 

 

Request로 Dispatch 를 이용한 바인딩

 

MemberDao dao = new MemberDao();
List<MemberVO> list = dao.listMembers();
request.setAttribute("memberList", list); // request 에 담는다.
RequestDispatcher rd = request.getRequestDispatcher("views"); // views 명령어로 리퀘스트를 전달
rd.forward(request, response);

 

views를 받는 페이지에서는 getAttribute  ( ) 메서드를 사용하여 바인딩한 값을 꺼내어 사용한다.

@WebServlet("/views")
public class ViewServlet extends HttpServlet {
  ........ 중략 .........
  // request.getAttribute ( ) 메서드로 꺼낸다.
  List<MemberVO> list = (List<MemberVO>)request.getAttribute("memberList");
		               .... 
    for (int i=0; i<list.size(); i++) {
        MemberVO memberVO = list.get(i);
        String id = memberVO.getId();
        String pwd = memberVO.getPwd();
        String name = memberVO.getName();
        String email = memberVO.getEmail();
        String joinDate = memberVO.getJoinDate();
        out.print("<tr><td>"+id+"</td><td>"+pwd+"</td><td>"+name+"</td><td>"+email+"</td><td>"+joinDate+"</td>"
                +"<td><a href='/pro08/member3?command=delMember&id="+id+"'>삭제 </a></td></tr>");
    }
                           ......

 

'프로그래밍 > Servlet' 카테고리의 다른 글

[Servlet] MVC 패턴 업그레이드 하기  (0) 2024.01.25
[Servlet] MVC 패턴의 출현  (0) 2024.01.24
[Servlet] Servlet 사용법 (Request, Response)  (0) 2024.01.22
[Servlet] 서블릿이란  (0) 2024.01.19
[Servlet] 세션(Session)  (0) 2023.07.07