2012-11-23 9 views

risposta

18

hai 2 opzioni:

  1. utilizzare un modello di URL più specifici come /app/* o *.do e poi lasciare che tutte le vostre richieste di pagina corrispondono a questo pattern URL. Vedi anche Design Patterns web based applications

  2. Uguale a 1, ma si desidera nascondere il mapping della servlet dall'URL della richiesta; dovresti quindi inserire tutte le risorse statiche in una cartella comune come /static o /resources e creare un filtro che controlli se l'URL della richiesta non corrisponde e quindi inoltra al servlet. Ecco un esempio che presuppone che il servlet del controller sia un @WebServlet("/app/*") e che il filtro sia un @WebFilter("/*") e che tutte le risorse statiche siano nella cartella /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. 
    } 
    

    Vedere anche How to access static resources when mapping a global front controller servlet on /*.

+0

BalusC, grazie! – Vadim

+0

@BalusC perché la risorsa statica genera 404 quando caricata tramite controller. Ho avuto un filtro mappato con/*. Mentre il file jquery caricato getta e l'errore 404 - risorsa non trovata. L'ho risolto utilizzando la soluzione che hai fornito sopra. Puoi chiarire i miei dubbi? –

0

So che questa è una vecchia domanda e credo che la risposta di @BalusC probabilmente funzioni correttamente. Ma non riuscivo a modificare l'URL per l'applicazione JSF sto lavorando, quindi ho semplicemente controllare il percorso e ritornare se si tratta di risorse statiche:

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

Questo funziona bene per me.

Problemi correlati