간단한 점프 주제
나는 개인적으로 건설 과정을 다시 연습하는 것이 좋습니다. 귀찮은 느낌이 들면 이전 프로젝트를 직접 복사 할 수 있지만 pom.xml에서 작은 정보를 수정해야합니다.
<groupid> com.hanpang.springmvc </groupid> <artifactid> springmvc-demo01 </artifactid> <bersion> 0.0.1-snapshot </version>
1. 핵심 구성 클래스 및로드 클래스
package com.hanpang.config; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.enablewebmvc;@configuration@enablewebmvc@componentscan (basepackages = "com.hanpang. **. web") public class webconfig {} pack {webconfig.class}; } @override protected class <?> [] getServletConfigClasses () {return null; } @override Protected String [] getServletmappings () {return new String [] { "/"}; }}2. Javaweb 단계 점프 방법
SpringMVC 메서드의 공식 매개 변수에 주목하십시오. 프레임 워크는 우리를위한 인스턴스화 작업을 완료합니다.
package com.hanpang.web; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.stereotyp.controller; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; @controller // 컨트롤러 공개 클래스라고 말하면 @requestmapping (path = "/test01") 전통적인 방법 xtroomperting (htequest) request, httpservletResponse 응답) servletexception, ioexception {system.out.println ( "공식 매개 변수는 기본적으로 인스턴스화됩니다"); request.getRequestDispatcher ( "/web-inf/jsp/demo01.jsp"). FORWAR (요청, 응답); 널 리턴; } @RequestMapping (path = "/test02") public modelandview 전통적인 웨이 jump_redirect (httpservletrequest 요청, httpservletResponse 응답)는 ioexception {system.out.println ( "공식 매개 변수는 기본적으로 인스턴스화됩니다"); response.sendRedirect (request.getContextPath ()+"/view/result01.jsp"); 널 리턴; }} 참고 : 우리는 더 이상이 방법을 사용하지 않고 간단한 데모 및 검토 만 사용합니다. 적어도이 방법을 사용하여 서블릿 API를 얻을 수 있습니다 !!!
3. 컨트롤러가 JSP로 점프하는 방법을 보여줍니다
예가 끝나면 JSP 뷰 파서를 추가합니다. 처음에는 여전히 전통적인 방법을 따르고 단계별 프로세스가 있습니다.
package com.hanpang.web; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.stereotyp.controller; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; @controller // 컨트롤러 공개 클래스 Demo01controller {@requestmapping (path = "/test03")이라고 말하면 New {) {forporting ()를 요청 받았다. ModelAndView (); mav.setViewName ( "/web-inf/jsp/demo01.jsp"); 반환 mav; } @RequestMapping (path = "/test04") public modelandView 리디렉션 메소드를 설정하십시오 () {modelAndView mav = new ModelAndView (); mav.setViewName ( "redirect : /view/result01.jsp"); // //mav.setViewName(UrlBasedViewResolver.Redirect_url_prefix+"/view/result01.jsp "); 반환 mav; }} Java Web Stage 메소드처럼 느껴지지만 리디렉션 중에 간단한 접두사가 설정됩니다.
4. 컨트롤러가 컨트롤러로 점프하는 방법을 보여줍니다
한 서물에서 다른 서블릿으로 전화하는 것과 비슷합니다
package com.hanpang.web; import java.io.ioexception; import javax.servlet.servletexception; import javax.servlet.http.httpservletrequest; import javax.servlet.http.httpservletresponse; import org.springframework.stereotyp.controller; org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; @controller // 컨트롤러 공개 클래스 Demo01controller {@requestmapping (path = "/test05")이라고 말하면 {modelview modav areview = new {new awn and a new modav ar () {and and antopestmapping (public model view = new {). ModelAndView (); mav.setViewName ( "/test03"); 반환 mav; } @requestmapping (path = "/test06") public modelandview set rediprection () {modelAndView mav = new ModelAndView (); mav.setViewName ( "redirect :/test04"); 반환 mav; }} 5. JSP보기 파서를 추가하십시오
위의 데모 동안 ModelandView의 SetViewName이 점프를 완료하는 데 사용된다는 것을 발견했습니다. 여기에 전달 된 데이터는 문자열이지만 처리 방법은 다릅니다. 점프 경로가 접두사로 리디렉션되면 처리 방법이 다릅니다.
또한 /web-inf/jsp/demo01.jsp와 유사한 여러 문자열이있는 경우 공공 부품이 많이 있음을 알 수 있습니다. SpringMVC는 컨트롤러 요청 처리를 전문으로하는 클래스를 제공합니다.
내 설명에 유의하십시오 : 통과 한 문자열에 접두사 식별자가 없으면 기본적으로 구성 JSP보기 파서를 사용하여 처리하고 요청 전달 작업을 완료하십시오.
참고 : 코어 구성 클래스를 구성하십시오
package com.hanpang.config; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.componentscan; import org.springframework.context.annotation.configuration; import org.springframework.svervlet.viewrerolver; org.springframework.web.servlet.config.annotation.enablewebmvc; import org.springframework.web.servlet.view.internalresourceviewresolver; import org.springframework.web.servlet.view.jstlview;@configuration@enablewebmvc@componentscan (basepackages = "com.hanpang. **. web") public class webconfig {@bean // instantiate public viewresolver (Instantiate public viewresolver) {instantiate public viewresouviewresoLver jspviewresOlver jspviewresOlver InternalResourceViewResolver (); jspviewresolver.setviewclass (jstlview.class); // springmvc가 jstl 태그를 지원합니다 jspviewresolver.setprefix ( "/web-inf/"); jspviewresolver.setsuffix ( ". jsp"); jspviewresolver를 반환합니다. }} ** 참고 : ** @Bean 방법의 주석에주의를 기울이십시오.
이 메소드는 다음과 같이 XML의 코드와 같습니다.
<bean id = "jspresourceviewresolver"> <property name = "prefix"value = "/web-inf/"/> <property name = "puffix"value = ". jsp"/> <property name = "viewclass"value = "org.spramframework.web.servlet.view.jstlview"/> </bean>
컨트롤러 점프 JSP 코드를 향상시킵니다
이보기 파서는 JSP 요청 만 전달할 수 있으며 리디렉션에 대해 유효하지 않습니다. 코드의 의견 내용에주의를 기울이십시오.
@requestmapping (path = "/test03") public modelandview 기본적으로 전달 () {modelAndView mav = new ModelAndView (); //mav.setViewName("/web-inf/jsp/demo01.jsp "); // advanced : 기본적으로 JSP View Parser, // prefix+"jsp/demo01"+puffix => /web-inf/jsp/demo01.jsp mav.setviewname ( "jsp/demo01")을 사용하여 처리됩니다. // 문자열에 접두사 수정 return mav가 없다는 것을 알았습니다. } @RequestMapping (path = "/test04") public modelandView 리디렉션 메소드를 설정하십시오 () {modelAndView mav = new ModelAndView (); // Parser는 리디렉션 mav.setViewName ( "retirect : /view/result01.jsp"); 반환 mav; } 컨트롤러 점프 컨트롤러 코드를 향상시킵니다
@requestmapping (path = "/test05") public modelandview 매핑 경로 () {modelAndView mav = new ModelAndView (); mav.setViewName ( "/test03"); return mav;}JSP보기 파서를 구성한 후 위의 코드를 다시 테스트하고 액세스 결과를 놀라게합니다.
"/test03"이전에 말한 내용에 따라 JSP 뷰 파서를 사용하여 기본적으로 처리 될 문자열입니다. 그래서 그것을 개선하는 방법?
Prefix "Forward :"를 설정할 수 있으며 코드는 다음과 같이 향상됩니다.
@requestmapping (path = "/test05") public modelandview 매핑 경로 () {modelAndView mav = new ModelAndView (); mav.setViewName ( "forward :/test03"); // 또는 //mav.setViewName(UrlBasedViewResolver.forward_url_prefix+"/test03 "); return mav;} 문자열이 앞으로 다음과 같이 수정 된 경우, 처리 상황이 컨트롤러 요청에서 다른 컨트롤러로 변환하도록 변경됩니다. 리디렉션이 수행되면 코드는 다음과 같습니다.
@requestmapping (path = "/test06") public modelandview set redirect () {modelAndView mav = new ModelAndView (); mav.setViewName ( "redirect :/test04"); return mav;} 6. InternalresourceviewResolver 부록
InternalResourceViewResolver : UrlBasedViewResolver의 서브 클래스이므로 UrlBasedViewResolver에서 지원하는 모든 기능을 지원합니다.
실제 애플리케이션에서 InternalResourceViewResolver는 가장 널리 사용되는 View Resolver입니다. 그렇다면 InternalResourceViewResolver의 고유 한 기능은 무엇입니까?
문자 그대로의 관점에서 볼 때 내부 리소스 뷰 레졸버로서 내부 레저 소스 뷰 드레 솔버를 해석 할 수 있습니다. 이것은 InternalResourceViewResolver의 기능입니다.
InternalResourceViewResolver는 반환 된 뷰 이름을 내부적으로 vistresourceview 객체로 해결합니다. InternalResourceView는 해당 요청 속성에 컨트롤러 프로세서 메소드에 의해 리턴 된 모델 속성을 저장 한 다음 요청을 요청을 요청을 요청한 Dispatcher를 통해 서버 측의 대상 URL로 전달합니다.
예를 들어, InternalResourceViewResolver에서 Prefix =/web-inf/, wiffix = .jsp는 내부 열원에 정의 된 다음 요청 된 컨트롤러 프로세서 메소드에서 반환 된보기 이름은 테스트입니다. 이 시점에서 InternalResourceViewResolver는 테스트를 InternalResourceView 객체로 구문 분석하고 먼저 반환 된 모델 속성을 해당 HTTPServletRequest 속성에 저장 한 다음 요청을 서버 측의 /web-inf/test.jsp로 전달하기 위해 요청을 사용합니다. 이것은 InternalResourceViewResolver의 매우 중요한 기능입니다. 우리는 모두 / web-inf /에 저장된 콘텐츠를 요청 요청을 통해 직접 요청할 수 없다는 것을 알고 있습니다. 보안상의 이유로 일반적으로 JSP 파일을 Web-INF 디렉토리에 배치하고 내부 서버 측면에서 내면에서 점프하는 방식 이이 문제를 잘 해결할 수 있습니다. 아래는 내부 레스 소스 뷰 드레 솔버의 정의입니다. 이 정의에 따르면, 반환 된 논리적보기 이름이 테스트 인 경우, 내부 레저 소스 뷰레 솔버는 정의 된 접두사와 접미사를 추가하고 "/web-inf/test.jsp"를 형성 한 다음 내부 소송 URL로 사용하여 새로운 InternalResourceView 객체를 만듭니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.