springmvc 사용@PathVariable 경로 일치 문제 해결
4152 단어 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)
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.만약 잘못 이 있 거나 완전히 고려 하지 않 은 부분 이 있다 면 아낌없이 가르침 을 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
springmvc application/octet-stream problemmistake: Source code: Solution: Summarize: application/octet-stream is the original binary stream method. If the convers...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.