tags:

views:

48

answers:

2

Hi I am studying servlets, I have come up with a doubt difference between getLocalPort() and getServerPort(). Here the getLocalPort() means server side only then whats the meaning of getServerPort()?

Thanks.

+3  A: 

In a simple setup (where your application server/servlet container accepts the request of the client directly) both methods will return the same value.

When the servlet container is not the application that accepts the client request (for example when you use an Apache HTTP server with mod_jk to accept the request and forward the request to a Tomcat instance via AJP), then getServerPort() will return the port the client connected to (probably 80, when the default port is used) and getLocalPort() will return the port that Tomcat used to accept the connection from the HTTP server (probably 8009 or something similar).

Joachim Sauer
+1  A: 

Let's see what the javadoc is saying about getLocalPort():

Returns the Internet Protocol (IP) port number of the interface on which the request was received.

And this is what we can read about getServerPort():

Returns the port number to which the request was sent. It is the value of the part after ":" in the Host header value, if any, or the server port where the client connection was accepted on.

So, if a client sends a request to http://mydomain.com:80/ that is then "routed" to a container listening on another port (and maybe another machine), getServerPort() will return 80 and getLocalPort() will return the port of the container to which the request was forwarded, let's say 7001 for a WebLogic instance listening to that port.

Pascal Thivent
I read the API when I first read the question, and it wasn't immediately obvious to me what the difference was until I saw Joachim's answer (and I do this for a living). So I think it's pretty reasonable for the original poster (who is "studying servlets") to struggle with the difference.
Jack Leow
@Jack Absolutely, I only pasted the API doc as reference (and for the host header stuff).
Pascal Thivent