SpringMVC 간단 한 점프 방법 실현(주제)

10693 단어 SpringMVC점프
심 플 점프
개인 적 으로 구축 과정 을 다시 연습 하 는 것 을 권장 합 니 다.귀 찮 으 면 이전 프로젝트 를 직접 복사 할 수 있 지만 pom.xml 의 정 보 를 수정 해 야 합 니 다.

<groupId>com.hanpang.springmvc</groupId>
<artifactId>springmvc-demo01</artifactId>
<version>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 {
}


package com.hanpang.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

 @Override
 protected Class<?>[] getRootConfigClasses() {
 return new Class[] {WebConfig.class};
 }

 @Override
 protected Class<?>[] getServletConfigClasses() {
 return null;
 }

 @Override
 protected String[] getServletMappings() {
 return new String[] {"/"};
 }
}
2.자바 웹 단계 의 전환 방식
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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//         
public class Demo01Controller {

 @RequestMapping(path="/test01")
 public ModelAndView       _    (HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
 System.out.println("              ");
 request.getRequestDispatcher("/WEB-INF/jsp/demo01.jsp").forward(request, response);
 return null;
 }

 @RequestMapping(path="/test02")
 public ModelAndView       _   (HttpServletRequest request,HttpServletResponse response) throws IOException {
 System.out.println("              ");
 response.sendRedirect(request.getContextPath()+"/view/result01.jsp");
 return null;
 }
}

노트:이런 방식 은 거의 사용 하지 않 습 니 다.단지 간단 한 프 리 젠 테 이 션 과 돌 이 켜 볼 뿐 입 니 다.적어도 우 리 는 이런 방식 으로 Servlet API 를 얻 을 수 있 습 니 다!!
3.Controller 가 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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//         
public class Demo01Controller {

 @RequestMapping(path="/test03")
 public ModelAndView           (){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("/WEB-INF/jsp/demo01.jsp");
 return 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");
 return mav;
 }

}
자바 웹 단계 와 방식 이 다 르 지 않 은 것 같 습 니 다.방향 을 바 꿀 때 간단 한 접 두 사 를 설정 하 였 습 니 다.
4.Controller 에서 Controller 로 이동 하 는 방식 시연
하나의 Servlet 에서 다른 Servlet 으로 이동 하 는 것 과 유사 합 니 다.

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.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller//         
public class Demo01Controller {

 @RequestMapping(path="/test05")
 public ModelAndView           (){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("/test03");
 return mav;
 }

 @RequestMapping(path="/test06")
 public ModelAndView      (){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("redirect:/test04");
 return mav;
 }
}
5.JSP 의 보기 해석 기 추가
위의 프 리 젠 테 이 션 과정 에서 Model AndView 에서 setView Name 은 점프 를 완성 하 는 데 사 용 된 것 을 발 견 했 습 니 다.이 안에 전 달 된 데 이 터 는 문자열 이지 만 처리 방식 이 다 릅 니 다.점프 경로 에 접두사 redirect 가 있 을 때 처리 방식 이 다 릅 니 다.
그리고 만약 에 우리 가/WEB-INF/jsp/demo 01.jsp 형식의 문자열 이 여러 개 있 을 때 우 리 는 공공 적 인 부분 이 매우 많다 는 것 을 알 게 되 었 다.SpringMVC 는 우리 에 게 전문 적 인 처 리 를 제공 해 주 었 다.  컨트롤 러 JSP 페이지 전송 요청  같은 부류.
내 설명 에 주의 하 십시오:당신 이 전달 한 문자열 에 접두사 표시 가 설정 되 어 있 지 않 은 것 을 발견 하면 기본적으로 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.web.servlet.ViewResolver;
import 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//   
 public ViewResolver viewResolver() {
 InternalResourceViewResolver jspViewResolver = new InternalResourceViewResolver();
 jspViewResolver.setViewClass(JstlView.class);//springmvc  jstl  
 jspViewResolver.setPrefix("/WEB-INF/");
 jspViewResolver.setSuffix(".jsp");

 return jspViewResolver;
 }
}
**NOTE:**방법 상의 주해@Bean
방법 은 XML 의 코드 와 같다.

  <bean id="jspResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/"/>
    <property name="suffix" value=".jsp"/>
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
  </bean>
