필터 실습

김성환·2022년 7월 5일
0

실습

목록 보기
3/6

인코딩,HTML 인코딩 실습

해당 실습은 한글 인코딩과 html에 적용될 한글 인코딩에 대한 실습이다.
기존의 경우를 살펴보자

필터를 적용하지 않을 때의 결과

아래의 입력창에 한글을 입력하여 보낼 경우

아래와 같은 결과를 받을 수 있다.

문제 해결 방법(서블릿 이용)

해당 문제는 서블릿에 인코딩에 관한 코드를 집어 넣으면 해결할 수 있다.

@WebServlet("/first")
public class FirstServlet extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// TODO Auto-generated method stub
		req.setCharacterEncoding("UTF-8");
		resp.setContentType("text/html; charset=utf-8");
		String name = req.getParameter("name");
		String age = req.getParameter("age");
		String sex = req.getParameter("sex");
		String[] hobby = req.getParameterValues("hobby");
		ServletDto dto = new ServletDto(name,age,sex,hobby);
		req.setAttribute("person", dto);// 데이터 저장(데이터 이동시 사용)(데이터는 object로 저장)
		RequestDispatcher rd = req.getRequestDispatcher("second");
		rd.forward(req, resp);
	}
}

위 코드를 간단히 살펴보면, 서블릿을 등록하기 위해 @WebServlet을 이용하였으며, get메서드에 대한 처리를 위해 doGet메서드를 오버라이드 하였다.
그 메서드 안에
req.setCharacterEncoding("UTF-8");(한글인코딩)
resp.setContentType("text/html; charset=utf-8");(html에 적용할 한글인코딩)
을 넣어 한글 인코딩에 대한 문제를 해결할 수 있다.
아래는 결과이다.

문제점

서블릿을 사용할 경우 모든 서블릿에 대해 해당 코드(인코딩에 관련된)를 집어넣어야 한다는 문제가 발생한다.
이를 해결하기 위해서 필터를 만들어 문제를 해결해보자

문제 해결 방법(필터)

필터를 사용할 경우 각 서블릿에 대한 코드를 작성하지 않아도 된다.

@WebFilter("/*")
public class FirstFilter implements Filter{
	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		Filter.super.init(filterConfig);
	}
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html; charset=utf-8");
		chain.doFilter(request, response);
	}
}

위 코드는 필터 클래스를 작성한 코드로, web.xml을 사용하지 않고 @WebFilter를 사용하여 필터를 등록한 코드이다.
필터도 서블릿와 비슷하게 init(),dofilter(),destory()메서드를 오버라이드 하여 사용할 수 있다.
위의 FirstFilter의 경우 모든 url에 대한 요청,응답의 인코딩을 해주는 필터이다.

profile
개발자가 되고 싶다

0개의 댓글