- 브라우저 요청 시 요청 메서드 호출 전후에 개발자가 원하는 기능을 수행
- 필터와 기능이 유사, 필터보다 더 자유롭게 위치 변경 가능
- 쿠키(Cookie) 제어, 파일 업로드 등의 작업 수행
method | function |
preHandle() | 컨트롤러 실행 전 호출 |
postHandle() | 컨트롤러 실행 후, DispatcherServlet이 뷰로 보내기 전 호출 |
afterCompletion() | 뷰까지 수행하고 호출 |
인터셉터를 사용해 요청명에서 뷰 이름 얻기 실습 #1
회원관리, 게시판 관리 프로젝트에 적용해서 사용하면 된다.
( member 패키지 하위에 interceptor 패키지를 만든 후 ViewNameInterceptor 클래스를 작성)
인터셉터를 사용해 요청명에서 뷰 이름 얻기
package com.spring.promvn03.common.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
public class ViewNameInterceptor extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
try {
String viewName = getViewName(request);
request.setAttribute("viewName", viewName);
} catch(Exception e) {
e.printStackTrace();
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
private String getViewName(HttpServletRequest request) throws Exception {
String contextPath = request.getContextPath();
String uri = (String) request.getAttribute("javax.servlet.include.request_uri");
if(uri == null || uri.trim().equals("")) {
uri = request.getRequestURI();
}
int begin = 0;
if(!((contextPath==null)||("".equals(contextPath)))) {
begin = contextPath.length();
}
int end;
if(uri.indexOf(";")!=-1) {
end = uri.indexOf(";");
} else if(uri.indexOf("?")!=-1) {
end = uri.indexOf("?");
} else {
end = uri.length();
}
String fileName = uri.substring(begin, end);
if(fileName.indexOf(".")!=-1) {
fileName = fileName.substring(0, fileName.lastIndexOf("."));
}
if(fileName.lastIndexOf("/")!=-1) {
fileName = fileName.substring(fileName.lastIndexOf("/", 1), fileName.length());
}
return fileName;
}
}
ViewNameInterceptor.java
인터셉터 수행 시 preHandle() 메소드로 전달된 request에서 추가한 getViewName() 메서드를 이용해
뷰 이름을 가져온 후, request에 바인딩
getViewName() : 요청명에서 뷰 이름 반환
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xsi:schemaLocation="http://www.springframework.org/schema/mvc
https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/mvc" >
...
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/*/*.do" />
<beans:bean class="com.spring.promvn05.common.interceptor.ViewNameInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
</beans:beans>
servlet-context.xml
'Spring' 카테고리의 다른 글
Spring #12 : 이메일 기능 (230131) (0) | 2023.01.31 |
---|---|
Spring #11 : 다중 파일 업로드 (230127) (0) | 2023.01.27 |
Spring #9 : 메이븐과 스프링 STS (230125) (0) | 2023.01.25 |
Spring #8 : 스프링 트랜잭션(230120) (0) | 2023.01.20 |
Spring #7 : 스프링-마이바티스 연동(추가)(230120) (0) | 2023.01.20 |
댓글