Global Front Controller Servlet을 /*에 매핑할 때 정적 리소스에 액세스*
/*에 Global Front Controller Servlet을 매핑하면 정적 리소스에 대한 액세스를 방지할 수 있습니다. 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>
필터 구현:
import javax.servlet.*; import javax.servlet.http.HttpServletRequest; public class Filter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException { 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); } } @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void destroy() { } }
컨트롤러 서블릿 매핑:
<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>
이 접근 방식을 사용하면 다른 요청을 컨트롤러 서블릿으로 전달하면서 정적 콘텐츠를 투명하게 제공할 수 있습니다.
위 내용은 /*에 매핑된 Global Front Controller 서블릿을 사용하여 정적 리소스에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!