- 浏览: 89584 次
- 性别:
- 来自: 上海
文章分类
最新评论
环境:
tomcat5.6
JSP
UTF-8
IP协议:IPv4,IPv6
服务器和访问者在同一机器上。
问题描述
上传文件时,为了避免文件名重复,打算利用IP地址+时间戳的方式和给文件命名。但是,从本机上访问本机服务器时,利用request.getRemoteAddr()函数获取IP地址,得到的是0:0:0:0:0:0:0:1。因为是按IPv4的方式和解析的,所以使得保存文件失败。
[b]原因及解决方案[/b]
因为机器上启用的IPv6协议,所以在对localhost进DNS解析时,得到的是IPv6形式的本机地址0:0:0:0:0:0:0:1。因此在利用http://localhost:8080/demo/ 访问时,request.getRemoteAddr()函数才会得到上面的结果。
可以修改hosts文件。位置:C:\Windows\System32\drivers\etc。添加上一句127.0.0.1 localhost,这样request.getRemoteAddr()函数得到的将是127.0.0.1。
此外,利用别的机器来访问本机服务器,则不会出现上述上问题,能够取得它的IPv4地址。对于网上所说的因为tomcat的反向代理,使得request.getRemoteAddr()无法获得客户端真实IP的问题,我目前还不是很理解。
关于hosts文件
hosts文件相当于一个位于本地的IP地址到域名的映射文件,可以提供DNS解析。如果想访问的网站被域名污染(域名劫持),可以预先将IP,域名对写入hosts文件。
tomcat5.6
JSP
UTF-8
IP协议:IPv4,IPv6
服务器和访问者在同一机器上。
问题描述
上传文件时,为了避免文件名重复,打算利用IP地址+时间戳的方式和给文件命名。但是,从本机上访问本机服务器时,利用request.getRemoteAddr()函数获取IP地址,得到的是0:0:0:0:0:0:0:1。因为是按IPv4的方式和解析的,所以使得保存文件失败。
[b]原因及解决方案[/b]
因为机器上启用的IPv6协议,所以在对localhost进DNS解析时,得到的是IPv6形式的本机地址0:0:0:0:0:0:0:1。因此在利用http://localhost:8080/demo/ 访问时,request.getRemoteAddr()函数才会得到上面的结果。
可以修改hosts文件。位置:C:\Windows\System32\drivers\etc。添加上一句127.0.0.1 localhost,这样request.getRemoteAddr()函数得到的将是127.0.0.1。
此外,利用别的机器来访问本机服务器,则不会出现上述上问题,能够取得它的IPv4地址。对于网上所说的因为tomcat的反向代理,使得request.getRemoteAddr()无法获得客户端真实IP的问题,我目前还不是很理解。
关于hosts文件
hosts文件相当于一个位于本地的IP地址到域名的映射文件,可以提供DNS解析。如果想访问的网站被域名污染(域名劫持),可以预先将IP,域名对写入hosts文件。
public static String getAddressIP(HttpServletRequest request) { String ipAddress = null; ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1")) { // Based on the IP network card in the machine configuration InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress = inet.getHostAddress(); } } // In the case of through multiple agents, // the first real IP IP for the client, // multiple IP in accordance with the ', 'segmentation if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() // = 15 if (ipAddress.indexOf(",") > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } } return ipAddress; }
发表评论
-
追踪应用客户端IP
2013-08-22 09:53 730参考: http://www.knowsky.co ... -
java多线程发送URL请求
2013-07-19 11:32 1204import java.io.Buffered ... -
java启用多进程调用某个类(是class文件)
2013-07-19 11:29 653import java.io.BufferedInpu ... -
支持Window和Linux下tar.gz文件压缩
2013-07-04 19:12 989最近做文件压缩,最后在Window下压缩解压后都可以,可是在W ... -
请慎用java的File#renameTo(File)方法
2013-07-03 12:14 558转自: http://xiaoych.iteye.com/bl ... -
java从tar.gz中抽取某个文件
2013-07-01 15:03 1324File tarGzFile = new File(a ... -
在不同jar文件中有两个同名类是加载的哪一个已经classload
2013-06-24 09:33 1469在Eclipse中加载第一个(通常是lib下面的顺序,但并非一 ... -
Java泛型的使用及List排序
2013-04-19 09:56 973import java.util.ArrayLis ... -
java删除一个文件夹,包括该文件夹下的所有文件夹及文件
2013-04-10 17:42 785要删除的文件必须存在且是一个文件夹,可以根据自己的需求,在调用 ... -
java压缩文件生成XXX.tar.gz压缩包
2013-04-09 13:42 2261生成XXX.tar.gz压缩文件有两种方式,可以先打包后压缩, ... -
java按照编码读写文件
2013-04-07 09:28 801package d20130406; impor ... -
java字符串中显示双引号
2013-04-19 09:58 1209转: http://www.cnblogs.com/zhish ... -
java写入txt文件
2013-04-19 09:59 639用另一个构造方法FileWriter fileWriter=n ... -
读取文件方法大全
2013-04-25 11:51 283转自: http://www.cnblogs.com/love ... -
Java性能监测
2013-04-15 13:20 570通过jdk自带工具监测: -
Java 32bit JVM Xmx 参数大小限制
2013-03-07 13:26 1423转自: http://stackoverflow.com/qu ... -
Java模拟HTTP发送请求
2013-04-15 13:17 757package com.hp.pn.service; ... -
tomcat配置文件
2013-03-01 13:51 635转自: http://www.cnblogs.com/smil ... -
PermGen space错误解决方法,java.lang.OutOfMemoryError
2013-03-01 11:07 797转自: http://www.cnblogs.com/xwdr ... -
<context-param>与<init-param>的区别与作用
2013-02-28 09:41 567转载: http://www.cnblogs.com/hzj- ...
相关推荐
- `request.getRemoteAddr()`: 返回发起请求的客户端IP地址。 - `request.getRemoteHost()`: 返回发起请求的客户端主机名。 2. **编码与内容信息** - `request.getCharacterEncoding()`: 返回请求的字符编码集...
- `request.getRemoteAddr()`:获取客户端IP。 - `request.getServerName()`:获取服务器名称。 - `request.getServerPort()`:获取服务器端口号。 - `request.getScheme()`:获取协议名,如HTTP或HTTPS。 - `...
在Java Web应用开发中,`HttpServletRequest`对象,通常简称为`request`,是Servlet API中的一个核心接口,用于封装客户端的HTTP请求信息。本案例旨在深入理解并掌握`request`对象的各种常用方法及其应用场景。以下...
当Servlet容器(如Tomcat、Jetty等)启动时,或者当容器首次接收到需要特定Servlet服务的请求时,Servlet类会被加载并实例化。如果在`web.xml`配置文件中,Servlet被标记为`load-on-startup`,那么它会在容器启动时...
11. 获取表单信息:request对象的getParameter方法(选项A)用于获取表单特定字段的值。 12. response对象:response对象(选项A)负责向客户端发送数据,对用户的请求做出响应。 13. 会话期:会话从访问者打开...
System.out.println("请求参数1:" + param1); System.out.println("请求参数2的值:" + Arrays.toString(param2Values)); System.out.println("Content-Type请求头:" + contentType); System.out.println(...
在Java Web开发中,Servlet API是核心组件之一,它提供了处理HTTP请求和响应的方法。...在实际项目中,结合Servlet容器如Tomcat,我们可以利用这些方法来解析和响应客户端的请求,实现服务器端的功能逻辑。
Tomcat是一款免费开源的Servlet容器,它支持Java Servlet以及JSP技术。 ##### Tomcat的安装与配置 1. **下载与安装** 下载最新版本的Tomcat并解压到指定路径。 2. **环境变量配置** - 设置`CATALINA_HOME`: ...
11. **获取IP地址**:在JSP中,可以使用`<%= request.getRemoteAddr() %>`来获取客户端IP。 12. **Session**:存储用户特定的持久信息,创建时调用`session = request.getSession();`,赋值`session.setAttribute(...
1. **配置Servlet**:首先,在IntelliJ IDEA中创建一个Java Web项目,然后添加Servlet类。继承`javax.servlet.http.HttpServlet`,并在`doGet`或`doPost`方法中处理请求。 ```java import javax.servlet....
- Servlet容器(如Tomcat)会在第一次请求Servlet时加载该Servlet,或者按照部署描述符中的配置来决定加载时机。 25. **后续知识点补充:** - 接下来的内容未能完整提供,但从前面的内容可以看出,涉及了Java ...
String remoteIP = request.getRemoteAddr(); if (remoteIP.equals(rejectedIP)) { // 如果请求的IP与拒绝的IP相同,重定向到错误页面 RequestDispatcher dispatcher = request.getRequestDispatcher(...
Servlet容器(如Tomcat)负责加载和运行Servlet,当特定请求到达时,容器会实例化Servlet类并调用其中的方法,如`doGet`或`doPost`,来处理请求并生成应答。 Servlet的生命周期包括以下几个阶段: 1. **初始化**:...
- 加载和实例化:当第一个请求到达时,Servlet容器(如Tomcat)加载Servlet类并创建一个实例。 - 初始化:Servlet实例创建后,`init()`方法会被调用,这里可以进行一次性配置或初始化工作。 - 服务:每当收到请求...
1. `getHeader(String name)`:根据指定的头部名称,返回第一个匹配的请求头的值。如果不存在,则返回`null`。 2. `getHeaders(String name)`:返回一个`Enumeration<String>`,包含所有匹配指定头部名称的值。如果...
1. **Servlet基础**: - **Servlet接口**:Servlet是Java Servlet API中的核心接口,它定义了一个服务器端程序,可以响应来自客户端(通常是浏览器)的请求。Servlet生命周期包括初始化、服务、销毁三个阶段。 - *...
`request.getRemoteAddr()`返回客户端IP,`request.getServerName()`和`request.getServerPort()`分别提供服务器名称和端口号,`request.getScheme()`和`request.getProtocol()`给出协议名称和版本,`request....
在 JSP 中,可以使用 `request.getRemoteAddr()` 方法获取访问者的 IP 地址。 5. forward 和 redirect forward 和 redirect 是两种不同的页面跳转机制: * forward:在服务器端跳转,客户端不知道跳转的过程 * ...
在Java Servlet中,我们可以使用`HttpServletRequest`接口的`getRemoteAddr()`方法来获取客户端的IP地址。例如: ```java protected void doGet(HttpServletRequest request, HttpServletResponse response) throws...
String remoteAddr = request.getRemoteAddr(); // 获得服务器的名字 String serverName = request.getServerName(); // 取得互联网程序的绝对地址 String realPath = request.getRealPath(serverName); ...