Domanda

Ho un'applicazione J2EE con un servizio web che va come

http://servername/service?task=getFile&id=25

Come posso convertire questo tipo di URL da

http://servername/service/getFile/25
http://servername/service/getFile/26

etc?

Si prega di fornire i vostri suggerimenti.

È stato utile?

Soluzione

Al punto, si vuole così a avanti amichevole URL di un ostile URL (in modo che non c'è bisogno di cambiare richiesta di parametri raccolta logica del servlet esistenti) e di redirect ostile URL di un amichevole URL (in modo che il amichevole URL ottenere riflette nella barra degli indirizzi del browser del client).

Il posto migliore per questo è una Filter. Per accedere al HttpServletRequest, appena ServletRequest abbattuta a HttpServletRequest. È possibile ottenere la stringa di query da getQueryString() e si può ottenere la pathinfo da getRequestURI() . Ecco un esempio kickoff:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    throws IOException, ServletException
{
    HttpServletRequest httpreq = (HttpServletRequest) request;
    String query = httpreq.getQueryString();
    if (query != null) {
        // Unfriendly URL invoked. Convert params to pathinfo and redirect.
        StringBuffer newURL = httpreq.getRequestURL();
        for (String param : query.split("&")) {
            newURL.append('/').append(param.substring(param.indexOf('=') + 1));
        }
        ((HttpServletResponse) response).sendRedirect(newURL.toString());
    } else {
        // Friendly URL invoked. Convert pathinfo to params and forward.
        String[] parts = httpreq.getRequestURI().replace(httpreq.getContextPath(), "").split("/");
        String newURL = String.format("%s?task=%s&id=%s", parts[1], parts[2], parts[3]);
        httpreq.getRequestDispatcher(newURL).forward(request, response);
    }
}

È possibile, naturalmente, anche afferrare il UrlRewriteFilter citata.

Altri suggerimenti

È possibile utilizzare il UrlRewriteFilter al fine di raggiungere questo obiettivo. Sarà sufficiente scrivere le regole per la riscrittura, simile a mod_rewrite. Per esempio :

<rule>
    <from>^/products/([0-9]+)$</from>
    <to>/products/index.jsp?product_id=$1</to>
</rule>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top