컨트롤 러 점프 JSP 코드 개선
이 보기 해석 기 는 JSP 요청 에 대해 서 만 전송 할 수 있 습 니 다.재 설정 이 잘못 되 었 습 니 다.코드 설명 내용 에 주의 하 십시오.

 @RequestMapping(path="/test03")
 public ModelAndView           (){
 ModelAndView mav = new ModelAndView();
 //mav.setViewName("/WEB-INF/jsp/demo01.jsp");

 //   :     ,   JSP       ,
 // prefix+"jsp/demo01"+suffix => /WEB-INF/jsp/demo01.jsp
 mav.setViewName("jsp/demo01");//           
 return mav;
 }
 @RequestMapping(path="/test04")
 public ModelAndView         (){
 ModelAndView mav = new ModelAndView();
 //         
 mav.setViewName("redirect:/view/result01.jsp");
 return mav;
 }

컨트롤 러 점프 컨트롤 러 코드 개선

@RequestMapping(path="/test05")
public ModelAndView           (){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("/test03");
 return mav;
}
JSP 보기 해상도 기 를 설정 한 후,상기 코드 를 다시 테스트 하여,방문 결 과 를 보고 깜짝 놀 랐 습 니 다.

앞서 말 한"/test 03"에 맞 는 문자열 입 니 다.기본적으로 JSP 보기 해석 기 를 사용 하여 처리 합 니 다.어떻게 개선 합 니까?
접두사"forward:"를 설정 할 수 있 습 니 다.개선 코드 는 다음 과 같 습 니 다.

@RequestMapping(path="/test05")
public ModelAndView           (){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("forward:/test03");
 //  
 //mav.setViewName(UrlBasedViewResolver.FORWARD_URL_PREFIX+"/test03");
 return mav;
}
문자열 이 forward:수식 을 사용 한 것 을 발견 하면 처리 상황 은 Controller 요청 에서 다른 Controller 로 바 뀌 었 습 니 다.방향 을 바 꾸 면 코드 는 다음 과 같 습 니 다.

@RequestMapping(path="/test06")
public ModelAndView      (){
 ModelAndView mav = new ModelAndView();
 mav.setViewName("redirect:/test04");
 return mav;
}
6.InternalResourceView Resolver 부록
Internal ResourceView Resolver:URLBasedView Resolver 의 하위 클래스 이기 때문에 URLBasedView Resolver 가 지원 하 는 기능 은 모두 지원 합 니 다.
실제 응용 에서 Internal ResourceView Resolver 도 가장 광범 위 하 게 사용 되 는 보기 해석 기 입 니 다.그렇다면 Internal ResourceView Resolver 는 자신 만 의 특성 이 있 습 니까?
말 그대로 Internal ResourceView Resolver 를 내부 자원 보기 해석 기로 해석 할 수 있 습 니 다.이것 이 바로 Internal ResourceView Resolver 의 한 특성 입 니 다.
Internal ResourceView Resolver 는 되 돌아 오 는 보기 이름 을 Internal ResourceView 대상 으로 해석 합 니 다.Internal ResourceView 는 Controller 프로세서 방법 으로 되 돌아 오 는 모델 속성 을 해당 하 는 request 속성 에 저장 한 다음 RequestDispatcher 를 통 해 서버 에서 요청 forword 를 대상 URL 로 다시 설정 합 니 다.
예 를 들 어 Internal ResourceView Resolver 에서 prefix=/WEB-INF/,suffix=.jsp 를 정의 한 다음 요청 한 Controller 프로세서 방법 으로 되 돌아 오 는 보기 이름 을 test 로 정의 하면 Internal ResourceView Resolver 는 test 를 Internal ResourceView 대상 으로 분석 하고 되 돌아 오 는 모델 속성 을 해당 하 는 HttpServletRequest 속성 에 저장 합 니 다.그리고 RequestDispatcher 를 이용 하여 서버 에서 요청 forword 를/WEB-INF/test.jsp 로 보 냅 니 다.이것 이 바로 Internal ResourceView Resolver 의 매우 중요 한 특성 입 니 다.우 리 는/WEB-INF/아래 에 저 장 된 내용 은 request 요청 을 통 해 직접 요청 할 수 없다 는 것 을 알 고 있 습 니 다.안전성 을 고려 하여 jsp 파일 을 WEB-INF 디 렉 터 리 에 두 고 Internal ResourceView 는 서버 에서 뛰 어 다 니 는 방식 으로 이 문 제 를 잘 해결 할 수 있 습 니 다.다음은 Internal ResourceView Resolver 의 정의 입 니 다.이 정의 에 따라 논리 적 보기 이름 이 test 일 때 Internal ResourceView Resolver 는 정 의 된 접두사 와 접 두 사 를 붙 여'/WEB-INF/test.jsp'형식 으로 구성 한 다음 Internal ResourceView 의 url 로 Internal ResourceView 대상 을 새로 만 듭 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기