servlet mvc configurar servlets

servlets - mvc - css spring



Cómo evitar que los recursos estáticos sean manejados por el servlet del controlador frontal que está mapeado en/* (2)

Sé que esta es una vieja pregunta y creo que la respuesta de @BalusC probablemente funciona bien. Pero no pude modificar la URL de la aplicación JSF en la que estoy trabajando, así que simplemente verifico la ruta y regreso si se trata de recursos estáticos:

String path = request.getRequestURI().substring(request.getContextPath().length()); if (path.contains("/resources/")) { return; }

Esto funciona bien para mi.

Tengo un servlet que actúa como controlador frontal.

@WebServlet("/*")

Sin embargo, esto también maneja CSS y archivos de imagen. ¿Cómo puedo prevenir esto?


Tienes 2 opciones:

  1. Use un patrón de URL más específico como /app/* o *.do y luego permita que todas las solicitudes de su página coincidan con este patrón de URL. Ver también aplicaciones basadas en la web de Design Patterns

  2. Lo mismo que 1, pero desea ocultar la asignación de servlet desde la URL de solicitud; a continuación, debe colocar todos los recursos estáticos en una carpeta común como /static o /resources y crear un filtro que compruebe si la URL de solicitud no coincide y luego reenviar al servlet. Aquí hay un ejemplo que asume que su servlet de controlador es @WebServlet("/app/*") y que el filtro es un @WebFilter("/*") y que todos sus recursos estáticos están en /resources carpeta /resources .

    HttpServletRequest req = (HttpServletRequest) request; String path = req.getRequestURI().substring(req.getContextPath().length()); if (path.startsWith("/resources/")) { chain.doFilter(request, response); // Goes to default servlet. } else { request.getRequestDispatcher("/app" + path).forward(request, response); // Goes to your controller. }

    Consulte también Cómo acceder a recursos estáticos al mapear un servlet de controlador frontal global en / * .