글로벌 프론트 컨트롤러 서블릿으로 정적 리소스에 액세스
Spring MVC 디스패처를 /에서 글로벌 프론트 컨트롤러 서블릿으로 매핑하는 경우 , 일반적으로 /res와 같은 폴더에 저장되는 CSS, JS 및 이미지와 같은 정적 리소스에 액세스하는 데 문제가 발생할 수 있습니다. 이는 / 매핑이 모든 요청을 캡처하고 이를 서블릿으로 라우팅하여 이러한 정적 파일에 대한 액세스를 방지하기 때문입니다.
이 문제를 해결하기 위해 컨트롤러 서블릿에 대해 보다 구체적인 URL 패턴을 정의할 수 있습니다. 예를 들어 /pages/. 그런 다음 정적 콘텐츠를 /static과 같은 별도의 폴더에 배치할 수 있습니다. 필터는 /을 수신하고 정적 콘텐츠에 대한 요청을 기본 서블릿에 투명하게 전달하는 동시에 다른 요청은 컨트롤러 서블릿으로 디스패치하도록 구성할 수 있습니다.
다음은 단순화된 코드 샘플입니다.
<filter> <filter-name>filter</filter-name> <filter-class>com.example.Filter</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>controller</servlet-name> <servlet-class>com.example.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>controller</servlet-name> <url-pattern>/pages/*</url-pattern> </servlet-mapping>
그리고 필터의 doFilter() 메소드에서:
HttpServletRequest req = (HttpServletRequest) request; String path = req.getRequestURI().substring(req.getContextPath().length()); if (path.startsWith("/static")) { chain.doFilter(request, response); // Goes to default servlet. } else { request.getRequestDispatcher("/pages" + path).forward(request, response); }
이 구성은 다음을 보장합니다. 나머지 요청을 처리하는 컨트롤러 서블릿의 기능을 중단하지 않고 CSS 및 JS와 같은 정적 리소스에 액세스할 수 있습니다. 또한 필터를 사용하면 브라우저 관점에서 정적 파일 액세스가 완전히 투명해집니다.
위 내용은 Spring MVC에서 Global Front Controller 서블릿을 사용할 때 정적 리소스에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!