Frage

Ich habe eine J2EE -Anwendung mit einem Webdienst, der wie wie

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

Wie kann ich diese Art von URLs in konvertieren?

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

etc?

Bitte geben Sie Ihre Vorschläge an.

War es hilfreich?

Lösung

Auf den Punkt wollen Sie also nach vorne das freundlich URL zu an unfreundlich URL (damit Sie die vorhandene Anforderungsparameter -Sammellogik des Servlets nicht ändern müssen) und zu umleiten das unfreundlich URL zu an freundlich URL (so dass die freundlich Die URL wird in der Browseradressleiste des Clients reflektiert).

Der beste Ort dafür ist ein Filter. Zugreifen auf die HttpServletRequest, einfach niedergeschlagen ServletRequest zu HttpServletRequest. Sie können die Abfragezeichenfolge by erhalten getQueryString() und Sie können den Pathinfo von bekommen getRequestURI(). Hier ist ein Auftaktbeispiel:

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);
    }
}

Sie können natürlich auch die oben genannten greifen UrlRewriteFilter.

Andere Tipps

Du kannst den ... benutzen UrlRewriteFilter um dies zu erreichen. Sie müssen nur die Regeln für das Umschreiben schreiben, ähnlich wie mod_rewrite. Zum Beispiel:

<rule>
    <from>^/products/([0-9]+)$</from>
    <to>/products/index.jsp?product_id=$1</to>
</rule>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top