[jsp, servlet] Servlet Filter / 한글 깨짐 설정 / setCharacterEncoding()

seulki·2022년 10월 5일
0

jsp

목록 보기
6/51
post-thumbnail
post-custom-banner

🎈Filter란?

클라이언트로부터 요청이 백엔드로 가기 전에 가로채기 위해서와,
서버로부터의 응답이 클라이언트로 보내지기 전에 조작하기 위해서 사용한다.



🎈Filter 패키지 생성하기

  • 프로젝트안에 java 폴더안에 서블릿을 위한 패키지가 생성되어있다.

  • 이 패키지 안에 Filter 클래스를 담을 패키지를 만들어 준다.

  • 이름만 봐도 기능을 알 수 있도록, 이름을 지어준다. Filter 패키지를 생성한 후, class 파일을 생성했다.

  • 인터페이스 Filter를 implements 하고 doFilter 메소드를 오버라이드 해준다.

  • @WebFilter() 어노테이션으로 파일을 연결 해 준다.

  • @WebFilter("/regit") 이렇게 파일마다 만들어야 한다면 복잡할 것이다.
    그래서 @WebFilter("/*") 로 적어주면 모든 파일에 적용할 수 있다.

  • 하지만 이렇게 하면 CSS와 충동일 발생할 수 있다.

  • Hello Filter! 라는 문장을 출력하도록 실행시켜보면, 사이트 화면에는 아무것도 출력이 되지 않고, console창에만 문구가 출력이 된다.

  • 이것은 filter 가 요청은 되었지만 넘겨지지 않고 Hold 하고있는 상태라는 것을 의미한다. 다음 작업으로 진행하려면 세번째 파라미터인 arg2로
    arg2.doFilter(arg0, arg1);
    을 해줘야 한다.

  • 요청이 넘어갔는지 확인하기 위한 문구를 출력하고 doFilter를 넣어주면
    화면에 정상적으로 넘어가는 것을 볼 수 있다.



  • 만약 조건에 따라 다음 작업 진행 여부를 결정해야 한다면
    filterChain 으로 정할 수 있다.


🎈전체 코드

rag.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="regit" method="post">
		<div>
			<label>제목 : </label>
			<input type="text" name="title">
		</div>
		<div>
			<label>내용 : </label>
			<textarea name="content"></textarea>
		</div>
		<div>
			<input type="submit" value="출력">
		</div>
	</form>
</body>
</html>

CharacterEncodingFilter.java

package com.koit.web.servlet.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;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*")
public class CharacterEncodingFilter implements Filter{

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		
		arg0.setCharacterEncoding("utf-8");
		arg1.setCharacterEncoding("utf-8");
		arg1.setContentType("text/html; charset=utf-8");
		
		arg2.doFilter(arg0, arg1);
profile
웹 개발자 공부 중
post-custom-banner

0개의 댓글