Konvertieren von GET -Methoden -URLs in logische permanente Links
-
22-09-2019 - |
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.
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>