5.2.3 获得网络连接信息
由于客户端浏览器和服务端进行交互是建立在TCP连接基础上的,因此,有时在服务端就需要知道客户端的一些网络连接信息,因此,ServletRequest接口定义了若干可以获得网络连接信息的getter方法。通过这些方法,可以获得客户端和服务端的IP、端口以及访问协议等信息。
假设客户端的IP是192.168.18.10,服务器的IP是192.168.18.254,服务器主机名是webserver。并通过如下的URL来访问Servlet。
http://localhost:8080/demo/servlet/TestServlet?name=mike&age=52
使用上面的URL访问Sevlet将产生如下的HTTP请求消息:
GET /demo/servlet/TestServlet?name=mike&age=52 HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0
Host: localhost:8080
Connection: Keep-Alive
下面是ServletRequest接口中定义的用于获得网络连接信息的方法:
1. getRemoteAddr方法
该方法返回客户机用于发送请求的IP地址(192.168.18.10)。
2. getRemoteHost方法
该方法返回发出请求的客户机的主机名。如果Servlet引擎不能解析出客户机的主机名,则返回客户端的IP地址(192.168.18.10)。
3. getRemotePort方法
该方法返回客户机所使用的网络接口的端口号,这个值是由客户机的网络接口随机分配的,如1078,也有可能是其他的值。
4. getLocalAddr方法
该方法返回Web服务器上接收请求的网络接口使用的IP地址(192.168.18.254)。
5. getLocalName方法
该方法返回Web服务器上接收请求的网络接口使用的IP地址所对应的主机名(webserver)。
6. getLocalPort方法
该方法返回Web服务器上接收请求的网络接口的端口号(8080)。
7. getServerName方法
该方法返回HTTP请求消息的Host字段值的主机名部分(localhost)。
8. getServerPort方法
该方法返回HTTP请求消息的Host字段值的端口号部分(8080)。
9. getScheme方法
该方法返回请求的协议名,如http、https等,在本例中是http。
10. getRequestURL方法
该方法返回完整的请求URL(不包括参数部分)。这个方法返回的是StringBuffer类型,而不是String类型。在本例中返回“http://localhost:8080/demo/servlet/TestServlet”。要注意该方法和getRequestURI方法的区别。关于getRequestURI方法的介绍详见5.2.1节的内容。