¿Cómo puedo utilizar un filtro de servlet para cambiar una petición de servlet URL entrante desde¿Cómo utilizar un filtro de servlet en Java para cambiar una url de solicitud de servlet entrante?
http://nm-java.appspot.com/Check_License/Dir_My_App/Dir_ABC/My_Obj_123
a
http://nm-java.appspot.com/Check_License?Contact_Id=My_Obj_123
?
actualización: de acuerdo a los pasos de BalusC abajo, se me ocurrió el siguiente código:
public class UrlRewriteFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
//
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
String requestURI = request.getRequestURI();
if (requestURI.startsWith("/Check_License/Dir_My_App/")) {
String toReplace = requestURI.substring(requestURI.indexOf("/Dir_My_App"), requestURI.lastIndexOf("/") + 1);
String newURI = requestURI.replace(toReplace, "?Contact_Id=");
req.getRequestDispatcher(newURI).forward(req, res);
} else {
chain.doFilter(req, res);
}
}
@Override
public void destroy() {
//
}
}
La entrada correspondiente en web.xml
tener este aspecto:
<filter>
<filter-name>urlRewriteFilter</filter-name>
<filter-class>com.example.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Probé tanto el lado del servidor como el lado del cliente redirigen con los resultados esperados. Funcionó, gracias BalusC!
pregunta relacionada: http://stackoverflow.com/questions/2723829/how-to-catch-non-exist-requested-url-in-java-servlet – BalusC
¿Qué versión de la especificación servlet está usando ? Cómo envías solicitudes de cambios con las diferentes versiones. –
[Ver esta publicación] (http://stackoverflow.com/questions/2283237/most-useful-java-servlet-filter-out-there) también tiene un filtro que hace lo que quiere –