SpringMVC―요청 매개 변 수 를 어떻게 얻 는 지 자세히 알 아 보기

@RequestParam,당신 은 반드시 본 적 이 있 습 니 다;@PathVariable,너 도 틀림없이 알 고 있 을 거 야.@Query Param,어떻게 몰라?!그리고 당신 이 아 는 그(@CookieValue)!그녀(@ModelAndView)!그것(@ModelAttribute)!그래,이것 만 주석 하면 spring mvc 는 너 에 게 알록달록 한 세 계 를 열 어 주 었 다.자,자,흥분 하지 말고 앉 아,우리 이렇게 많은 주해 형제들 에 대해 잘 이야기 하 자~~(wait,들 어 본 적 이 없 는데?좋아,자,앞줄 에 앉 아,너 만!)
 1.spring mvc 는 요청 경 로 를 어떻게 일치 시 킵 니까?"요청 경 로 는 어느 것 이 강 합 니까?RequestMapping 이름 이 멀리 떨 어 집 니 다"
@RequestMapping 은 get 요청,post 요청 또는 REST 스타일 과 비 REST 스타일 을 매 핑 하 는 데 사 용 됩 니 다.이 주 해 는 클래스 나 방법 에 사용 할 수 있 습 니 다.클래스 에 사용 하면 모든 방법의 부모 경 로 를 표시 합 니 다.
예 를 들 어(여기 서 사용 하 는 테스트 유형,예 를 들 어 SpringMVC Test 와 일부 페이지 는 첫 번 째 에서 소개 되 었 습 니 다):
SpringMVCTest.java 에 테스트 방법 추가:

@RequestMapping("/testRequestMapping")

public String testRequestMapping(){

  System.out.println("testRequestMapping");

  return SUCCESS;

} 
방법 단계 에 주석@RequestMapping("/test RequestMapping")을 추가 하 였 습 니 다.  "/test RequestMapping"의 상대 경 로 를 통 해 이 방법 을 찾 을 수 있 음 을 나타 내 는 동시에 우 리 는 SpringMVCTest 류 에 도 하나의 등급 의 RequestMapping 주 해 를 넣 었 습 니 다.

@RequestMapping("/springmvc")

@Controller

