본문 바로가기
java spring/servlet&jsp

서블릿 2 (post, 필터)

by 킹차니 2021. 3. 30.

post요청을 받아서 처리해보자.

요청을 post로 해서 쿼리스트링으로 날라가지 않게 했다. 앞에서 cnt를 쿼리스트링으로 날리는 것에는 무리가 있다.

왜냐하면 쿼리스트링은 길이 제한이 있다.

내용을 입력하고 여기서 이제 등록을 누르면  서블릿에 매핑된 주소 notice-reg로 데이터를 날린다.

notice-reg 서블릿은 여기 NoticeReg에 매핑되어 있다. 근데 여기서 주의해야할 것이 

저기 별표친 request.setCharacterEncoding("UTF-8"); 에서 보이는 것처럼 요청을 할때 utf-8의 인코딩 방식으로 들어오게 해줘야 한다.

저게 없으면 한글은 깨질 것이다. (원래 톰캣의 인코딩은 ISO 8859-1인데 이를 톰캣 설정을 바꿀수도 있지만 이는 추천하지 않는 방법.)

그럼 결과를 보자.

 

 

웨어서 우리는 인코딩 설정을 위해 다음과 같은 코드가 필요했다.

request.setCharacterEncoding("UTF-8");

근데 사실 필터라는 것을 설정하면 위의 코드는 없어도 된다. 필터는 요청이 서블릿으로 들어오기 전에 처리기능을 가지고 있다.

또한 서블릿에 왔다가 응답으로 나가는 친구한테도 필터에서 설정이 가능하다. 

 

다음과 같은 과정을 거친다. (보는 강의(유튜브 뉴렉처님) 피피티 보고 따라 그려봤다.)

 

즉 필터에서 인코딩 설정을 해준다면? 모든 서블릿마다 request.setCharacterEncoding("UTF-8")와 같은 코드를 작성해주지 않아도 되는 것이다. 이제 필터를 만들고 설정하는 법을 보자.

 

우선 filter용 패키지, 클래스를 만든다. 클래스는 Filter인터페이스를 상속하여 만든다.

filter클래스

위에서 doFilter의 인자로 chain이 있는데 얘가 중요하다. 얘가 필터를 들어온 후의 설정을 할 수 있다. 

필터 설정 전에  request.setCharacterEncoding("UTF-8");가 있는데 필터로 들어오기 전에! 요청에 대한 인코딩 설정을 하게 하는 것이다.

이제 필터 클래스를 만들었다면 다음 설정을 해줘야하는데, 두가지 방법이 있다.

web.xml을 이용하는 법. 어노테이션을 이용하는 법 

물론 어노테이션을 사용할 것이지만 web.xml로 설정하는 법도 보는게 좋을 것같다.

 

1. web.xml을 사용하는 방법

web.xml

위의 코드를 추가한다. 그렇게되면 네임에 설정된 모든 url(/*)에 대하여 필터가 작동할 것이다.

하지만 이는 여간 귀찮다.

 

2. 어노테이션 방법을 보자.

어노테이션 방법은 간단하게 우리가 만든 필터 클래스에 어노테이션 하나를 추가하면 된다.

 

@WebFilter("/*") 만 쓰면 끝!

 

그럼 이제  NoticeReg서블릿의 요청 인코딩명령을 주석처리 하고 실행해보겠다. 

 

잘 작동하는 것을 볼 수 있다.

'java spring > servlet&jsp' 카테고리의 다른 글

서블릿, jsp 6  (0) 2021.04.03
서블릿 5( 동적 페이지의 필요성)  (0) 2021.04.01
서블릿4(application, session, cookie)  (0) 2021.04.01
서블릿3(여러 개의 버튼 post보내기)  (0) 2021.03.31
서블릿 1  (0) 2021.03.30