일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 단축키
- Java
- Android
- FastAPI
- 컬렉션프레임워크
- 반복문
- 이클립스
- pyqt
- Error
- ddit
- Homebrew
- API
- 객체지향
- html
- spring
- 배열
- 생활코딩
- 자바문제
- python
- 자바
- ibatis
- servlet
- nodejs
- JDBC
- crud
- 대덕인재개발원
- jsp
- 맥
- Oracle
- Mac
Archives
- Today
- Total
romworld
JSP 25 - 쇼핑몰 사이트 만들기(9) ( LogFilter 적용) 본문
<LogFilter.java>
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 filterConfig) 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() {
}
//접근한 URL 경로
private String getURLPath(ServletRequest request) {
//ServletRequest(부모) -> HttpServletRequest(자식) : 더 많은 메소드를 사용하기 위함
//HttpServletRequest는 ServletRequest를 상속
HttpServletRequest req;
//요청된 URL경로 : http://localhost/ch12/filter03.jsp
String currentPath = "";
//queryString : 요청파라미터(HTTP파라미터) => name=새롬이
String queryString = "";
//instanceof : '레퍼런스'가 가리키는 객체가 해당 '클래스 타입'이면 true, 아니면 false로 처리
//객체레퍼런스 instanceof 클래스타입
//부모와 자식 관계인가?
if(request instanceof HttpServletRequest) {
req = (HttpServletRequest)request;
//현재 접속한 URL을 얻어옴
//요청된 URL경로 : http://localhost/ch12/filter03.jsp
currentPath = req.getRequestURI();
System.out.println("currentPath : " + currentPath);
//name=새롬이
queryString = req.getQueryString();
System.out.println("queryString : " + queryString);
//3항연산지
//조건?true일때값:false일때값
//name=새롬이 -> ?name=새롬이
queryString = (queryString == null?"":"?"+queryString);
}
//http://localhost/ch12/filter03.jsp + ?name=새롬이
//http://localhost/ch12/filter03.jsp?name=새롬이
return currentPath + queryString;
}//end getURLPath()
//현재일시를 리턴해주는 메소드
private String getCurrentTime() {
//출력 형식을 설정
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//날짜 객체 생성(싱글톤-주기억장치(ram)에 객체가 1회 생성. 전역변수처럼 공유되어 사용)
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
//현재 일시를 연/월/일 시:분:초 형식으로 바꿈(String타입)
return formatter.format(calendar.getTime());
}
}
<web.xml>
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<products.jsp>
를 실행시키면
로그 파일로 저장
package filter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
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 {
//jsp에서 메시지를 보여야 하므로 선언.
PrintWriter writer;
//filterConfig : filename=c:\\logs\\gdi.log
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("WebMarket 초기화...");
//filename는 c:\\logs\\gdi.log
String filename = filterConfig.getInitParameter("filename");//저장될 경로 및 파일명
if(filename==null) throw new ServletException("로그 파일의 이름을 찾을 수 없습니다.");
try {
//new PrintWriter : 파일 객체 생성(true : 기존 버퍼를 비움)
//new FileWriter : 생성된 파일에 연동(true : 누적됨(append))
writer = new PrintWriter(new FileWriter(filename, true),true);
}catch(IOException e) {
throw new ServletException("로그 파일을 열 수 없습니다.");
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response
, FilterChain chain)
throws IOException, ServletException {
writer.println("접속한 클라이언트 IP : " + request.getRemoteAddr());
long start = System.currentTimeMillis();
writer.println("접근한 URL 경로 : " + getURLPath(request));
writer.println("요청 처리 시작 시각 : " + getCurrentTime());
//필터가 연속적으로 있다면 다음 필터로 제어 및 요청/응답 정보를 넘겨줌
chain.doFilter(request, response);
//시스템 현재시간(종료시간)
long end = System.currentTimeMillis();
writer.println("요청 처리 종료 시각 : " + getCurrentTime());
writer.println("요청 처리 소요 시간 : " + (end-start) + "ms");//1000분의 1초 단위
writer.println("===============================");
}
//필터가 종료되기 직전에 실행
@Override
public void destroy() {
//파일 객체를 닫아줌. 메모리에서 제거
writer.close();
}
//접근한 URL 경로
private String getURLPath(ServletRequest request) {
//ServletRequest(부모) -> HttpServletRequest(자식) : 더 많은 메소드를 사용하기 위함
//HttpServletRequest는 ServletRequest를 상속
HttpServletRequest req;
//요청된 URL경로 : http://localhost/ch12/filter03.jsp
String currentPath = "";
//queryString : 요청파라미터(HTTP파라미터) => name=개똥이
String queryString = "";
//instanceof : '레퍼런스'가 가리키는 객체가 해당 '클래스 타입'이면 true, 아니면 false로 처리
//객체레퍼런스 instanceof 클래스타입
//부모와 자식 관계인가?
if(request instanceof HttpServletRequest) {
req = (HttpServletRequest)request;
//현재 접속한 URL을 얻어옴
//요청된 URL경로 : http://localhost/ch12/filter03.jsp
currentPath = req.getRequestURI();
System.out.println("currentPath : " + currentPath);
//name=새롬이
queryString = req.getQueryString();
System.out.println("queryString : " + queryString);
//3항연산지
//조건?true일때값:false일때값
//name=새롬이 -> ?name=새롬이
queryString = (queryString == null?"":"?"+queryString);
}
//http://localhost/ch12/filter03.jsp + ?name=새롬이
//http://localhost/ch12/filter03.jsp?name=새롬이
return currentPath + queryString;
}//end getURLPath()
//현재일시를 리턴해주는 메소드
private String getCurrentTime() {
//출력 형식을 설정
DateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
//날짜 객체 생성(싱글톤-주기억장치(ram)에 객체가 1회 생성. 전역변수처럼 공유되어 사용)
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
//현재 일시를 연/월/일 시:분:초 형식으로 바꿈(String타입)
return formatter.format(calendar.getTime());
}
}
<web.xml>
<!-- /*(모든 요청)이 요청되면 LogFilter 필터 수행 -->
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>filter.LogFilter</filter-class>
<init-param>
<param-name>filename</param-name>
<param-value>c:\\logs\\gdi.log</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
'WEB > JSP' 카테고리의 다른 글
JSP 27 - 쇼핑몰 사이트 만들기(10) [장바구니 - (session 활용)] (0) | 2023.01.17 |
---|---|
JSP 26 - 세션(session) (0) | 2023.01.17 |
JSP 24 - 필터 (filter) (0) | 2023.01.16 |
JSP 22 - 쇼핑몰 만들기(8) (예외 처리 하기) (0) | 2023.01.13 |
JSP 21 - 예외 처리(Exception) (1) | 2023.01.13 |
Comments