7. requestdispatcher, servlet filter
7. requestdispatcher, servlet filter
RequestDispatcher, Servlet Filter (23. 11. 04)
RequestDispatcher
- RequestDispatcher는 다른 페이지나 서블릿으로 현재 요청을 보내거나 다른 페이지나 서블릿의 출력을 현재 페이지에 포함시키는 데 사용
- 클라이언트로부터 들어온 요청을 Servlet내에서 원하는 자원으로 요청을 보내는 역할 수행
- a에서 들어온 요청을 RequestDispathcer를 사용해 b로 전송
- 웹 애플리케이션에서 유연한 처리가 가능해지며, 코드의 재사용성 증가
sendRedirect()와의 차이점
RequestDispathcer 사용방법
Servlet name으로 생성
1
RequestDispatcher rd = getServletContext().getNamedDispatcher("loginServlet");
URL로 설정
1
RequestDispatcher rd = getServletContext().getRequestDispatcher("/login");
forward() 메서드
- 대상 자원으로 제어를 넘긴다.
a
에서 요청했을때a
는forward()
를 실행 하여b
로 제어를 넘기고 브라우저에 출력은b
가 한다.- 브라우저 입장에서는
a
에게 요청했지만 결과는b
에게 받는다. redircet
와는 달리 하나의 HTTP 요청에 의해 동작이 이루어졌다.
login 실패시 sendRedirect를 forwad로 변경
1
resp.sendRedirect("/login.html");
아래와 같이 변경한다.
1
2
RequestDispatcher dispatcher = req.getRequestDispatcher("/login.html");
dispatcher.forward(req, resp);
Servlet Filter
- 지정한 URL 패턴에 해당하는 요청에 대해
- 서블릿 실행 전 후에
- 해당 요청이나 응답에 공통적으로 적용할 작업을 수행하는 객체
- 필터 체인 형태로 제공
- 서블릿에 전달하기 전 뿐만 아니라 후에도 필터 적용이 가능하다.
Interface
1
2
3
4
5
6
7
public interface Filter {
default public void init(FilterConfig filterConfig) throws ServletException {}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) /* .. */;
default public void destroy() {}
}
책임 연쇄 패턴
- 객체 지향 디자인에서 chain-of-responsibility pattern은 명령 객체와 일련의 처리 객체를 포함하는 디자인 패턴이다.
- 각각의 처리 객체는 명령 객체를 처리할 수 있는 연산의 집합이고, 체인 안의 처리 객체가 핸들할 수 없는 명령은 다음 처리 객체로 넘겨진다.
- 이 작동방식은 새로운 처리 객체부터 체인의 끝까지 다시 반복된다.
Listener
- Servlet Container가 수행한 특정한 타입의 동작(이벤트)을 감지하여
- 해당 이벤트에 대해 별도의 작업을 수행하는 객체
Listener 종류
Event Source | Event | Event Listener | |
---|---|---|---|
ServletContext | ServletContextEvent | ServletContextListener | 웹 애플리케이션 시작, 종료 |
ServletContext | ServletContextAttributeEvent | ServletContextAttributeListener | ServletContext 속성 변경 |
HttpSession | HttpSessionEvent | HttpSessionListener | 세션 시작, 종료 |
HttpSession | HttpSessionBindingEvent | HttpSessionAttributeListener | 세션 속성 변경 |
ServletRequest | ServletRequestEvent | ServletRequestListener | ServletRequest 생성, 종료 |
ServletRequest | ServletRequestAttributeEvent | ServletRequestAttributeListener | ServletRequest 속성 변경 |
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.