Serlvet(3)

3023 단어 SpringSpring

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;
    	}
}

좋은 웹페이지 즐겨찾기