Christmas Pikachu doFilter 예시
개발일지/JSP

doFilter 예시

ZI_CO 2024. 1. 18.

 

package controller;

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;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

/**
 * Servlet Filter implementation class EncFilter
 */
@WebFilter({ "*.do", "*.jsp" })
public class EncFilter extends HttpFilter implements Filter {

	public EncFilter() {
		super();
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 다음 필터가 존재한다면, 그곳으로 이동해라
		// 더이상 수행할 필터가 없다면 원래 수행하던 요처으로 돌아가라
		if (request.getCharacterEncoding() == null) {
			request.setCharacterEncoding("UTF-8");
		}
		System.out.println("필터 서블릿 클래스에서 작성한 로그");
		chain.doFilter(request, response);
	}

	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

 

 

 

 

 

 

package controller;

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;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpFilter;

@WebFilter({ "*.do", "*.jsp" })
public class EncFilter extends HttpFilter implements Filter {

	// 로직에 최대한 수정하지 않도록
	private String encoding;// 로직부분에 하드코딩을 없애기 위해 존재하는 멤버 변수
	
	public EncFilter() {
		super();
	}

	public void destroy() {
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 다음 필터가 존재한다면, 그곳으로 이동해라
		// 더이상 수행할 필터가 없다면 원래 수행하던 요처으로 돌아가라
		if (request.getCharacterEncoding() == null) {
			request.setCharacterEncoding(encoding); 
			// 로직 부분에 어떠한 값이 다이렉트로 적혀있다면 == 하드코딩 : 유지보수 용이성을 망가뜨리는 주범....
		}
		System.out.println("필터 서블릿 클래스에서 작성한 로그");
		chain.doFilter(request, response);
	}

	public void init(FilterConfig fConfig) throws ServletException {
		// 최초에 단한번 실행 되는 메소드 : 유사 생성자 ->  해당 클래스의 인스턴스를 생성하고 초기화하는 역할
		this.encoding = "UTF-8";
	}

}

 

 

 

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

 

<context-param>

<param-name>encoding</param-name>

<param-value>UTF-8</param-value>

</context-param>

 

</web-app>

 

 

 

하드코딩을 제거한 Filter에 인코딩된 로직 코드

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
   
   <context-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
   </context-param>
   
</web-app>

 

'개발일지 > JSP' 카테고리의 다른 글

에러페이지 설정하기  (0) 2024.01.29
JSTL 사용법  (0) 2024.01.27
커스텀 태그  (0) 2024.01.17
상세페이지 데이터 가져오기  (1) 2024.01.08
JSP - 내장객체  (1) 2024.01.08

댓글