이 기사는 SpringMVC에서 전달 리디렉션 및 인터셉터의 예를 소개합니다. 다음과 같이 귀하와 공유됩니다.
변수 매개 변수 메소드를 설계 할 때数据类型... 매개 변수 유형을 선언하려면 : public static void function(int... numbers)
메소드 본문을 구현할 때 변수 매개 변수는 배열로 처리됩니다.
공개 클래스 테스트 {public static void main (String [] args) {System.out.println (test.sum (1,2,3)); System.out.println (test.sum (1,2,3,4,54)); } public static int sum (int ... 숫자) {int sum = 0; for (int i = 0; i <numbers.length; i ++) {sum+= 숫자 [i]; } 반환 합계; }}참고 : 각 방법에서 최대 1 개의 변수 매개 변수 만 허용되며 변수 매개 변수가 있으면 마지막 매개 변수 여야합니다.
전달 및 리디렉션
컨트롤러 내의 요청을 처리하는 방법에서 문자열을 반환하는 기본 메소드가 전달됩니다. 전달 된 값은 Return "Login"과 같은 View 구성 요소의 이름으로, 뷰 리졸버 (ViewResolver)를 기반으로 마지막으로 표시되는 페이지를 얻습니다. 리턴 리디렉션의 구문 : 경로는 리디렉션을 나타냅니다. 리디렉션 오른쪽에있는 내용 : 경로입니다. 이 경로는 일반적으로 상대 경로를 사용하며 현재 클라이언트의 주소 막대의 경로를 기준으로 표준으로 참조됩니다. 예를 들어, 현재 주소는 다음과 같습니다. http : // localhost : 8080/project/user/reg.do, 그런 다음 "retirect : login.do"를 반환 한 다음 http : // localhost : 8080/project/user/login.do로 리디렉션합니다. http : // localhost : 8080/project/main/index.do
앞으로:
기본 메소드이지만 Return "Forward : Login"을 사용할 수도 있습니다.
반환 된 뷰는 뷰이어야하며, 뷰 파서를 통과 한 후 지정된보기로 전달됩니다.
리디렉션 :
리디렉션 : "리디렉션 : login.do"를 반환합니다.
보기가 아니라 컨트롤러 메소드로의 경로를 반환합니다. 이것은 View Parser를 통과하지는 않지만 직접 점프합니다.
예
@requestmapping (value = "/handle_reg.do", method = requestmethod.post) public string handlereg (사용자, modelmap map) {try {userervice.reg (user); System.out.println ( "성공적으로 등록!"); "리디렉션 : login.do"를 반환합니다. // login.do의 제어 메소드로 리디렉션, login.do는 login.jsp} catch (usernameconflictexception e) {system.out.println (e.getMessage ()); map.put ( "errormessage", e.getMessage ()); "오류"를 반환합니다. }} @requestmapping (value = "login.do") public String handlelogin () {return "login"; }인터셉터
기본 개념
인터셉터 사용
사용자 정의 인터셉터 클래스
핸들러 인터셉터 인터페이스를 구현하려면 인터셉트 클래스 (Demointerceptor)를 만듭니다.
공개 클래스 demointerceptorimplesments handlerinterceptor { /*** 프로세서가* @param 요청 httpservletrequest 객체 등을 실행하기 전에 호출됩니다. 요청 매개 변수 등을 얻을 수 있습니다.* @param 응답 httpservletresponse 객체* @param handler interceptor 컨트롤러* @Return이 반환되면 처리 흐름이 중단되지 않을 것입니다. True가 반환되면 후속 인터셉터 및 프로세서가 실행됩니다. */ public boolean prehandle (httpservletrequest 요청, httpservletreponse 응답, 객체 핸들러)은 예외 {system.out.println ( "demointerceptor의 사전 핸드러 실행"); 진실을 반환하십시오. } / *** 프로세서가 실행 된 후 호출하고 지정된보기로 점프하기 전에 호출* @param 요청 httpservletrequest 객체* @param 응답 httpservletresponse 객체* @param 응답 httpservletresponse 객체* @param handler interceptor 컨트롤러* @param modelandview modelview 객체, 프로세스 결과를 저장하는* / problice void를 저장합니다. posthandle (httpservletrequest 요청, httpservletreponse 응답, 객체 핸들러, ModelandView ModelandView)은 예외를 { /*** 1. 예를 들어, 어떤 경우에는 거짓, 반환 true* 2와 같은 자신의 논리를 설계 할 수 있습니다. 2 위의 프로세서와 인터셉터는 처리가 방해가된다는 것을 반환 할 수 있습니다. System.out.println ( "핸들러 :"+핸들러); System.out.println ( "Demointerceptor의 Posthandler 실행"); // 뷰 이름을 설정 한 다음 실행이 완료되면 index.jsp page // modelandView.setViewName ( "index")으로 이동합니다. } /** * Call * 요청 처리가 완료된 후 공개 무효 후연 (httpservletrequest 요청, httpservletResponse 응답, 객체 처리기, 예외) 예외 {System.out.println ( "Demointerceptor의 후속 실행"); }}SpringMVC 구성 파일로 구성하십시오
구성
위의 순서로 구성해야합니다. 그렇지 않으면 오류 가보고됩니다.
<!-여러 인터셉터를 구성 할 수있는 인터셉터 구성-> <mvc : interceptors> <mvc : interceptor> <!-인터셉터 경로를 구성하고 모든 프로세서 메소드 매핑/user 아래의 모든 프로세서 메소드 매핑 (예 : http : // localhost : 8080/springmvc/user/login). <mvc : mappingpath = "/user/*"/> <!-인터셉터가 가로 채지 않은 컨트롤러 메소드를 구성합니다. 이것은 http : // localhost : 8080/springmvc/user/index.do와 같은 선택적 구성입니다. <mvc : exclude-mappingpath = "/user/login.do"/> <!-인터셉터의 bean을 구성하고 전체 클래스 이름을 지정-> <beanclass = "cn.tedu.spring.interceptor.demointerceptor"> </bean> </mvc : interctor> </mvc : 인터셉터>
구현 방법
공개 부울 사전 처리 (httpservletrequest 요청, httpservletresponse 응답, 객체 처리기)
public void posthandle (httpservletrequest 요청, httpservletresponse 응답, 객체 처리기, ModelandView ModelandView)
공개 void attrompletion (httpservletrequest 요청, httpservletresponse 응답, 객체 처리기, 예외)
데모 로그인 확인
사용자 정의 인터셉터 (LoginInterceptor)
특정 프로세스는 사전 핸드러 방법으로 매우 명확하게 작성됩니다.
공개 클래스 LoginInterceptorImplements handlerinterceptor { / * * 프로세서가 실행되기 전에 호출됩니다 (비 Javadoc) * 1. 세션 GET * 2. 후속 프로세스를 실행할 필요가 없습니다. // 세션 객체를 가져옵니다 uid = session.getAttribute ( "uid"); // 세션에서 객체를 읽으십시오 // uid가 존재하면 로그인하고 (uid! = null) {return true; // true를 반환하고 로그인이 성공하면 후속 프로세스를 실행해야합니다} response.sendRedirect (request.getContextPath ()+"/user/login.do"); // 로그인 인터페이스로 리디렉션하여 거짓을 반환합니다. // False를 반환하고 후속 프로세스를 실행할 필요가 없으며, 직접 중단됩니다.} 공개 void posthandle (httpservletrequest request, httpservletreponse 응답, 객체 처리기, Model 및 Modelandview)은 공개적으로 공제 된 후 연속 (httppletrequest 요청, httppletrequest)을 제외합니다. {}}SpringMVC에서 인터셉터를 구성하십시오
여기에서는 사용자 센터로 이동하여 로그인을 확인해야하므로 user_center.do와 일치합니다.
<!-여러 인터셉터를 구성 할 수있는 인터셉터 구성-> <mvc : interceptors> <mvc : interceptor> <mvc : mappingpath = "/user/user_center.do"/> <beanclass = "cn.tedu.spring.intercrepor.logininterceptor "> </mvc : interceptor> interceptor>
다중 인터셉터의 실행 순서
SpringMVC 구성 파일에서 구성된 순서, 즉 <mvc : interceptors>에 따라 구성된 인터셉터 순서에 따라 실행하십시오. 인터셉터가 동일한 경로에서 수행되는 경우, 첫 번째로 구성된 첫 번째 간격 자
인터셉터와 필터의 차이 (주요 차이)
요약
여러 요청에 동일하거나 매우 유사한 작업이 필요한 경우 인터셉터를 사용할 수 있습니다.
인터셉터를 잘 개발 한 다음 SpringMVC의 구성 파일에서 구성해야합니다.
<mvc : interceptors>에서, 여러 <mvc : interceptors>가 구성되면 다중 인터셉터가 인터셉터 체인을 형성합니다. 여러 인터셉터가 구성되면 동일한 경로를 가로 채고 구성된 노드의 순서대로 실행됩니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.