public class SpringMVCTest { 
여기에@Controller 의 주 해 를 추가 하 였 습 니 다.이 주 해 는 SpringMVC 에서 Dispatcher Servlet 에서 배 포 된 요청 을 처리 하고 사용자 가 요청 한 데 이 터 를 업무 처리 층 에서 처리 한 후에 Model 로 봉 한 다음 에 해당 하 는 View 에 되 돌려 보 여 줍 니 다.이로써'springmvc/test Request Mapping'이라는 경로 가 생 겼 습 니 다.우 리 는 test Request Mapping 이라는 방법 을 찾 은 다음 에 방법 내의 방법 체 를 실행 할 수 있 습 니 다.
좀 더 보충 하면 RequestMapping 은 모호 한 일치 경 로 를 실현 할 수 있 습 니 다.예 를 들 어:
?:일치 하 는 문자
*:임의의 문자 일치
**:다 중 경로 일치
/springmvc/**/lastTest 는/springmvc/firstTest/secondTest/lastTest 와 같은 경 로 를 일치 시 킬 수 있 습 니 다.
2.spring mvc 는 요청 한 인 자 를 어떻게 얻 습 니까?-"팔선 이 바 다 를 건 너 면 각각 신통력 을 나타 냅 니 다"
1. @PathVariable
이 설명 은 요청 URL 에 연 결 된 자리 표시 자 를 비 추 는 데 사 용 됩 니 다.@PathVariable 을 통 해 URL 의 자리 표시 자 인 자 를 controller 처리 방법 에 연결 할 수 있 습 니 다.알 아 듣 지 못 했 습 니까?보기:

@RequestMapping("/testPathVariable/{id}")

public String testPathVariable(@PathVariable(value="id") Integer id){

  System.out.println("testPathVariable:" + id);

  return SUCCESS;

} 
index.jsp 에 요청 을 실행 하기 위해 연결 을 추가 합 니 다.

<a href="springmvc/testPathVariable/1">testPathVariable</a><br/><br/> 
여기 하이퍼링크 가 있 습 니 다.클릭 하면 springmvc/testPathVariable/1 에 대응 하 는 contrller 처리 방법 에 들 어 갑 니 다.그러면 우 리 는 지금 이 요청 매개 변수 중의"1"을 얻 으 려 고 합 니 다.그래서 testPathVariable 방법 에"/testPathVariable/id",id"를 추가 합 니 다.{id}에 대한 구체 적 인 대응 은 이 방법의 매개 변수 에 있 습 니 다.@PathVariable(value="id")을 통 해 받 을 요청 인 자 를 설명 하고 Integer id 를 통 해 연결 하고 받 습 니 다.이 방식 을 통 해 우 리 는 프론트 페이지 에서 요청 한 인자'1'을 얻 을 수 있다.
2. @RequestParam
이 주해 도 요청 인 자 를 가 져 오 는 데 사 용 됩 니 다.그렇다면 이 주 해 는@PathVariable 과 어떻게 다 릅 니까?아니면 예 를 들 어:
SpringMVCTest 에 방법 추가

@RequestMapping(value="/testRequestParam")

public String testRequestParam(@RequestParam(value="username") String username, @RequestParam(value="age", required=false, defaultValue="0") int age){

  System.out.println("testRequestParam" + " username:" + username + " age:" +age);

  return SUCCESS;

} 

index.jsp 에 하이퍼링크 탭 추가

<a href="springmvc/testRequestParam?username=jackie&age=12">testRequestParam</a><br/><br/> 
페이지 의 하이퍼링크 를 누 르 면 contrller 의 testRequestParam 방법 상의 RequestMapping 경로 와 일치 합 니 다.이 방법 에서 저 희 는@RequestParam 이라는 주 해 를 통 해 두 변 수 를 설명 합 니 다.요청 에 있 는 query 가 가 져 온 매개 변수 값 을 가 져 옵 니 다.하 나 는 username 후의 값 이 고 다른 하 나 는 age 뒤의 값 입 니 다.
이 를 보면@PathVariable 과@RequestParam 사이 의 차이 점 을 알 수 있 을 것 입 니 다."springmvc/testPathVariable/1"과 같은 요청 에 대해 서 는@PathVariable 을 통 해 요청 한 인 자 를 연결 합 니 다."springmvc/test RequestParam?username=jackie&age=12"와 같은 요청 매개 변 수 는 키 값 으로 나타 납 니 다.저 희 는@RequestParam 을 통 해 username 이나 age 후의 구체 적 인 요청 값 을 얻 을 수 있 습 니 다.
RequestParam 과 다른 곡 과 같은 용법 이 있 는 Query Param 도 있 습 니 다.spring mvc 프레임 워 크 의 주석 이 아니 기 때문에 자세 한 설명 은 하지 않 습 니 다.
서로 다른 요청 유형 과 요청 방식 에 대해 spring mvc 는 모두 맞 춤 형 해결 방안 을 가지 고 있 습 니 다.현재 유행 하 는 REST 스타일 의 요청 이 어떤 지 살 펴 보 겠 습 니 다.REST 스타일 을 이용 하여 추가 삭제 와 수정 을 실현 합 니 다.
SpringMVCTest 클래스 에서 아래 에서 위로 검색(get)증가(post)삭제(delete)와 변경(put)인 터 페 이 스 를 실현 하 였 습 니 다.

@RequestMapping(value="/testRest/{id}", method=RequestMethod.PUT)

public String testRestPut(@PathVariable(value="id") Integer id){

  System.out.println("test put:" + id);

  return SUCCESS;

}

   

@RequestMapping(value="/testRest/{id}", method=RequestMethod.DELETE)

public String testRestDelete(@PathVariable(value="id") Integer id){

  System.out.println("test delete:" + id);

  return SUCCESS;

}

   

@RequestMapping(value="/testRest", method=RequestMethod.POST)

public String testRest(){

  System.out.println("test post");

  return SUCCESS;

}

   

@RequestMapping(value="/testRest/{id}", method=RequestMethod.GET)

public String testRest(@PathVariable(value="id") Integer id){

  System.out.println("test get:" + id);

  return SUCCESS;

} 

그러면 프론트 인터페이스 는 어떻게 실현 되 는 지,대응 하 는 순 서 는?

<form action="springmvc/testRest/1" method="post">

  <input type="hidden" name="_method" value= "PUT"/>

  <input type="submit" value="testRestPut"/>

</form><br/><br/>

 

<form action="springmvc/testRest/1" method="post">

  <input type="hidden" name="_method" value="DELETE"/>

  <input type="submit" value="TestRest DELETE"/>

</form><br><br>

 

<form action="springmvc/testRest" method="post">

  <input type="submit" value="testRestPost">

</form><br/><br/>

 

<a href="springmvc/testRest/1">testRest</a><br/><br/> 
이외에 도 설정 파일 웹.xml 에 post 를 delete 와 put 로 전환 하 는 것 을 지원 하 는 성명 을 추가 해 야 합 니 다

<!--   HiddenHttpMethodFilter:   POST    DELETE POST   -->

<filter>

  <filter-name>HiddenHttpMethodFilter</filter-name>

  <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>

</filter>

   

<filter-mapping>

  <filter-name>HiddenHttpMethodFilter</filter-name>

