서비스 경로없이 요청 URI를 얻는 방법은 무엇입니까?
request.getRequestURI () 메소드 는 메소드가있는 URI를 리턴합니다.
응용 프로그램의 기본 URL 인 경우 예를 들어, http://localhost:8080/myapp/
(즉, 전화 경로는 MyApp를 위해 ) 전화 request.getRequestURI()
를 http://localhost:8080/myapp/secure/users
, 그것은 반환합니다 /myapp/secure/users
.
/secure/users
경로가없는 URI와 같이이 부분 만있는 방법이 있습니까?
접두사 패턴에 매핑 된 프론트 컨트롤러 서블릿 안에 있다면 사용할 수 있습니다 .HttpServletRequest#getPathInfo()
String pathInfo = request.getPathInfo();
// ...
의 예제에서 서블릿에 매핑된다 가정하면 /secure
, 다음이 반환되는 /users
전형적인 전형적인 프론트 컨트롤러 서블릿 내 유일한 관심있는 정보가있다.
그러나 서블릿이 접미사 패턴에 매핑 된 경우 (URL 예제는 사실 사실이거나 그렇지 않은 경우) 또는 실제로 필터 내부에있을 때 (호출 출할 수있는 서블릿이 아직 결정되지 않은 경우) getPathInfo()
을 반환 null
하는 String
방법을 사용합니다. 하여 고객 경로의 길이를 기반으로 요청 URI를 하위 구매로 만드는 것입니다 .
HttpServletRequest request = (HttpServletRequest) req;
String path = request.getRequestURI().substring(request.getContextPath().length());
// ...
request.getRequestURI().substring(request.getContextPath().length())
봄으로 할 수있는 일 :
String path = new UrlPathHelper().getPathWithinApplication(request);
getPathInfo ()는 null을 반환합니다. 문서에서 HttpServletRequest
추가 경로 정보가없는 경우이 메소드는 널을 리턴합니다.
필터에 많은 경로가없는 파일 경로가 필요하고 getPathInfo ()가 null을 반환합니다. 그래서 다른 방법을 사용합니다 : httpRequest.getServletPath ()
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String newPath = parsePathToFile(httpRequest.getServletPath());
...
}
필터 내에서 request.getPathInfo ()를 사용하면 항상 최소한 최상급 것처럼 null을 시청합니다.
이 간결한 잘못된 버그 + 응답은 내가 생각하는 문제를 암시합니다.
https://issues.apache.org/bugzilla/show_bug.cgi?id=28323
서블릿이 요청을 받기 전에 필터가 실행 사실과 관련이 많은 생각합니다. 컨테이너 버그 발견 할 수없는 예상되는 동작 일 수 있습니다.
contextPath를 사용할 수 있으므로 fforws 솔루션은 필터 작동합니다. 나는 그것을 손으로 구현하는 것을 좋아하지 않는다.
이를 수행하는 방법은 요청 URI에서 서브릿 라우팅 경로를 유지하는 것입니다.
String p = request.getRequestURI();
String cp = getServletContext().getContextPath();
if (p.startsWith(cp)) {
String.err.println(p.substring(cp.length());
}
예를 들어 분할 메소드를 사용하여 '/ myapp'을 제거 할 수 있습니다.
string[] uris=request.getRequestURI().split("/");
string uri="/"+uri[1]+"/"+uris[2];
참고 URL : https://stackoverflow.com/questions/4278083/how-to-get-request-uri-without-context-path
'IT' 카테고리의 다른 글
왜 인터페이스를 명시 적으로 구현해야합니까? (0) | 2020.07.17 |
---|---|
안드로이드 위치 클라이언트 -GPS 또는 네트워크는? (0) | 2020.07.17 |
스칼라에서 사용할 JSON 라이브러리는 무엇입니까? (0) | 2020.07.17 |
jQuery는 선택이 선택되어 있는지 확인합니다. (0) | 2020.07.17 |
Java / Android- 전체 스택 추적을 인쇄하는 방법은 무엇입니까? (0) | 2020.07.17 |