文档章节

servlet中request方法解析

sunru
 sunru
发布于 2017/06/01 17:27
字数 703
阅读 13
收藏 0
  • 一.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

 

© 著作权归作者所有

共有 人打赏支持
sunru
粉丝 4
博文 71
码字总数 21332
作品 0
南京
私信 提问
Servlet容器原型(一)—— 一个简单的Servlet容器

在javax.servlet.servlet中的Servlet接口,声明有5个方法,签名如下: public void int(ServletConfig config) throws ServletException;public void service(ServletRequest request, Serv......

Glogo
2014/02/27
0
0
Servlet 工作原理解析

该文深入的介绍了 J2EE 中使用最广泛的 Servlet 技术运行原理,不管对于初学者还是高手来说都非常值得一看。 从 Servlet 容器说起 要介绍 Servlet 必须要先把 Servlet 容器说清楚,Servlet 与...

红薯
2011/02/25
8.1K
10
走进JavaWeb技术世界4:Servlet 工作原理详解

本文出自我的公众号:程序员江湖。 满满干货,关注就送。 从本篇开始,正式进入Java核心技术内容的学习,首先介绍的就是Java web应用的核心规范servlet 转自:https://www.ibm.com/developer...

你的猫大哥
2017/09/22
0
0
Servlet简介与Servlet和HttpServlet运行的流程

1.Servlet [1] Servlet简介 > Server + let > 意为:运行在服务器端的小程序。 > Servlet实际上就是一个接口。 - 狭义上的Servlet,指的就是Servlet接口 - 广义上的我们认为凡是实现Servlet...

architect刘源源
09/09
0
0
tomcat源码分析-http请求在Container中的执行路线

在CoyoteAdapter的service方法中,主要干了2件事: 1. org.apache.coyote.Request -> org.apache.catalina.connector.Request extends HttpServletRequest org.apache.coyote.Response -> o......

javahongxi
2017/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

windows 下 es安装ik后报错无法启动

1、没有安装分词器时可以正常启动 2、在安装分词器后就报错了 错误信息:Exception in thread "main" java.security.AccessControlException: access denied ("java.io.FilePermission" "D...

zhu_kai1
4分钟前
0
0
ReactNative入门教程-组件生命周期函数

1.组件实例化阶段 defaultProps: 设置组件的初始属性值,比如设置默认Color,width等,可以在通过this.props获取相应的值 constructor(props): 这里通过this.props可以获取defaultProps设置的...

凌宇之蓝
7分钟前
0
0
java使用bytebuddy动态生成带泛型的DTO

我这人文笔很low,喜欢直接贴代码,大家将就着看 //TODO 文字描述,回头有空再补上 package com.valsong.bytebuddy;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.Type...

ValSong
10分钟前
1
0
智能支付稳定性测试实战

本文根据美团高级测试开发工程师勋伟在美团第43期技术沙龙“美团金融千万级交易系统质量保障之路”的演讲整理而成。主要介绍了美团智能支付业务在稳定性方向遇到的挑战,并重点介绍QA在稳定性...

美团技术团队
12分钟前
0
0
Visual Studio Code 相关插件

Vue 开发工具:Visual Studio Code 相关插件: Chinese Auto Close Tag Auto Rename Tag Vetur ESLint Vue VS Code Extension Pack TortoiseSVN Debugger for Chrome...

华山猛男
15分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部