web.xml의 <web-app>안에 추가해야할 문장
<filter>
<filter-name>timer</filter-name>
<filter-class>com.filter.TimerFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>timer</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
======================================================================================================================
TimeFilter.java
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class TimerFilter implements Filter {
private FilterConfig config;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {
// req 필터
long begin= System.currentTimeMillis(); // 요청받았을 때의 시간 찍힘
// 다음 필터 또는 필터의 마지막이면 jsp나 servlet 실행
chain.doFilter(req, resp);
//resp 필터
long end=System.currentTimeMillis(); // 응답할 때의 시간 찍힘
String uri;
if(req instanceof HttpServletRequest){
HttpServletRequest request=(HttpServletRequest)req; // ServletRequest에는 uri가 없으므로 다운캐스팅함
uri=request.getRequestURI();
String msg=uri=uri+":"+(end-begin)+" ms";
config.getServletContext().log(msg); //getServletContext()의 log메소드를 이용한 콘솔창 출력
//system.out.print 가 아닌 log를 이용하여 확인
}
}
@Override
public void init(FilterConfig config) throws ServletException {
this.config=config;
}
}
// web.xml로 인하여 클라이언트의 모든 요청이 이곳의 TimerFilter클래스로 진입하여 doFilter()를 실행
// req 필터(요청된거 먼저) 이곳의 진입 시간을 찍고(long begin= System.currentTimeMillis();)
// chain.doFilter(req, resp); => 다음 필터실행, 실행할 필터가 없으면 jsp나 servlet실행하라는 명령
// resp 필터(응답 나중 )실행 long end=System.currentTimeMillis(); 실행함.
====================================================================================================================================
====================================================================================================================================
web.xml의 <web-app>안에 추가해야할 문장
<filter>
<filter-name>CharacterEncoding</filter-name>
<filter-class>com.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>charset</param-name> <!-- 해당경로에서만 사용할 수 있는 속성을 미리 정의함 (charset이라는 key로 utf-8이라는 값으로 정의함)
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
====================================================================================================================================
CharacterEncodingFilter.java
package com.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class CharacterEncodingFilter implements Filter{
private String charset;
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
// req 필터
req.setCharacterEncoding(charset);
chain.doFilter(req, resp);
//resp 필터(없음)
}
@Override
public void init(FilterConfig config) throws ServletException {
charset=config.getInitParameter("charset"); //web.xml의 param을 통해 보낸 인자값을 getInitParameter을 통해서 받는다
if(charset==null || charset.length()==0)
charset="utf-8";
}
}
// TimerFilter가 먼저 실행 : web.xml에서 먼저 작성되있기 때문에
====================================================================================================================================
====================================================================================================================================
web.xml의 <web-app>안에 추가해야할 문장
<filter>
<filter-name>login</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
====================================================================================================================================
implemente filter를 한 후에 destroy(), doFilter(ServletRequest req, ServletResponse resp,FilterChain chain), init(FilterConfig config) 3개의 메소드를 재정의해준다.
web.xml을 통하여 web.xml에 가장 먼저 작성된 순서로 명시된 Filter의 클래스로 들어오게되면 doFilter메소드를 실행한다.
doFilter의 req명령을 실행하다가 중간에 chain.doFilter(req,resp); 만나게 되면 web.xml에 명시된 다음 Filter로 넘어간다. 만약 다음에 실행할 filter가 없으면 jsp나 servlet과 같은 클라이언트의 직접적인 요청을 처리하고 가장나중에 실행된 filter부터 반대순으로 chain.doFilter(req,resp); 다음의 명령들을 실행하고 실행이 모두 끝나면 계속 반대순으로 처음에 시작했던 filter의 resp필터요청까지 끝낸다.
'JSP(Java Server Page)' 카테고리의 다른 글
jsp 체크박스 검증 검사 (0) | 2013.09.07 |
---|---|
셀렉트 옵션 (0) | 2013.07.15 |
서블릿에서 alert , html 사용하기 (0) | 2013.07.02 |
JSP Life Cycle // init,service,destroy // 서블릿에서 자바스크립트 사용하기 (0) | 2013.07.02 |
JSP 구성요소 (0) | 2013.07.02 |