야나도 프로젝트

나도 개발자 될수있어

Web Programming

Servlet & JSP 기초 - 2

jmeen 2021. 8. 13. 10:48
728x90

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