springmvc 사용@PathVariable 경로 일치 문제 해결

문제
오늘 설 치 를 마 쳤 을 때,ssm 프레임 워 크 를 구축 하 는 데 springmvc 를 사용 하 는@PathVariable 을 사용 할 때 경로 가 일치 하 는 문제 가 발생 하여 마지막 으로 시간 이 좀 걸 렸 습 니 다.
코드 구조:

질문 내용:

url 접근:

이치 에 따 르 면,나 는 jsp 의 index 페이지 에 가 야 한다.마지막 결 과 는 확실히 index 페이지 에 도 착 했 지만 이 페이지 는 css 와 js 를 몇 개 인용 하여 이상 하 게 찾 을 수 없습니다.spring 경험 이 있 는 동 화 는 다음 코드 로 정적 자원 의 접근 을 해결 하 는 것 을 알 아야 합 니 다.

//    
<mvc:default-servlet-handler/>
//    
<mvc:resources location="/easyui/js/" mapping="/themes/**"/>
<mvc:resources location="/easyui/themes/" mapping="/js/**"/>
하지만 정적 자원 에 접근 하지 못 했 습 니 다.
그래서@PathVariable 때 문인 가?그래서 아래 에서 실험 을 했 어 요.

@RequestMapping("/index")
 public String index() {
  System.out.println("index execute ");
  return "index";
 }
실험의 결 과 는 바로 정확하게 접근 할 수 있다 는 것 이다.보아하니 확실히 그런 것 같다.그래서 나 는 다시 위의 주 소 를 방문 했다(http://localhost:8080/ksxt_v1/user/index),그리고 콘 솔 을 열 어 다음 과 같이 봅 니 다.

위 에 표 시 된 곳 에서 문제 의 원인 을 알 수 있 습 니 다.요청 한 URL 은?http://localhost:8080/ksxt_v1/user/index 는 정적 자원 을 요청 할 때 도 user 를 가 져 옵 니 다.우리 의 정적 자원 은 이 폴 더 에 있 는 것 이 아 닙 니 다.마지막 결말 은 당연히 찾 을 수 없 지.
해결 방법
위의 문 제 는 내 가 정적 파일 을 인용 할 때 상대 적 인 경 로 를 사용 하기 때문이다.

해결 방법 은 모든 것 을 절대 경로 로 바 꾸 는 것 이다.

<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/default/easyui.css" rel="external nofollow" >
<link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/easyui/themes/icon.css" rel="external nofollow" >
<script type="text/javascript" src="${pageContext.request.contextPath}/easyui/js/jquery.min.js"></script>
<script type="text/javascript" src="${pageContext.request.contextPath}/easyui/js/jquery.easyui.min.js"></script>
최종 적 으로 완벽 하 게 해결 하 다.물론 다른 방법 도 있 을 것 이 라 고 는 생각 지도 못 했다.
추가:SpringMVC 요청 경로 끝 에 존재 합 니 다.@PathVariable 접근 경로 내용 을 사용 하면 경로 매개 변수 가 정확 하지 않 은 문 제 를 가 져 옵 니 다.
SpringMVC 가 Get 방식 으로 자원 을 요청 할 때 요청 경로 의 끝 에 소수점(.)이 있 을 때@PathVariable 접근 경로 내용 을 동시에 사용 할 때 요청 경로 의 마지막 소수점 과 그 뒤의 내용 은 Spring 에 의 해 차단 되 어 버 려 집 니 다.
버 전 접근
요청 경로:
http://host:port/program/module/download/apk/3.20.10
백 엔 드 RequestMapping

@RequestMapping(value="module/download/apk/{version}",method=RequestMethod.GET)
public void download(HttpSession session,HttpServletResponse response,@PathVariable("version")String version){
  //           :3.20
}
파일 접근
요청 경로:
http://host:port/program/viewFile/module/201612201231445.pdf
백 엔 드 RequestMapping

@RequestMapping(value="viewFile/{module}/{filename}",method=RequestMethod.GET)
public void viewFile(HttpSession session,HttpServletResponse response,@PathVariable String module, @PathVariable String filename){
  //            201612201231445         
}
소수점 경로 로 요청 이 필요 하 다 면 다음 과 같은 두 가지 해결 방안 을 선택 할 수 있 습 니 다.
1.경로 뒤에 임의의 소수점 끝 문자열 추가
http://host:port/program/module/download/apk/3.20.10.html
http://host:port/program/viewFile/module/201612201231445.pdf.jsp
2.Spring 정규 표현 식 사용(SpEL)

@RequestMapping(value="module/download/apk/{version:.+}",method=RequestMethod.GET)
@RequestMapping(value="viewFile/{module}/{filename:.+}",method=RequestMethod.GET)
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.

좋은 웹페이지 즐겨찾기