日期:2014-05-19  浏览次数:20768 次

j2ee小记

在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

    ?

    ?