Serlvet(3)
Servlet filter and listener
Servlet Scope
ServletContext : 어플리케이션 전체에 대체 접근 가능
HttpSession : 브라우저에 접근 가능(크롬, 인터넷익스플로러)
HttpServletRequest : 해당 요청/응답 사이클만 가능
URL 패턴
//하위 폴더까지 일치하기
@WebServlet("/first/test")
//하위 폴더의 모든것
@WebServlet("/first/*")
//확장자 일치시키기
@WebServlet("*.do")
//모든 요청 URL
@WebServlet("/*")
Filter API
각 서블릿에서 반복적으로 처리해야하는 작업이 있을수있는데, 이런경우 서블릿의 공통작업을
미리 필터에서 처리하면 그작업들을 반복할 필요가없다
package sec03.ex01;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
@WebFilter("/*")
public class EncoderFilter implements Filter {
ServletContext context;
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("utf-8 인코딩 .................");
context = fConfig.getServletContext();
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter 호출");
System.out.println("chain 호출 : " + chain);
request.setCharacterEncoding("utf-8");
String context = ((HttpServletRequest)request).getContextPath();
String pathinfo = ((HttpServletRequest)request).getRequestURI();
String realPath = request.getRealPath(pathinfo);
String mesg = "Context 정보 : " + context
+ "\n URI 정보 : " + pathinfo
+ "\n 물리적 경로 : " + realPath;
System.out.println(mesg);
long begin = System.currentTimeMillis();
//다음 필터로 작업을 넘기기
chain.doFilter(request, response);
long end = System.currentTimeMillis();
System.out.println("작업시간 : " + (end-begin) + "ms");
}
public void destroy() {
System.out.println("destory 호출");
}
}
Listener
HttpSessionBindingListener : 세션에 바인딩/언바인딩된 객체를 알려주는 이벤트 발생시 처리(valueBound, valueUnBound)
HttpSessionListener : 세션 객체의 생성/소멸 이벤트 발생시 처리한다
(sessionCreate, sessionDestroyed)
HttpSessionBindingListener를 구현한 클래스는 리스너를 따로 등록할필요가없다.
HttpSessionBindingListener와는 다르게 HttpSessionListener는 반드시
리스너를 구현한 이벤트 핸들러를 애너테이션을 이용해서 등록해야한다.
@WebListener
public class LoginImpl implements HttpSessionListener {
String user_id;
String user_pw;
static int total_user=0;
public LoginImpl(){
}
public LoginImpl(String user_id, String user_pw){
this.user_id = user_id;
this.user_pw = user_pw;
}
//세션 생성 이벤트
public void sessionCreated(HttpSessionEvent arg0) {
System.out.println("세션 생성");
++total_user;
}
//세션 소멸 이벤트
public void sessionDestroyed(HttpSessionEvent arg0) {
System.out.println("세션 소멸");
--total_user;
}
}
Author And Source
이 문제에 관하여(Serlvet(3)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@vmelove/Serlvet3저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)