-
一.getRemoteAddr()和getRemoteHost()
System.out.println(req.getRemoteAddr());
System.out.println(req.getRemoteHost());
http://localhost:8080/jw_0526_servlet/login.jsp路径访问,得到的结果是
0:0:0:0:0:0:0:1
0:0:0:0:0:0:0:1
-
1.request.getRemoteAddr() 获取的值为0:0:0:0:0:0:0:1的原因及解决办法
最近在进行web开发时,在jsp页面获取服务器ip时,遇到了request.getRemoteAddr()获取的值为0:0:0:0:0:0:0:1,这是为什么呢,照道理讲,应该是127.0.0.1才对,为什么这个获取的值变成了ipv6了呢,而且我发现这种情况只有在服务器和客户端都在同一台电脑上才会出现(例如用localhost访问的时候才会出现),后来上网查了查原因,原来是/etc/hosts这个东西作怪(在windows上应该是C:\Windows\System32\drivers\etc\hosts这个文件),只需要注释掉文件中的 # ::1 localhost 这一行即可解决问题。另外localhost这个文件很有用,这里你可以添加自己的条目,例如添加 192.168.0.212 myweb 这样子,在浏览器中原来只能使用192.168.0.212来访问的,并可以使用myweb来进行替换。如果还不能解决,本机访问的时候用127.0.0.1或本机ip代替localhost即可解决
-
2.getRemoteAddr()和getRemoteHost()的区别
前一个是获得客户端的ip地址
后一个是获得客户端的主机名
那为什么得到的结果是一样的?
查看一下server.xml,connector中的enableLookups,如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名,若为false则不进行DNS查询,而是返回其ip地址。
由Connector接口定义.<Connector>元素代表与客户程序实际交互的给件,它负责接收客户请求,以及向客
户返回响应结果.
<Connector port="8080" maxThread="50" minSpareThreads="25" maxSpareThread="75"
enableLookups="false" redirectPort="8443" acceptCount="100" debug="0"
connectionTimeout="20000" disableUploadTimeout="true" />
<Connection port="8009" enableLookups="false" redirectPort="8443" debug="0"
protocol="AJP/1.3" />
第一个Connector元素定义了一个HTTP Connector,它通过8080端口接收HTTP请求;第二个Connector元素定
义了一个JD Connector,它通过8009端口接收由其它服务器转发过来的请求.
Connector元素共用属性
1>className指定实现Connector接口的类
2>enableLookups如果设为true,表示支持域名解析,可以把IP地址解析为主机名.WEB应用中调用
request.getRemoteHost方法返回客户机主机名.默认值为true
3>redirectPort指定转发端口.如果当前端口只支持non-SSL请求,在需要安全通信的场命,将把客户请求转
发至SSL的redirectPort端口。
-
二.getRequestURI()和getRequestURL()
System.out.println(req.getRequestURI());
输出结果为: /jw_0526_servlet/login.jsp
System.out.println(req.getRequestURL());
输出结果为:http://192.168.2.174:8080/jw_0526_servlet/login.jsp