개요
- 프로그램이 처리되는 동안 특정한 문제가 발생했을 때 처리를 중단하고 다른 처리를 하는 것
- 기본 오류 페이지의 경우 디렉토리 구조, 버전 등 정보가 나타나 있기 때문에 웹 보안이 취약하여 쉽게 해킹 당할 수 있음. 이런 정보의 노출을 최소화 하여 해킹의 위험을 낮추는 것
error 속성 (디렉티브 태그)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page errorPage="error.jsp" %>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page isErrorPage="true" %>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<p>오류가 발생하였습니다.</p>
<p>예외 유형 : <%=exception.getClass().getName() %>
<p>오류 메시지: <%=exception.getMessage() %>
</body>
</html>
- exception 내장 객체를 통해서 오류 메시지를 받아 오는 것이 가능
- 예외처리 방법
- web.xml 파일의 error 속성에서 오류 유형에 오류 페이지 URL 설정
- 스크립틀린 태그의 자바 소스를 통한 예외 처리 try-catch-finally 구문
필터
import java.io.IOException;
import java.io.PrintWriter;
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 InitParamFilter implements Filter {
private FilterConfig filterConfig = null;
@Override
public void destroy() {
Filter.super.destroy();
}
@Override // 필터 초기화 메소드, 아이디와 비밀번호 정보가 들어감
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws IOException, ServletException {
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
String message;
response.setCharacterEncoding("utf-8");
response.setContentType("text/html; charset=utf-8");
String param1 = filterConfig.getInitParameter("param1");
String param2 = filterConfig.getInitParameter("param2");
PrintWriter writer = response.getWriter();
if (id.equals(param1) && passwd.equals(param2)) {
message = "로그인 성공";
} else {
message = "로그인 실패";
}
writer.println(message);
filterChain.doFilter(request, response);
}
}
- 클라이언트와 서버 사이 request와 response 객체를 먼저 받아 사전/사후 작업 등 공통적으로 필요한 부분 처리
- 정적 리소스에서 클라이언트로 응답하기 전 필요한 전처리를 가능하게 함