FireDrago
[Servlet] 포워드, 바인딩 본문
포워드
- 서블릿에서 다른 서블릿 혹은 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 |
