que parameter httpservletrequest getservletpath getpart getparameter entre diferencia clase java servlets

java - parameter - request getservletpath



Diferencia entre getLocalPort() y getServerPort() en los servlets (3)

Estoy estudiando servlets, he encontrado una diferencia entre getLocalPort() y getServerPort() . Aquí, getLocalPort() significa solo en el lado del servidor, ¿cuál es el significado de getServerPort() ?

Gracias.


En una configuración simple (donde el contenedor de su servidor / servlet de aplicaciones acepta la solicitud del cliente directamente), ambos métodos devolverán el mismo valor.

Cuando el contenedor de servlets no es la aplicación que acepta la solicitud del cliente (por ejemplo, cuando utiliza un servidor HTTP Apache con mod_jk para aceptar la solicitud y reenviar la solicitud a una instancia de Tomcat a través de AJP), getServerPort() devolverá el puerto el cliente conectado a (probablemente 80, cuando se usa el puerto predeterminado) y getLocalPort() devolverá el puerto que Tomcat utilizó para aceptar la conexión desde el servidor HTTP (probablemente 8009 o algo similar).


Miré la implementación de Jetty y Tomcat del puerto del servidor, y estos son mis descubrimientos:

  1. Cuando la URL de la solicitud tiene un número de puerto (p. Ej., Http (s): //website.com: 8888 / blah / blah-blah), el getServerPort () siempre devuelve lo que estaba incluido en la URL de la solicitud (en el ejemplo, 8888 )
  2. Cuando la URL de la solicitud no tiene un número de puerto, entonces
    • 443 será devuelto si
      • Tomcat ve SSLEnabled = true
      • Jetty ve esquema = https
    • 80 serán devueltos si
      • ve SSLEnabled = falso
      • Jetty ve esquema = http

Por lo tanto, getServerPort () no tiene nada que ver con el servidor HTTP de apache o el equilibrador de carga que se encuentra frente a él (si corresponde), o las rutas de tabla de IP que se encuentran en el servidor Tomcat / Jetty. Siempre devolverán un número de puerto estándar basado en http / https, a menos que se especifique un número de puerto en la URL de la solicitud.


Veamos lo que dice el javadoc sobre getLocalPort() :

Devuelve el número de puerto del Protocolo de Internet (IP) de la interfaz en la que se recibió la solicitud.

Y esto es lo que podemos leer sobre getServerPort() :

Devuelve el número de puerto al que se envió la solicitud. Es el valor de la parte después de ":" en el valor del encabezado del Host, si corresponde, o del puerto del servidor donde se aceptó la conexión del cliente.

Por lo tanto, si un cliente envía una solicitud a http://mydomain.com:80/ que luego se "enruta" a un contenedor que escucha en otro puerto (y quizás otra máquina), getServerPort() devolverá 80 y getLocalPort() devuelva el puerto del contenedor al que se reenvió la solicitud, digamos 7001 para una instancia de WebLogic que escuche ese puerto.