728x90
Logfilter
클래스 생성
Add선택 후 filter검색해서 javax.servlet선택 후 OK
이런화면 뜸 파일 이름 정하고 finish
package filter;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
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 LogFilter implements Filter {
//필터 시작. 초기화
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("Webmarket 초기화");
}
//필터구현
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("접속한 클라이언트 IP : " + request.getRemoteAddr());
//시스템 현재 시간(시작시간)
long start = System.currentTimeMillis();
System.out.println("접근한 URL 경로 : " + getURLPath(request));
System.out.println("요청 처리 시작 시각 : " + getCurrentTime());
//필터가 연속적으로 있다면 다음 필터로 제어 및 요청/ 응답 정보를 넘겨줌
chain.doFilter(request, response);
//시스템 현재시간(종료시간)
long end = System.currentTimeMillis();
System.out.println("요청 처리 종료 시각 : " + getCurrentTime());
System.out.println("요청 처리 소요 시간 : " + (end - start) + "ms");//1000분의 1초 단위
System.out.println("==============================================");
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
//접근한 URL 결로 리턴 메소드
//ch12/filter02_process.jsp?name=개똥이
// ServletRequest(국밥) -> HttpServletRequest(콩나물국밥) : 조금더 상세한 정보
private String getURLPath(ServletRequest request) {
//HttpServletRequest인터페이스는 ServletRequest 인W터페이스를 상속받음
HttpServletRequest req;
//currentPath : URL경로 => ch12/filter02_process.jsp
String currentPath = "";
//cueryString : 요청파라미터 => name = 개똥이
String queryString ="";
//instanceof 연산자 : 객체가 어떤 클래스인지 , 어떤 클래스를 상속받았는지 확인할 때 사용
if(request instanceof HttpServletRequest) {
//자식 = (cast)부모
req = (HttpServletRequest)request;
currentPath = req.getRequestURI(); // ch12/filter02_process.jsp
System.out.println(currentPath);
queryString = req.getQueryString(); //name =개똥이
//삼항연산자
queryString = queryString == null? "":"?"+ queryString;
}
req = (HttpServletRequest)request;
//ch12/filter02_process.jsp?name =개똥이
return currentPath + queryString;
}
//현재 시간을 얻어오는 메소드
private String getCurrentTime() {
//2023/07/13 10:25:12
DateFormat formatter = new SimpleDateFormat("yyyy/MM//dd HH:mm:ss");
//캘린더 객체 생성(싱글톤 : 메모리에 1번 생성하고 전역변수처럼 사용)
Calendar calendar = Calendar.getInstance();
//톰캣서버에서 제공해주는 시스템 련재 시간을 구해서 캘린더 객체에 세팅한다.
calendar.setTimeInMillis(System.currentTimeMillis());
return formatter.format(calendar.getTime());
}
}
<!-- 로그 파일 저장 -->
<filter>
<filter-name>LogFileFilter</filter-name>
<filter-class>filter.LogfileFilter</filter-class>
<!-- 로그가 저장될 파일의 위치 지정. LogFileFilter의 init()메소드에 초기화 파라미터를 보냄 -->
<init-param>
<param-name>filename</param-name>
<param-value>c:\\logs\\monitor.log</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFileFilter</filter-name>
<!-- <url-pattern>/ch12/filter02_process.jsp</url-pattern> -->
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Webmarket 콘솔 로그 -->
<filter>
<filter-name>LogFileter</filter-name>
<filter-class>filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogFileter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'JSP > JSP기초' 카테고리의 다른 글
JSP(ch13) 세션(session)사용방법 (0) | 2023.07.13 |
---|---|
JSP(ch13) 세션(session) (0) | 2023.07.13 |
JSP(Ch12) 필터 사용 로그기록 파일에 저장해보기 (0) | 2023.07.13 |
JSP(Ch12) 필터 사용하는 방법 두 번째 예제 (0) | 2023.07.12 |
JSP(Ch12) 필터 사용하는 방법 첫 번째 예제 (0) | 2023.07.12 |