  <url-pattern>/*</url-pattern>

</filter-mapping> 

보시 다시 피 이곳 의 변경 과 삭 제 는 모두 post 를 통 해 보 내 집 니 다.put 와 delete 를 지원 하지 않 고 직접 삭 제 를 실현 하 는 것 이 아니 라 post 방식 을 통 해 토 큰 hidden 형식의 input 라벨 을 몰래 가 져 와 서 배경 에 제 가 프론트 데스크 에서 보 낸 것 이 실제 적 으로 삭제 와 수정 요청 이 라 고 알려 줍 니 다.
그렇다면 이 과정 에서 어떻게 이 루어 졌 을 까?왜 덧 붙 였 을 까?

<input type="hidden" name="_method" value="DELETE"/> 
이 영패 는 남 의 뒤에서 곧 너의 빚 을 살 것 이다.그럼 나중에 어떻게 샀 는 지 한번 봅 시다.
결국 웹.xml 에 추 가 된 HiddenHttpMethodFilter 라 는 종 류 를 통 해 doFilter Internal 방법 이 있 습 니 다.디 버 깅 을 통 해 우 리 는 그 실 마 리 를 발견 할 수 있 습 니 다.tomcat(tomcat 8 이 아 닙 니 다)를 시작 하고 delete 작업 에 대응 하 는 input 탭 을 클릭 하여 디 버 깅 인터페이스 에 들 어가 면 다음 과 같은 것 을 볼 수 있 습 니 다.
  • request.getParameter(this.methodParam)를 통 해 request 필드 에서 this.methodParam(method)의 값 은 delete 를 삭제 하 는 작업 에 대응 합 니 다.페이지 에서 delete 에서 hidden input 를 설명 하 였 습 니 다.그 중에서 name 은""입 니 다.method",value 는 DELETE 이기 때문에 여기 서 얻 은 paramValue 의 값 은"DELETE"입 니 다
  • 계속 실행 하면 request.getMethod 를 통 해 수치 가"POST"와 같 는 지 볼 수 있 습 니 다.여 기 는 같 습 니 다.프론트 페이지 에서 delete 에 대한 작업 요청 에서 method 는 post 방식 이 라 고 밝 혔 기 때 문 입 니 다
  • 그 다음 에 얻 은 요청 방법 을 Http ServletRequest 에 밀봉 하여 후속 처 리 를 완성 합 니 다.여기 서 우 리 는 왜 프론트 에 그런 hidden input 을 추가 해 야 하 는 지 알 것 이다
  • 작은 구덩이:여기 서 시작 하 는 것 은 tomcat 8 이 아니 라 8 보다 작은 버 전 입 니 다.예 를 들 어 7 이나 6 등 입 니 다.다음 그림 은 tomcat 의 오류 메시지 와 7 의 성공 적 인 응답 을 보 여 줍 니 다.

    puut 과 delete 요청 을 어떻게 보 내 는 지 정리 합 니 다.
    1.웹.xml 에 HiddenHttpMethodFilter 설정
    2.post 요청 보 내기
    3.요청 중 숨겨 진 영역 입 니 다.name 은"mothod",value 는 put 또는 delete 입 니 다.
     마지막 으로@CookieValue 라 는 주 해 를 말씀 드 리 겠 습 니 다.
    3. @CookieValue
    이 주석 도 차이 가 많 지 않 은 방법 이자 맵 이 며 쿠키 값 을 매 핑 합 니 다.
    우리 가 요청 을 보 낼 때,우 리 는 요청 에 쿠키 값 을 가지 고 있 는 것 을 볼 수 있다.

    여기 JSESSIONID 나 Path 같은 거.이제 쿠키 값 을 얻 기 위 한 방법 을 쓰 겠 습 니 다.
    SpringMVCTest 에 추가
    
    @RequestMapping(value="/testCookieValue")
    
    public String testCookieValue(@CookieValue("JSESSIONID") String cookieValue){
    
      System.out.println("testCookieValue: " + cookieValue);
    
      return SUCCESS;
    
    } 
    
    index.jsp 인터페이스 에 링크 추가
    
    <a href="springmvc/testCookieValue">testCookieValue</a><br/><br/> 
    이렇게 하면 우 리 는'testCookieValue:1410 F05C9ADD84E8659C2AC79E8CC 666'과 같은 결 과 를 얻 을 수 있다.
    여기까지 소개 하 겠 습 니 다.
    1.@RequestMapping 의 용법
    2.요청 한 인자 의@PathVariable,@RequestParam 사용법 가 져 오기
    3.REST 스타일 의 요청 을 어떻게 실현 하 는 지 소개 하고 post 가 delete 와 put 요청 으로 어떻게 전환 하 는 지 분석 했다.
    4.@CookieValue 의 사용법 소개
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기