>Java >java지도 시간 >/*에 매핑된 Global Front Controller 서블릿을 사용할 때 정적 리소스를 제공하는 방법은 무엇입니까?

/*에 매핑된 Global Front Controller 서블릿을 사용할 때 정적 리소스를 제공하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2024-12-18 03:30:09673검색

How to Serve Static Resources When Using a Global Front Controller Servlet Mapped to /*?

/*에 매핑된 전역 프런트 컨트롤러 서블릿을 사용하여 정적 리소스에 액세스

/* URL 패턴에서 Spring MVC 디스패처와 같은 전역 프런트 컨트롤러 서블릿 매핑 들어오는 요청 처리를 중앙 집중식으로 제어합니다. 그러나 이 매핑은 CSS 파일, JavaScript 스크립트 및 이미지와 같은 정적 리소스에 대한 액세스를 방해할 수 있습니다.

이 문제를 해결하려면 다각적인 접근 방식이 필요합니다.

  1. 컨트롤러 서블릿에 특정 URL 패턴 사용: 컨트롤러 서블릿을 /pages/*와 같은 보다 구체적인 URL 패턴에 매핑합니다. 이렇게 하면 서블릿이 동적 콘텐츠를 위한 요청만 처리할 수 있습니다.
  2. 정적 콘텐츠를 전용 폴더에 배치: /static과 같은 별도의 폴더에 정적 리소스를 구성합니다. 이렇게 하면 다른 요청 유형과 구별하는 데 도움이 됩니다.
  3. 정적 콘텐츠 처리를 위한 필터 구현: /* URL 패턴을 수신하는 필터를 만듭니다. 이 필터는 정적 콘텐츠에 대한 요청을 기본 서블릿에 투명하게 전달해야 합니다. 동적 처리를 위한 요청의 경우 필터는 요청을 컨트롤러 서블릿으로 전달해야 합니다.

필터의 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);
}

이것은 필터를 사용하면 브라우저 주소 표시줄을 변경하지 않고도 정적 리소스를 제공할 수 있습니다. 또한 필터의 초기화 매개변수를 사용하여 "/static" 및 "/pages" 경로를 사용자 정의할 수 있습니다.

위 내용은 /*에 매핑된 Global Front Controller 서블릿을 사용할 때 정적 리소스를 제공하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.