본문 바로가기
IT

JAVA -Interceptor를 이용한 controller 가로채기

by 천상별 2023. 2. 20.

 

Interceptor을 사용해서 중간에 url을 가로채 작업을 수행하자!

 

Controller에서 Handler에 도달하기전에 Interceptor에서 Request를 가로채 추가적인 작업을 수행한 후 Handler로 보내는 역할이 Interceptor이다.

 

 

Interceptor을 사용하기 위해서는 servlet.xml에 interceptor에서 가로챌 주소와 interceptor의 패키지 주소를 등록하여 인식할 수 있는 bean으로 설정한다.

 

Intercetor를 사용하기 위해 HandlerInterceptor 또는 HandlerInterceptorAdaptor 클래스를 사용한다.

 

-HandlerInterceptor 클래스

-preHandle() : controller로 보내기전에 처리하는 인터셉터, return 값이 false라면 controller로 요청을 안한다. 매개변수로 오는 Object는 핸들러의 정보를 의미한다.

 

-postHandle() : controller의 handler가 끝나면 실행된다.

 

-afterCompletion() : view 까지 처리 된 후에 실행된다.

 

 

-HandlerInterceptorAdaptor 클래스

 

postHandle() 와 afterCompletion() 메서드는 이미 구현되어 있으므로 필요한 메서드만 구현하면 된다.

 

 

 

ex) : “/iwant/go/home” url을 처리할때 controller를 거치지 않고 바로 interceptor의 preHandle()에서 주소를 가로채와 메서드가 실행이 된다.

 

 

 

-서버가 웹브라우저로부터 Servlet요청을 받을때

 

-전달 받은 정보를 HttpServletRequest에 객체를 생성하여 저장, 웹브라우저에게 응답을 돌려줄 HttpServletResponse를 생성(빈 객체),두 객체를 Servlet에게 전달

 

 

-HttpServletRequest(요청)

-클라이언트로부터 서버로 요청이 들어오면 서버에서는 HttpServletRequest를 생성하며, 요청정보에 있는 패스로 매핑된 서블릿에게 내용을 전달한다. 한마디로 데이터를 URL로 요청해서 보냈을때 HttpServletRequest 객체 안에 모든 데이터들이 들어가게 된다. 데이터를 지정해서 꺼낼때는 getParameter()를 이용하여 값을 꺼낼 수 있다.

 

ex) : “main/list.do?value=yes”라는 url로 요청을 보내고 String value = request.getParameter(“value”) 를 하면 value 에 “yes”가 담긴다. 이를 model에 담아 JSTL로 뿌릴수 있다.

 

-HttpServletResponse(응답)

-요청에 응답하기 위한 기능을 처리하기 위한 출력스트림 추출, 버퍼 크기 설정, 응답할 내용의 타입과 문자셋을 설정하는 등의 작업가능. 클라이언트에게 어떻게 응답해줄지 content-type을 정한다. 한마디로 응답방식