각진 세상에 둥근 춤을 추자

[JSP] Eclipse - Servlet7: Servlet Filter 본문

JSP

[JSP] Eclipse - Servlet7: Servlet Filter

circle.j 2022. 10. 24. 10:01

 

 

 

(이전 게시글)

2022.10.23 - [JSP] - [JSP] Eclipse - Servlet6: 사용자 입력을 통한 POST 요청

 

[JSP] Eclipse - Servlet6: 사용자 입력을 통한 POST 요청

(이전 게시글) 2022.10.23 - [JSP] - [JSP] Eclipse - Servlet5: 사용자 입력을 통한 GET 요청 [JSP] Eclipse - Servlet5: 사용자 입력을 통한 GET 요청 (이전 게시글) 2022.10.23 - [JSP] - [JSP] GET 요청과 쿼..

this-circle-jeong.tistory.com

 

request.setCharacterEncoding("UTF-8");

서블릿에 다음과 같은 설정 방식을 계속 추가하게 되면 아래 그림과 같은 상황이 된다. 

 

 

 

서블릿 필터를 사용하면 요청과 응답 사이에 필터 실행 후 Servlet의 실행 여부를 결정한다. 

 

 


서블릿 필터 생성하기

 

(1) 패키지 생성 (com.circle.web.filter) - 클래스 생성 (CharacterEncodingFilter) 

 

 

 

(2) 인터페이스 추가: [Add] - [Filter - javax.servlet...] 추가 - [Finish]

 

 

 

(CharacterEncodingFilter.java)

서블릿 필터에 간단한 "Hello Filter" 출력문을 작성해 본다. 

package com.circle.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, 
						ServletResponse response, 
						FilterChain chain)
			throws IOException, ServletException {
		
		System.out.println("Hello Filter");
		
	}

}

 


서블릿 필터 설정하기

 

(1) [web.xml] 

 

(2) 입력한 url 매핑에 맞게 해당 서블릿 필터를 설정한다. 

// 필터명 
<filter-name>characterEncodingFilter</filter-name>
// 패키지명.클래스명
<filter-class>com.circle.web.filter.CharacterEncodingFilter</filter-class>
// 모든 url에 대해 동작 요청
<url-pattern>/*</url-pattern>
	
  	<filter>
  		<filter-name>characterEncodingFilter</filter-name>
  		<filter-class>com.circle.web.filter.CharacterEncodingFilter</filter-class>
  	</filter>
 	<filter-mapping>
 		<filter-name>characterEncodingFilter</filter-name>
 		<url-pattern>/*</url-pattern>
 	</filter-mapping>

 

 

(3) NoticeReg.java를 실행하면 다음과 같은 빈 화면이 뜬다.

     그리고 서블릿 필터에 작성했던 출력문이 콘솔에 출력되었다.

 

 

(4) CharacterEncodingFilter.java에 한글 깨짐 방지 코드를 입력한다.

package com.circle.web.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class CharacterEncodingFilter implements Filter {

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		
		// 한글 깨짐 해결: 입력받는 값을 utf-8로 읽어라
		request.setCharacterEncoding("UTF-8");
		
		// NoticeReg로 흐름을 넘기고 받음
		chain.doFilter(request, response);

	}

}

 

(5) 입력 폼이 있는 reg.html을 실행한다.

서블릿에 일일이 인코딩 작업을 해 주지 않고 서블릿 필터를 이용해 한 번에 인코딩 작업을 해 줄 수 있다. 

 

 

(6) Filter를 Annotation 방식으로 변경하기 

2022.10.23 - [JSP] - [JSP] Eclipse - Servlet2: Annotation URL 매핑

 

[JSP] Eclipse - Servlet2: Annotation URL 매핑

[이전 게시글] 2022.10.23 - [JSP] - [JSP] Eclipse - Servlet 1: 프로그램 [JSP] Eclipse - Servlet 1: 프로그램 1. 프로젝트 폴더 만들기 앞으로 서블릿에 대해 공부할 프로젝트용 폴더를 생성한다. (1) 왼쪽 [..

this-circle-jeong.tistory.com

 

web.xml에 설정을 계속 추가하는 것보다는 Annotatioon을 이용해 매핑하는 것이 효과적이다.

기존에 web.xml에 설정했던 필터 코드를 주석 처리한다. 

 

 

CharacterEncodingFilter.java에서 Annotation을 이용해 매핑 정보를 작성한다.

@WebFilter("/*")

 

(7) reg.html 재실행해도 같은 결과를 출력할 수 있다.