Servlet & JSP 기초 - 2
오류 페이지
- <error-page> 요소를 이용하면 다음과 같은 상황에서 특정 페이지가 출력되도록 제어할 수 있음
- 에러 (Uncaught Exceptions) : <exception-type>으로 정의
- 특정 HTTP 상태 코드가 발생했을 때 : <error-code>로 정의
- <error-page> 요소는 <servlet>과 <servlet-mapping> 요소 다음에 위치해야 함
- 오류 페이지의 위치는 <location> 요소를 이용하여 지정한다
Filter
클라이언트가 서블릿에 요청하거나 응답할 때, 미리 요청이나 응답에 관련된 여러 작업을 수행하는 기능
- 여러 서블릿에서 반복적으로 처리해야 하는 작업들을 필터에서 처리
- 예) 유니코드 인코딩
필터의 생성
필터는 javax.servlet 패키지의 Filter 인터페이스를 구현하여 만듦
- 필터 역시 생명 주기를 가지고 있다
- init : 필터 생성시 컨테이너에 의해 호출되어 초기화 작업을 수행
- doFilter : 요청/응답시 컨테이너에 의해 호출되어 기능을 수행
- destroy : 필터 소멸시 컨테이너에 의해 호출되어 종료 작업을 수행
public class EncodingFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
req.setCharacterEncoding("UTF-8");
//...
}
}
필터의 설정
필터를 사용하기 위해서는 WEB-INF > web.xml에 설정
- 필터는 특정 URL Pattern에 대응하는 서블릿 요청/응답 처리의 앞뒤에서 추가된 기능을 수행하므로 설정 위치는 servlet 설정 이전에 마무리 되어야 한다.
- url-pattern에 /* 를 설정하면 동일 컨텍스트 내 모든 서블릿 URL 요청에 같은 필터를 적용할 수 있다
<!-- 필더 설정은 서블릿 세팅 이전에 -->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.bit.filter.EncodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
[필터 적용 실습]
- 현재 작성된 HelloWorld 응용프로그램의 doGet, doPost에서 Encoding 관련 설정 기능을
별도의 Filter 클래스로 작성합니다. 필터 클래스의 이름은 EncodingFilter로 합니다.
- 작성된 필터를 모든 서블릿 요청에 대응할 수 있도록 web.xml에 설정해 봅니다.
1. encoding 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 EncodingFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("Encoding Filter::init");
// Filter.super.init(filterConfig);
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
System.out.println("ENCODING FILTER::dochain start");
// 요청과 응답에 필터 적용
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");
// 다음 연결된 필터로 요청과 응답 전달
chain.doFilter(req, resp);
System.out.println("EncodingFilter::doChain End");
}
@Override
public void destroy() {
System.out.println("Encoding Filter :: Destroy");
Filter.super.destroy();
}
}
2. web.xml 설정
<!-- filter 등록-->
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>EncodingFilter</filter-class>
</filter>
<!--filter mapping -->
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<!-- */ 모든 URL에 매핑-->
<url-pattern>/*</url-pattern>
</filter-mapping>
-- 서블릿 매핑 정보 등록 전에 삽입 할 것.
'Web Programming' 카테고리의 다른 글
JSP 프로그래밍 연습 (0) | 2021.08.13 |
---|---|
JSP 태그 (0) | 2021.08.13 |
Servlet & JSP 기초 (0) | 2021.08.12 |
웹 프로그래밍 - 동적 웹 페이지 (2) | 2021.08.12 |
JAVA WEB 개발 환경 구축 및 첫 HTML (0) | 2021.08.11 |