[프로젝트] Interceptor
여러명이 동시에 접속할 수 있게 처리해주는 것을 서버라고 함
1. 기본 프로젝트 생성
톰캣 서버에 프로젝트 등록시킨 후 root를 /로 설정
서버를 debug로 구동시킨 후 접속
controller에 대한 설정
pom.xml에서 controller를 설정할 수 있다.
e-gov에서 dependency를 알아서 잡아준다
pom.xml
<!-- 서블릿 벤더사에서 제공하는 서블릿을 참조하겠다는 설정 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<!-- 예) tomcat 서블릿을 사용하지만 servlet-api 라이브러리를 참조해서 개발을 하겠다는 설정 -->
<scope>provided</scope><!-- provided : 벤더사 제품을 쓰겠다는 설정 -->
<!-- <scope>test</scope> // 테스트를 위하여 라이브러리를 참조함-->
<!-- scope 설정이 system일 경우 systemPath 설정에 라이브러리가 위치한 경로 또한 같이 넣어주어야 함. -->
<!--
<scope>system</scope>
<systemPath>c://~~</systemPath>
-->
<!-- compile, runtime 메이븐 빌드 배포시 설정된 라이브러리를 같이 배포함-->
<!-- <scope>compile</scope> ,
<scope>runtime</scope> -->
</dependency>
web.xml 설정
web.xml
<!-- 스프링 프레임워크 서버사이드에서 처리되는 녀석 service, dao, mapper, resources... 등을 처리 -->
<!-- AOP 처리 가능 (인터셉터 처리 안됨) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:egovframework/spring/context-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 스프링 프레임워크 클라이언트 사이드 영역을 처리해주는 녀석 controller 전담 -->
<!-- 인터셉터, AOP 처리가 가능(Controller단에서는 AOP를 거의 사용하지 않음) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
dispacher는 controller만 스캔
dispacher-servlet.xml
package 설정
<!-- Controller만 스캔이 되도록 설정 -->
<!-- 컴퍼넌트 스캔 패키지 설정 : egovframwork와 kr.or.ddit 스캔하겠다. -->
<context:component-scan base-package="egovframework, kr.or.ddit">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
p:viewClass="org.springframework.web.servlet.view.JstlView"
p:prefix="/WEB-INF/view/" p:suffix=".jsp"/>
testController
package kr.or.ddit;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping(value = {"/test"})
public class TestController {
@RequestMapping(value = {"test.do", "test"})//test.do나 test로 요청이 들어올 때 Mapping
public String getTestPage() throws Exception{
// dispacher-servlet.xml 파일 안에 설정된
// <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
// p:viewClass="org.springframework.web.servlet.view.JstlView"
// p:prefix="/WEB-INF/view/" p:suffix=".jsp"/> 설정 확인 필요
return "testFront";
}
}
web.xml을 변경
web.xml
<!-- 스프링 프레임워크 서버사이드에서 처리되는 녀석 service, dao, mapper, resources... 등을 처리 -->
<!-- AOP 처리 가능 (인터셉터 처리 안됨) -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:egovframework/spring/context-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 스프링 프레임워크 클라이언트 사이드 영역을 처리해주는 녀석 controller 전담 -->
<!-- 인터셉터, AOP 처리가 가능(Controller단에서는 AOP를 거의 사용하지 않음) -->
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/dispatcher-*-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
Interceptor 만들기
Interceptor는 HandlerInterceptorAdapter만 기억하기
이렇게 interceptor를 만들면 끝
postHandler와 preHandler 만들기
Testinterceptor.java
package kr.or.ddit.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 Testinterce extends HandlerInterceptorAdapter {
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle 실행되었습니다");
super.postHandle(request, response, handler, modelAndView);
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// TODO Auto-generated method stub
System.out.println("preHandle 실행되었습니다");
return super.preHandle(request, response, handler);
}
}
url에 해당하는 페이지 접속 시 interceptor 실행
Interceptor 사용할 때 :
공통코드를 interceptor로 모든 페이지에 공통코드가 들어가도록 처리
모든 페이지에 공통으로 들어가는 코드를 interceptor에 저장
Author And Source
이 문제에 관하여([프로젝트] Interceptor), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@gksmf6699/프로젝트-Interceptor저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)