在server端获取客户端ip地址:http://hi.baidu.com/brnz/blog/item/2a0cc7c096079138e5dd3bb5.html
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
Charset编码基础
1. 通过Java Script发送的表单,总是用UTF-8
编码的。
2. 直接在浏览器地址栏里输入包含参数的URL,根据不同的浏览器和操作系统的设置,会有不同的结果:
例如,中文Windows中,无论ie还是firefox,经试验,默认都以GBK
来编码参数。IE对直接输入的参数,连URL encoding也没做。
而在mac系统中,无论safari还是firefox,经试验,默认都是以UTF-8
来编码参数。
参数值entity解码
浏览器在提交表单时,如果发现被提交的字符不能以当前的charset来编码,浏览器就会把该字符转换成&#unicode;
这样的形式。例如,假设一个表单页面的content type为:text/html; charset=ISO-8859-1
。在这个页面的输入框中输入汉字“你好”,然后提交。你会发现,提交的汉字变成了这个样子:param=
"你好"
。
解析GET请求的参数
GET请求是最简单的请求方式。它的参数以URL编码的方式包含在URL中。当你在浏览器地址栏中敲入“http://localhost:8081/user/login.htm?name=%E5%90%8D%E5%AD%97&password=password
”这样一个址址的时候,浏览器就会向localhost:8081
服务器出如下HTTP请求:
GET /user/login.htm?name=%E5%90%8D%E5%AD%97&password=password HTTP/1.1
Host: localhost:8081
GET请求中的参数是以application/x-www-form-urlencoded
方式和特定的charset编码的。假如用来编码URL参数的charset与应用的默认charset不同,那么你必须通过特殊的参数来指定charset(参见第 7.2 节 “<set-locale>
-设置locale区域和charset字符集编码”):
GET /user/login.htm?_input_charset=UTF-8&name=%E5%90%8D%E5%AD%97&password=password HTTP/1.1
可是,上面的请求在不同的Servlet引擎中,会产生不确定的结果。这是怎么回事呢?
原来,尽管<set-locale>
会调用request.setCharacterEncoding(charset)
这个方法来设置input charset编码,然而根据Servlet API的规范,这个设定只能对request content生效,而不对URL生效。换句话说,request.setCharacterEncoding(charset)
方法只能用来解析POST请求的参数,而不是GET请求的参数。
那么,应该怎样处理GET请求的参数呢?根据URL规范,URL中非US-ASCII的字符必须进行基于UTF-8
的URL编码。然而实际上,从浏览器到服务器,没有人完全遵守这些规范,于是便造成了一些混乱。目前应用服务器端,我们所遇到的,有下面几种不同的解码方案:
http://www.openwebx.org/docs/requestcontexts.html
分享到:
相关推荐
标题中的“Flex整合J2EE开发小记+源码下载”揭示了本次讨论的主题,即如何将Adobe Flex技术与Java企业版(J2EE)框架相结合进行应用开发,并且提供了相关的源代码供学习和参考。Flex是一种用于构建富互联网应用程序...
j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar架包j2ee.jar...
j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee j2ee
它包括了组成J2EE平台的技术以及描述如何开发J2EE组件并部署在J2EE软件开发包上。 这篇指南不是为J2EE服务器及工具供应商准备的,它没有解释如何实现J2EE结构,也没有解释J2EE软件包。J2EE规范描述了J2EE结构并可以...
这篇小记主要关注了几个关键领域:持久层、MVC框架、视图层、JavaScript库以及缓存技术。下面将详细阐述这些知识点。 1. **持久层**: - **Hibernate**:是一个流行的ORM(对象关系映射)框架,允许开发者以面向...
J2EE J2EE J2EE J2EE J2EE J2EE J2EE J2EE J2EE J2EE J2EE J2EE
### J2EE 指南知识点详解 #### J2EE 概述 J2EE(Java 2 Platform, Enterprise Edition)是一种广泛应用于企业级应用程序开发的平台标准和技术框架。它基于Java SE,并针对大型分布式系统提供了更为丰富的特性和功能...
Java 企业版(Java 2 Platform, Enterprise Edition,简称 J2EE)是 Sun Microsystems 推出的用于构建分布式、多层企业级应用的框架。它为开发者提供了多种服务和组件模型,包括Java Servlets、JavaServer Pages ...
J2EE(Java 2 Platform, Enterprise Edition)是Oracle公司推出的用于构建企业级分布式应用程序的框架,它提供了服务器端的编程模型和运行环境,支持多种服务,如事务处理、安全、集群、数据库连接等。本实例集合将...
Java企业版(J2EE,现称为Java EE)是一个用于构建企业级分布式应用程序的平台,它基于Java技术,提供了一套全面的API和服务。这份"J2EE试题汇总"包含了大量关于J2EE的试题,旨在帮助学习者检验和提升在J2EE领域的...
**J2EE包介绍** J2EE(Java 2 Platform, Enterprise Edition)是Java平台的企业版,用于构建和部署分布式企业级应用程序。J2EE包通常包含一系列的库和技术,这些技术涵盖了从数据库连接、事务处理到Web服务等多个...
J2EE 体系架构介绍 J2EE(Java 2 Platform, Enterprise Edition)是一种用于开发企业级应用程序的Java平台。J2EE 体系架构是指基于 J2EE 平台所构建的应用程序架构。 HandsOnJ2EE 体系架构介绍 J2EE 体系架构是...
### J2EE指南知识点梳理 #### 一、J2EE平台简介 - **定义与背景**:J2EE(Java 2 Platform, Enterprise Edition)是一个用于开发和部署可移植、健壮、可伸缩且安全的多层Web应用的企业级Java平台。1993年8月,随着...
j2ee.jar j2ee.jar j2ee.jar j2ee.jar j2ee.jar
**J2EE 1.5 API 文档详解** J2EE 1.5 API文档是Java企业版(Java Enterprise Edition)开发人员的重要参考资料,它详细介绍了J2EE 1.5版本中的各种组件、接口、类和方法,为开发者提供了全面的API规范和技术指导。...
【J2EE网上购物系统】是一个基于Java企业版(J2EE)技术构建的电子商务平台。J2EE是Oracle公司推出的用于开发分布式、多层应用程序的框架,它提供了丰富的服务和组件模型,使得开发者能够构建可扩展且健壮的网络应用...
【标题】:“非常简单的J2EE购物车” 【描述】:“非常简单的J2EE购物车是一个基础的电子商务项目,旨在帮助初学者理解J2EE技术在构建web应用程序时的应用,特别是如何实现一个基本的购物车功能。这个项目可能涵盖...