머리말
인터셉터 시스템은 Struts2 프레임 워크의 중요한 부분입니다. 인터셉터 시스템이 없으면 사용하기 쉬운 struts2 프레임 워크가 없을 것이라고 말하는 것은 과장이 아닙니다. Struts2 프레임 워크에서 많은 수의 인터셉터가 많은 기본 기능을 완료했습니다. 예를 들어, Params 인터셉터는 HTTP 요청의 매개 변수를 구문 분석하고 동작 속성을 설정해야합니다. Servlet-Config Interceptor는 HTTPServletrequest 인스턴스와 HTTPServletResponse 인스턴스를 HTTP 요청에 직접 전달합니다. FileUpload 인터셉터는 요청 매개 변수에서 파일 도메인을 구문 분석하고 동작의 세 가지 속성으로 파일 도메인을 설정해야합니다.이 모든 것은 내장 인터셉터에 의해 수행됩니다. 따라서 Struts2에서 인터셉터를 사용하는 원리와 방법을 마스터하면 Struts2 프레임 워크의 "생명선"을 파악할 수 있습니다.
그러나 지금까지 Web.xml에서 strutsprepareandexecutefilter 필터를 구성하는 것 외에도 아직 다른 인터셉터에 연락하지 않았습니다. 그렇다면 왜 우리의 응용 프로그램이 잘 실행될 수 있습니까? 실제로 Struts2는 기본적으로 많은 수의 공통 인터셉터를 가능하게했습니다. 이 인터셉터는 액션으로 구성된 패키지가 Struts-Default 패키지를 상속하는 한 작동합니다. Struts2의 내장 인터셉터를 살펴 보겠습니다.
struts2 내장 인터셉터
Struts2 프레임 워크에는 많은 내장 인터셉터가 있습니다. 이 인터셉터는 구문 분석 요청 매개 변수, 행동 속성에 요청 매개 변수를 할당하는 등 Struts2 프레임 워크의 작업의 70%를 거의 완료합니다. struts2 함수를 확장 해야하는 경우 해당 인터셉터 만 제공하고 struts2 컨테이너에서만 구성하면됩니다.
이 내장 인터셉터는 struts-default.xml 파일에서 이름 클래스 쌍의 형태로 구성됩니다. 여기서 이름은 인터셉터의 이름이며 나중에 사용할 인터셉터의 고유 식별자입니다. 클래스는 인터셉터의 구현 클래스를 지정합니다. 이러한 내장 인터셉터에 대한 자세한 설명은 공식 문서를 참조하십시오.
인터셉터를 구성하십시오
struts.xml 파일에서 인터셉터를 정의하려면 인터셉터 클래스의 인터셉터 이름을 지정하면 인터셉터 정의가 완료됩니다. <인터셉터 .../>을 사용하여 인터셉터를 정의하십시오.
<!-인터셉터 이름과 인터셉터 구현 클래스를 지정하여 인터셉터를 정의합니다-> <인터셉터 이름 = "인터셉터 이름"> <param name = "param name"> param value </param> </interceptor>
또한 여러 인터셉터가 함께 연결되어 인터셉터 스택을 형성 할 수 있으며 <인터셉터 리프 .../>는 인터셉터에 사용됩니다. 예를 들어:
<인터셉터-스택 이름 = "인터셉터 스택 one"> <interceptor-ref name = "interceptor one"/> <interceptor-ref name = "interceptor two"/> ... </interceptor-stack>
프로그램 구조의 관점에서, 인터셉터 스택은 다중 인터셉터로 구성됩니다. 그러나 프로그램 기능의 관점에서, 인터셉터 스택 및 인터셉터는 동일하며, 이들이 포함 된 방법은 동작 실행 메소드를 실행하기 전에 자동으로 실행됩니다. 따라서 인터셉터 스택을 더 큰 인터셉터로 완전히 처리 할 수 있습니다.
인터셉터 스택과 인터셉터가 일관되기 때문에 인터셉터 스택에는 인터셉터 스택도 포함 할 수도 있습니다.
<인터셉터-스택 이름 = "인터셉터 스택 2"> <인터셉터-리프 이름 = "modelDriven"/> <인터셉터-리프 이름 = "인터셉터 스택 1"/> </interceptor-stack>
인터셉터 사용
인터셉터 스택 및 인터셉터가 정의되면이 인터셉터 스택 또는 인터셉터를 사용하여 동작을 가로 채기 위해 사용할 수 있습니다. 회의가 실행되기 전에 인터셉터의 가로 채기 동작이 실행됩니다.
<Interceptor-Ref .../> 요소를 사용하면 작업에서 인터셉터를 사용하는 구성 구문은 인터셉터 스택을 구성 할 때 인터셉터를 참조하는 구문과 정확히 동일합니다. 예를 들어:
<action name = "login"> <result name = "error">/error.jsp </result> <result name = "success">/welcome.jsp> <!-인터셉터 스택-> <interceptor-ref name = "defaultStack"/> <!-interceptor-ref name = "test1"/> <!-interceptor-ref name = "> 이름 = "키"> 동적 매개 변수 </param> </interceptor-ref> </action>
이 구성이 완료되면 다운로드가 실행되기 전에이 3 개의 인터셉터가 작동합니다.
기본 인터셉터를 구성하십시오
패키지를 구성 할 때는 기본 인터셉터로 지정할 수 있습니다. 패키지에 기본 인터셉터가 지정되면 해당 패키지의 동작이 인터셉터를 명시 적으로 지정하지 않으면 기본 인터셉터가 작동합니다. 그러나 패키지의 동작에 인터셉터를 명시 적으로 적용하면 기본 인터셉터가 작동하지 않습니다. 동작에 기본 인터셉터를 사용해야하는 경우 인터셉터에 대한 참조를 수동으로 구성해야합니다.
동작이 위치한 패키지의 기본 인터셉터는 작업에 명시 적으로 적용되지 않은 경우에만 적용됩니다.
<package .../> 요소의 자식으로 사용되는 <default-interceptor-Ref .../> 요소를 사용하도록 기본 인터셉터를 구성 하고이 패키지의 모든 동작에 대한 기본 인터셉터를 구성하십시오. 예를 들어:
<default-Interceptor-Ref name = "기본 인터셉터"/>
예를 들어 기본 인터셉터의 매개 변수를 지정할 수도 있습니다.
<default-Interceptor-Ref name = "기본 인터셉터"> <param name = "parameter name"> parameter value </paramer </default-interceptor-Ref>
struts-default.xml 파일에서 struts-default라는 추상 패키지가 구성되어 있으며 DefaultStack이라는 기본 인터셉터 참조가 정의됩니다. 패키지가 Struts-Default 패키지를 상속 받으면 기본 인터셉터 스택 : DefaultStack도 상속합니다. 즉, interceptor를 ACTION에 명시 적으로 적용하지 않으면 DefaultStack 인터셉터 스택이 자동으로 적용됩니다.
사용자 정의 인터셉터
1>. Abstractinterceptor 클래스를 상속하기 위해 클래스 추가하거나 인터셉터 인터페이스를 구현하십시오.
공개 클래스 Timeinterceptor 확장 추상 인터셉터 {/*** 인터셉트의 핵심 메소드의 리턴 값은 문자열*/@atriadepublic 문자열 인터셉트 (ActionInvocation invocation) 예외 {// todo 자동 조성 메소드 "로그인";}}을 던집니다.2>. interceptors child node 추가 struts.xml 패키지 및 그 아래에 인터셉터 노드를 추가하십시오.
<패키지 이름 = "goods"네임 스페이스 = "/goods"확장 = "common-pkg"> <interceptors> <interceptor name = "timeinterceptor"> </interceptor> </interceptors> </package>
3>. Aadd Child Node interceptor-Ref가 동작 노드 아래에 있습니다.
<action name = "list_category"method = "list"> <interceptor-ref name = "timeinterceptor"> </interceptor-ref> <결과 이름 = "list"type = "dispatcher">/pages/category/list.jsp </action> </action>
요약
이 기사는 Stuts2의 핵심 - 인터셉터에 대한 예비 요약을 제공합니다. 다음 기사에서는 자체 인터셉터를 구현 하고이 기사에 요약 된 지식 포인트를 적용합니다.
좋아, 위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.