httpservletrequest - servlet java ejemplo
HttpServletRequest para completar la URL (9)
Algo tarde para la fiesta, pero lo incluí en mi biblioteca MarkUtils-Web en WebUtils - aprobado por cheques y probado por JUnit:
import javax.servlet.http.HttpServletRequest;
public class GetRequestUrl{
/**
* <p>A faster replacement for {@link HttpServletRequest#getRequestURL()}
* (returns a {@link String} instead of a {@link StringBuffer} - and internally uses a {@link StringBuilder})
* that also includes the {@linkplain HttpServletRequest#getQueryString() query string}.</p>
* <p><a href="https://gist.github.com/ziesemer/700376d8da8c60585438"
* >https://gist.github.com/ziesemer/700376d8da8c60585438</a></p>
* @author Mark A. Ziesemer
* <a href="http://www.ziesemer.com."><www.ziesemer.com></a>
*/
public String getRequestUrl(final HttpServletRequest req){
final String scheme = req.getScheme();
final int port = req.getServerPort();
final StringBuilder url = new StringBuilder(256);
url.append(scheme);
url.append("://");
url.append(req.getServerName());
if(!(("http".equals(scheme) && (port == 0 || port == 80))
|| ("https".equals(scheme) && port == 443))){
url.append('':'');
url.append(port);
}
url.append(req.getRequestURI());
final String qs = req.getQueryString();
if(qs != null){
url.append(''?'');
url.append(qs);
}
final String result = url.toString();
return result;
}
}
Probablemente la respuesta más rápida y más sólida aquí hasta ahora detrás de la de Mat Banik, pero incluso la suya no tiene en cuenta las posibles configuraciones de puertos no estándar con HTTP / HTTPS.
Ver también:
Tengo un objeto HttpServletRequest
.
¿Cómo obtengo la URL completa y exacta que hizo que esta llamada llegara a mi servlet?
O al menos con la mayor precisión posible, ya que quizás hay cosas que pueden regenerarse (quizás el orden de los parámetros).
Combinar los resultados de getRequestURL()
y getQueryString()
debería obtener el resultado deseado.
El HttpServletRequest
tiene los siguientes métodos:
-
getRequestURL()
: devuelve la parte de la URL completa antes de consultar el carácter de separador de cadena?
-
getQueryString()
: devuelve la parte de la URL completa después del carácter separador de la cadena de consulta?
Entonces, para obtener la URL completa, simplemente haz:
public static String getFullURL(HttpServletRequest request) {
StringBuilder requestURL = new StringBuilder(request.getRequestURL().toString());
String queryString = request.getQueryString();
if (queryString == null) {
return requestURL.toString();
} else {
return requestURL.append(''?'').append(queryString).toString();
}
}
En un proyecto de primavera puedes usar
UriComponentsBuilder.fromHttpRequest(new ServletServerHttpRequest(request)).build().toUriString()
HttpUtil está en desuso, este es el método correcto
StringBuffer url = req.getRequestURL();
String queryString = req.getQueryString();
if (queryString != null) {
url.append(''?'');
url.append(queryString);
}
String requestURL = url.toString();
Puedes usar el filtro.
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
HttpServletRequest test1= (HttpServletRequest) arg0;
test1.getRequestURL()); it gives http://localhost:8081/applicationName/menu/index.action
test1.getRequestURI()); it gives applicationName/menu/index.action
String pathname = test1.getServletPath()); it gives //menu/index.action
if(pathname.equals("//menu/index.action")){
arg2.doFilter(arg0, arg1); // call to urs servlet or frameowrk managed controller method
// in resposne
HttpServletResponse httpResp = (HttpServletResponse) arg1;
RequestDispatcher rd = arg0.getRequestDispatcher("another.jsp");
rd.forward(arg0, arg1);
}
no olvide poner <dispatcher>FORWARD</dispatcher>
en la asignación de filtros en web.xml
Utilice los siguientes métodos en el objeto HttpServletRequest
java.lang.String getRequestURI() devuelve la parte de la URL de esta solicitud desde el nombre del protocolo hasta la cadena de consulta en la primera línea de la solicitud HTTP.
java.lang.StringBuffer getRequestURL() -Reconstruye la URL que el cliente usó para realizar la solicitud.
java.lang.String getQueryString() devuelve la cadena de consulta que está contenida en la URL de la solicitud después de la ruta.
Yo uso este método:
public static String getURL(HttpServletRequest req) {
String scheme = req.getScheme(); // http
String serverName = req.getServerName(); // hostname.com
int serverPort = req.getServerPort(); // 80
String contextPath = req.getContextPath(); // /mywebapp
String servletPath = req.getServletPath(); // /servlet/MyServlet
String pathInfo = req.getPathInfo(); // /a/b;c=123
String queryString = req.getQueryString(); // d=789
// Reconstruct original requesting URL
StringBuilder url = new StringBuilder();
url.append(scheme).append("://").append(serverName);
if (serverPort != 80 && serverPort != 443) {
url.append(":").append(serverPort);
}
url.append(contextPath).append(servletPath);
if (pathInfo != null) {
url.append(pathInfo);
}
if (queryString != null) {
url.append("?").append(queryString);
}
return url.toString();
}
// http://hostname.com/mywebapp/servlet/MyServlet/a/b;c=123?d=789
public static String getUrl(HttpServletRequest req) {
String reqUrl = req.getRequestURL().toString();
String queryString = req.getQueryString(); // d=789
if (queryString != null) {
reqUrl += "?"+queryString;
}
return reqUrl;
}