[SPRING] Spring MVC의 서블릿 매핑에서 url 패턴 디렉토리의 루트를 어떻게 매핑 할 수 있습니까?
SPRINGSpring MVC의 서블릿 매핑에서 url 패턴 디렉토리의 루트를 어떻게 매핑 할 수 있습니까?
<servlet-mapping>
<servlet-name>testServlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
내가 / test / page를 누르면 위의 코드가 작동합니다. 그러나 타격 / 테스트 또는 / 테스트 / 작동하지 않습니다. 저는 Spring MVC를 사용하고 있으며 요청 매핑은 다음과 같습니다 :
@RequestMapping(value = {"","/"})
편집하다:
독립 프로젝트로 검증하는 중이지만, 이것은 Spring의 UrlPathHelper와 관련된 버그 인 것으로 보입니다. 다음 메소드는 컨텍스트와 서블릿 경로가 모두 있고, 슬래시없이 서블릿에 도달하면 잘못된 경로를 리턴합니다.
public String getPathWithinApplication(HttpServletRequest request) {
String contextPath = getContextPath(request);
String requestUri = getRequestUri(request);
if (StringUtils.startsWithIgnoreCase(requestUri, contextPath)) {
// Normal case: URI contains context path.
String path = requestUri.substring(contextPath.length());
return (StringUtils.hasText(path) ? path : "/");
}
else {
// Special case: rather unusual.
return requestUri;
}
}
예를 들어 "admin"컨텍스트와 다음 서블릿 매핑이 있다고 가정 해 봅시다.
<servlet-mapping>
<servlet-name>usersServlet</servlet-name>
<url-pattern>/users/*</url-pattern>
</servlet-mapping>
이제 다음과 같은 컨트롤러에 요청 매핑이 있습니다.
@RequestMapping(value = {"","/"})
내가 / admin / users를 친다면 그것은 작동하지 않을 것이다. 그러나 내가 / admin / users /를 치면 작동 할 것입니다. 이제 요청 매핑을 다음과 같이 변경하면 둘 다 작동합니다.
@RequestMapping(value = {"/users","/"})
그러나 이제는 / admin / users / users URL도 작동합니다 (원하는 것은 아닙니다).
해결법
-
==============================
1.Yevgeniy은 정확하지만 DispatcherServlet이 기본 서블릿을 인계 받으면 web.xml에 이것을 추가해야합니다.
Yevgeniy은 정확하지만 DispatcherServlet이 기본 서블릿을 인계 받으면 web.xml에 이것을 추가해야합니다.
<welcome-file-list> <welcome-file>/</welcome-file> </welcome-file-list>
-
==============================
2.내 설정은 일반적으로 다음과 같습니다.
내 설정은 일반적으로 다음과 같습니다.
<servlet-mapping> <servlet-name>testServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
컨트롤러, 여기서 당신이 / 테스트 및 / 테스트 동등하게 처리하려는 가정 :
@Controller public class MyController { @RequestMapping("/test") public String test() { return "redirect:/welcome"; } @RequestMapping("/test/") public String test() { return "redirect:/welcome"; } @RequestMapping("/welcome") public void test(ModelMap model) { // do your stuff } }
이와 같은 설정은 DispatcherServlet이 * .css 및 * .js 파일에 대한 요청을 처리하게하므로 대부분의 경우 바람직하지 않습니다. 나는 이것이 Bhavik이 설명하는 문제라고 생각한다. 이러한 리소스의 경우 다음과 같이 ResourceController를 사용할 수 있습니다.
<mvc:resources mapping="/css/**" location="/resources/css/" /> <mvc:resources mapping="/js/**" location="/resources/js/" />
/ resources / css 및 / resources / js 파일은 별도의 컨트롤러를 작성하지 않고도 제공됩니다.
-
==============================
3.우선, 디스패처 서블릿을 "/"및 "/ *"에 매핑하는 것의 차이점. 차이점이 있습니다!
우선, 디스패처 서블릿을 "/"및 "/ *"에 매핑하는 것의 차이점. 차이점이 있습니다!
"/ *"에 매핑하면 모든 URL 요청 ( "/WEB-INF/jsp/.../index.jsp"와 같은 항목 포함)이 Dispatcher 서블릿에 매핑됩니다.
둘째, Spring + Tiles를 사용하고 타일 정의에 일부 JSP를 반환하면 내부 요청을 처리하고 원래 요청과 동일한 서블릿에서 처리합니다. 필자는 home () 메소드에 의해 적절하게 포착 된 루트 URL "/"을 호출 한 다음 다시 Dispatcher Servlet에 의해 처리되는 Tiles에 의해 "index.jsp"로 전달됩니다. 분명히 dispatcher 서블릿은 컨트롤러가 없기 때문에 "index.jsp"를 처리 할 수 없습니다.
예,보기 흉하지만이게 작동하는 것처럼 보입니다.
그래서, 지금까지 찾은 유일한 해결책은 web.xml에서 "/ *"를 "/"로 다시 변경하는 것입니다. 이 방법으로 JSP는 톰캣의 jsp 서블릿에 의해 적절하게 표현 될 것입니다. 디스패처 서블릿이 아닙니다. 불행하게도,이 수정은 Spring에 의해 파견 된 ROOT URL을 깨뜨릴 것이므로 지금은 ROOT URL + Tiles를 사용하는 아이디어를 남겨 둘 필요가있다.
web.xml의 명시적인 서블릿 매핑 ".jsp -> Tomcat jsp를 추가하는 것은"/ * "을 사용할 때 도움이되지 않습니다.
여전히 문제는 해결되지 않습니다.
또한 이것은 Spring MVC 3.0의 문제점이다.
-
==============================
4.web.xml 파일을 건드리지 않는 방법은 맵을 기본 환영 파일 경로로 설정하는 것입니다.
web.xml 파일을 건드리지 않는 방법은 맵을 기본 환영 파일 경로로 설정하는 것입니다.
@RequestMapping("/index.html")
-
==============================
5.내 경우, 모든 URL은 루트 "/"URL을 제외하고는 작동했습니다. 문제는 내 프로젝트의 webapp 루트 폴더에서 index.htm 파일을 삭제하지 않았다는 것입니다.
내 경우, 모든 URL은 루트 "/"URL을 제외하고는 작동했습니다. 문제는 내 프로젝트의 webapp 루트 폴더에서 index.htm 파일을 삭제하지 않았다는 것입니다.
from https://stackoverflow.com/questions/13405868/in-a-servlet-mapping-in-spring-mvc-how-do-i-map-the-root-of-a-url-pattern-direct by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] JSF에서 Spring Security Facelets 태그 라이브러리를 사용하는 방법 (0) | 2019.01.03 |
---|---|
[SPRING] Spring Cloud Configuration Server가 로컬 속성 파일로 작동하지 않습니다. (0) | 2019.01.02 |
[SPRING] JSP에서 List 객체 반복하기 (0) | 2019.01.02 |
[SPRING] 스프링 종속성 삽입 Autowiring Null [duplicate] (0) | 2019.01.02 |
[SPRING] XML 네임 스페이스는 어떻게 작동합니까? (0) | 2019.01.02 |