[프로젝트] 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에 저장

좋은 웹페이지 즐겨찾기