??xml version="1.0" encoding="utf-8" standalone="yes"?> escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字W串的三个常用的Ҏ(gu) escapeҎ(gu)以Unicode格式q回一个包含传入参数内容的stringcd的倹{?EscapeҎ(gu)会将传入参数中所有的I格、标点符受重韛_W以及其它Q何非ASCII字符替换?xx的编码Ş式,其中xx与其所表示的字W的16q制数表CŞ式相同。如I格字符?6q制表示形式?x20Q则此时xx应ؓ(f)20Q即escape(‘ ’) q回“%20”?/p>
escape和unescapeҎ(gu)能够帮助你编码和解码字符丌ӀescapeҎ(gu)对于ISO Latin字符集中的字W组成的参数Q返回其16q制~码。相对应的,unescapeҎ(gu)则能?6q制~码形式的参数{化成为其ASCII码Ş式?/p>
encodeURI()Ҏ(gu) encodeURIҎ(gu)q回一个经q编码的URI。如果将encodeURIҎ(gu)的编码结果传递给decodeURIҎ(gu)作参敎ͼ则能得到原始的未~码的字W串。需要注意到是encodeURIҎ(gu)不编码如下字W?:", "/", ";", "?"。如果想要编码这些字W,请用encodeURIComponentҎ(gu)。通过每个属于特定的字符集合的字W替换ؓ(f)一个、两个或者三个(Z么是“一个、两个或者三?#8221;本h也没有搞懂,望高教)使用UTF-8~码来表C个字W的escape序列来编码一个URI。如 ~!@#$%^&*(){}[]=:/,;?+\''"\\ 被替换?~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+''%22%5C encodeURIComponent()Ҏ(gu) encodeURIComponentҎ(gu)q回一个编码过的URI。如果将encodeURIComponentҎ(gu)的编码结果传递给encodeURIComponentҎ(gu)作参敎ͼ则能得到原始的未~码的字W串。因为encodeURIComponentҎ(gu)会编码所有的字符Q所以如果待~码的字W串是用来表CZ个\径(?dir1/dir2/index.htmQ时Q就一定要心使用了?#8216;/’W号会被其编码之后,不再是一个有效的路径标识W,所以不能被web服务器正地识别。当字符串包含一个单独的URI component(?后面的请求参?的时候,请用此Ҏ(gu)。通过每个属于特定的字符集合的字W替换ؓ(f)一个、两个或者三个(Z么是“一个、两个或者三?#8221;本h也没有搞懂,望高教)使用UTF-8~码来表C个字W的escape序列来编码一个URIComponent?/p>
有什么区别?何时使用Q?br />
相对于用escapeҎ(gu)Q用encodeURIҎ(gu)会显得更专业一些。当你需要编码一整个URI的时候,你可以用此Ҏ(gu)Q因为URI中的合法字符都不会被~码转换。需要注意到是字W?#8217;也是URI中的合法字符Q所以也不会被编码{换?br />
encodeURI() 不编码的字符Q?~!@#$&*()=:/,;?+'' encodeURIComponentҎ(gu)在编码单个URIComponentQ指h参数Q应当是最常用的。需要注意到是字W?#8217;也是URI中的合法字符Q所以也不会被编码{换?br />
encodeURIComponent()不编码的字符Q?~!*()'' HTML 格式~码的实用工L(fng)。该cd含了?String 转换? ?String ~码Ӟ使用以下规则Q?
例如Q?UTF-8 ~码机制Q字W串 "The string ü@foo-bar" {换ؓ(f) "The+string+%C3%BC%40foo-bar"Q因为在 UTF-8 中,字符 ü ~码Z个字节,C3 Q十六进Ӟ?BC Q十六进ӞQ字W?@ ~码Z个字?40 Q十六进Ӟ? HTML 格式解码的实用工L(fng)。该cd含了?String ? 该{换过E正好与 URLEncoder cM用的q程相反。假定已~码的字W串中的所有字Wؓ(f)下列之一Q? 转换中用以下规则:
该解码器处理非法字符串有两种可能的方法。一U方法是不管该非法字W,另一U方法是抛出 可以用jsdC是一L(fng)Q网上也有类似的js代码?br />
escape() Ҏ(gu)
escapeҎ(gu)q不~码字符+。而我们知道,在用h交的表单字段中,如果有空|则会被{化ؓ(f)+字符Q而服务器解析的时候则会认?号代表空根{由于这个缺PescapeҎ(gu)q不能正地处理所有的非ASCII字符Q你应当量避免使用escapeҎ(gu)Q取而代之,你最好选择encodeURIComponent()Ҏ(gu)?br />
escape()不编码的字符Q@*/+
下面是自己写?br />
再看下jdk文档里的~码和解码:
public class URLEncoder
application/x-www-form-urlencoded
MIME 格式的静态方法。有?HTML 格式~码的更多信息,请参?HTML 规范?
a
" ?"z
"?A
" ?"Z
" ?"0
" ?"9
" 保持不变?
.
"?-
"?*
" ?"_
" 保持不变?
" 转换Z个加?"+
"?
%xy
" 表示Q其?xy 字节的两位十六进制表CŞ式。推荐的~码机制?UTF-8。但是,Z兼容性考虑Q如果未指定一U编码,则用相应^台的默认~码?
public class URLDecoder
application/x-www-form-urlencoded
MIME 格式解码的静态方法?
a
" ?"z
"?A
" ?"Z
"?0
" ?"9
" ?"-
"?_
"?.
" 以及 "*
"。允许有 "%
" 字符Q但是将它解释ؓ(f)Ҏ(gu)转义序列的开始?
a
" ?"z
"?A
" ?"Z
" ?"0
" ?"9
" 保持不变?
.
"?-
"?*
" ?"_
" 保持不变?
+
" 转换为空格字W?"
"?
%xy
" 格式序列视ؓ(f)一个字节,其中 xy ?8 位的两位十六q制表示形式。然后,所有连l包含一个或多个q些字节序列的子字符Ԍ被其编码可生成q些q箋字节的字W所代替。可以指定对q些字符q行解码的编码机Ӟ或者如果未指定的话Q则使用q_的默认编码机制?IllegalArgumentException
异常。解码器具体采用哪种Ҏ(gu)取决于实现?br />
现在的问题是Q服务器q回字符到页面,面又调用jsQ这个时候肯定要转义下,q是相对比较单的需求?br />
服务器只需借助于apache commons包里的StringEscapeUtilsc,在struts2里其实已l集成在xwrok包?br />
StringEscapeUtils.escapeJavaScript(returnString);
q样可以搞定这个问题?br />
另外也可以用jsd理这个问题,不过没有实践Q主要是自己js水^有点差,
escapeJavaScript对应的源码如下:
private static void escapeJavaStyleString(Writer out, String str, boolean escapeSingleQuote,
boolean escapeForwardSlash) throws IOException {
if (out == null) {
throw new IllegalArgumentException("The Writer must not be null");
}
if (str == null) {
return;
}
int sz;
sz = str.length();
for (int i = 0; i < sz; i++) {
char ch = str.charAt(i);
// handle unicode
if (ch > 0xfff) {
out.write("\\u" + hex(ch));
} else if (ch > 0xff) {
out.write("\\u0" + hex(ch));
} else if (ch > 0x7f) {
out.write("\\u00" + hex(ch));
} else if (ch < 32) {
switch (ch) {
case '\b' :
out.write('\\');
out.write('b');
break;
case '\n' :
out.write('\\');
out.write('n');
break;
case '\t' :
out.write('\\');
out.write('t');
break;
case '\f' :
out.write('\\');
out.write('f');
break;
case '\r' :
out.write('\\');
out.write('r');
break;
default :
if (ch > 0xf) {
out.write("\\u00" + hex(ch));
} else {
out.write("\\u000" + hex(ch));
}
break;
}
} else {
switch (ch) {
case '\'' :
if (escapeSingleQuote) {
out.write('\\');
}
out.write('\'');
break;
case '"' :
out.write('\\');
out.write('"');
break;
case '\\' :
out.write('\\');
out.write('\\');
break;
case '/' :
if (escapeForwardSlash) {
out.write('\\');
}
out.write('/');
break;
default :
out.write(ch);
break;
}
}
}
}
出现的问题描qͼ服务器返了stringQ经qescapeJavaScript处理后到js代码Qjs代码又要用这些string去输出html.比如img的src为js处理后的字符Ԍ
最后经q测试得Z上语句去处理q些问题Q?br />
string=encodeURIComponent(string).replace(/@/g,'%40').replace(/'/g,"'").replace(/"/g,'"');
转化@是ؓ(f)了获取服务器资源Q比如图片地址Q可以正常输出。其实输出时后面的{化单引号和双引号是ؓ(f)了保险v见。比?lt;img src='*****.jpg'/>q时只需要{化单引号可以了Q这里主要是针对囄的处理来做的Q@在其它地Ҏ(gu)没有必要转化没有试Q如果要昄囄Q得转化?br />
出现的问题描qͼ带特D字W串的图片名要正常显C出来,得{化下Q比如要昄文g名ؓ(f)Q~Q@#K?……&*Q)—?.jpg的图片,代码如下Q?br />
java.net.URLEncoder.encode(photoName,"utf-8")).replace("+", "%20"),转化时因为URLEncoder把空D{化成?,所以最后得?替换回去Q?0是十六进制的Q相当于十进制的32Q即对应为空根{?br />
l过转化后,囄带特D字W就能正常显C?br />
]]>
密钥实体QKey entityQ——密钥(secret keyQ又或者是U钥和配对公钥(采用非对U加密)
可信ȝ证书实体Qtrusted certificate entriesQ——只包含公钥
ailas(别名)每个keystore都关联这一个独一无二的aliasQ这个alias通常不区分大写
JDK中keytool常用命o:
-genkey 在用户主目录中创Z个默认文?.keystore",q会产生一个mykey的别名,mykey中包含用L(fng)公钥、私钥和证书
(在没有指定生成位|的情况?keystore会存在用L(fng)l默认目录,如:对于window xppȝQ会生成在系l的C:\Documents and Settings\UserName\文g名ؓ(f)“.keystore”)
-alias 产生别名
-keystore 指定密钥库的名称(产生的各cM息将不在.keystore文g?
-keyalg 指定密钥的算?(?RSA DSAQ如果不指定默认采用DSAQ?
-validity 指定创徏的证书有效期多少?br />
-keysize 指定密钥长度
-storepass 指定密钥库的密码(获取keystore信息所需的密?
-keypass 指定别名条目的密?U钥的密?
-dname 指定证书拥有者信?例如Q?nbsp; "CN=名字与姓?OU=l织单位名称,O=l织名称,L=城市或区域名U?ST=州或省䆾名称,C=单位的两字母国家代码"
-list 昄密钥库中的证书信?nbsp; keytool -list -v -keystore 指定keystore -storepass 密码
-v 昄密钥库中的证书详l信?br />
-export 别名指定的证书导出到文?nbsp; keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位|及证书名称 -storepass 密码
-file 参数指定导出到文件的文g?br />
-delete 删除密钥库中某条?nbsp; keytool -delete -alias 指定需删除的别 -keystore 指定keystore -storepass 密码
-printcert 查看导出的证书信?nbsp; keytool -printcert -file yushan.crt
-keypasswd 修改密钥库中指定条目口o keytool -keypasswd -alias 需修改的别?-keypass 旧密?-new 新密?nbsp; -storepass keystore密码 -keystore sage
-storepasswd 修改keystore口o keytool -storepasswd -keystore e:\yushan.keystore(需修改口o的keystore) -storepass 123456(原始密码) -new yushan(新密?
-import 已{数字证书导入密钥?nbsp; keytool -import -alias 指定导入条目的别?-keystore 指定keystore -file 需导入的证?/span>
下面是各选项的缺省倹{?nbsp;
-alias "mykey"
-keyalg "DSA"
-keysize 1024
-validity 90
-keystore 用户宿主目录中名?nbsp;.keystore 的文?br />
-file L为标准输入,写时为标准输?/span>
1、keystore的生成:
分阶D는成:
keytool -genkey -alias yushan(别名) -keypass yushan(别名密码) -keyalg RSA(法) -keysize 1024(密钥长度) -validity 365(有效期,天单? -keystore
e:\yushan.keystore(指定生成证书的位|和证书名称) -storepass 123456(获取keystore信息的密?Q回车输入相关信息即可;
一ơ性生成:
keytool -genkey -alias yushan -keypass yushan -keyalg RSA -keysize 1024 -validity 365 -keystore e:\yushan.keystore -storepass 123456 -dname "CN=(名字?br />
姓氏), OU=(l织单位名称), O=(l织名称), L=(城市或区域名U?, ST=(州或省䆾名称), C=(单位的两字母国家代码)";(中英文即?
2、keystore信息的查看:
keytool -list -v -keystore e:\keytool\yushan.keystore -storepass 123456
昄内容Q?br />
---------------------------------------------------------------------
Keystore cdQ?JKS
Keystore 提供者: SUN
(zhn)的 keystore 包含 1 输入
别名名称Q?yushan
创徏日期Q?2009-7-29
类? PrivateKeyEntry
认证N度: 1
认证 [1]:
所有?CN=yushan, OU=xx公司, O=xx协会, L=湘潭, ST=湖南, C=中国
{֏?CN=yushan, OU=xx公司, O=xx协会, L=湘潭, ST=湖南, C=中国
序列?4a6f29ed
有效? Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010
证书指纹:
MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3
SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8
{法名称:SHA1withRSA
版本: 3
--------------------------------------------------------------------
~省情况下,-list 命o打印证书?nbsp;MD5 指纹。而如果指定了 -v 选项Q将以可L式打印证书,如果指定?nbsp;-rfc 选项Q将以可打印的编码格式输书?/span>
keytool -list -rfc -keystore e:\yushan.keystore -storepass 123456
昄Q?/span>
-------------------------------------------------------------------------------------------------------
Keystore cdQ?JKS
Keystore 提供者: SUN
(zhn)的 keystore 包含 1 输入
别名名称Q?yushan
创徏日期Q?2009-7-29
类? PrivateKeyEntry
认证N度: 1
认证 [1]:
-----BEGIN CERTIFICATE-----
MIICSzCCAbSgAwIBAgIESm8p7TANBgkqhkiG9w0BAQUFADBqMQ8wDQYDVQQGDAbkuK3lm70xDzAN
BgNVBAgMBua5luWNlzEPMA0GA1UEBwwG5rmY5r2tMREwDwYDVQQKDAh4eOWNj+S8mjERMA8GA1UE
CwwIeHjlhazlj7gxDzANBgNVBAMTBnl1c2hhbjAeFw0wOTA3MjgxNjQwMTNaFw0xMDA3MjgxNjQw
MTNaMGoxDzANBgNVBAYMBuS4reWbvTEPMA0GA1UECAwG5rmW5Y2XMQ8wDQYDVQQHDAbmuZjmva0x
ETAPBgNVBAoMCHh45Y2P5LyaMREwDwYDVQQLDAh4eOWFrOWPuDEPMA0GA1UEAxMGeXVzaGFuMIGf
MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCJoru1RQczRzTnBWxefVNspQBykS220rS8Y/oX3mZa
hjL4wLfOURzUuxxuVQR2jx7QI+XKME+DHQj9r6aAcLBCi/T1jwF8mVYxtpRuTzE/6KEZdhowEe70
liWLVE+hytLBHZ03Zhwcd6q5HUMu27du3MPQvqiwzTY7MrwIvQQ8iQIDAQABMA0GCSqGSIb3DQEB
BQUAA4GBAGoQQ1/FnTfkpQh+Ni6h3fZdn3sR8ZzDMbOAIYVLAhBb85XDJ8QZTarHbZMJcIdHxAl1
i08ct3E8U87V9t8GZFWVC4BFg/+zeFEv76SFpVE56iX7P1jpsu78z0m69hHlds77VJTdyfMSvtXv
sYHP3fxfzx9WyhipBwd8VPK/NgEP
-----END CERTIFICATE-----
-------------------------------------------------------------------------------------------------------
3、证书的导出Q?/span>
keytool -export -alias yushan -keystore e:\yushan.keystore -file e:\yushan.crt(指定导出的证书位|及证书名称) -storepass 123456
4、查看导出的证书信息
keytool -printcert -file yushan.crt
昄Q(在windows下可以双击yushan.crt查看Q?br />
-----------------------------------------------------------------------
所有?CN=yushan, OU=xx公司, O=xx协会, L=湘潭, ST=湖南, C=中国
{֏?CN=yushan, OU=xx公司, O=xx协会, L=湘潭, ST=湖南, C=中国
序列?4a6f29ed
有效? Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010
证书指纹:
MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3
SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8
{法名称:SHA1withRSA
版本: 3
-----------------------------------------------------------------------
5、证书的导入Q?/span>
准备一个导入的证书Q?br />
keytool -genkey -alias shuany -keypass shuany -keyalg RSA -keysize 1024 -validity 365 -keystore e:\shuany.keystore -storepass 123456 -dname "CN=shuany,
OU=xx, O=xx, L=xx, ST=xx, C=xx";
keytool -export -alias shuany -keystore e:\shuany.keystore -file e:\shuany.crt -storepass 123456
现在shuany.crt 加入到yushan.keystore中:
keytool -import -alias shuany(指定导入证书的别名,如果不指定默认ؓ(f)mykey,别名唯一Q否则导入出? -file e:\shuany.crt -keystore e:\yushan.keystore -storepass
123456
keytool -list -v -keystore e:\keytool\yushan.keystore -storepass 123456
昄Q?br />
------------------------------------------------------------------------------
Keystore cdQ?JKS
Keystore 提供者: SUN
(zhn)的 keystore 包含 2 输入
别名名称Q?yushan
创徏日期Q?2009-7-29
类? PrivateKeyEntry
认证N度: 1
认证 [1]:
所有?CN=yushan, OU=xx公司, O=xx协会, L=湘潭, ST=湖南, C=中国
{֏?CN=yushan, OU=xx公司, O=xx协会, L=湘潭, ST=湖南, C=中国
序列?4a6f29ed
有效? Wed Jul 29 00:40:13 CST 2009 至Thu Jul 29 00:40:13 CST 2010
证书指纹:
MD5:A3:D7:D9:74:C3:50:7D:10:C9:C2:47:B0:33:90:45:C3
SHA1:2B:FC:9E:3A:DF:C6:C4:FB:87:B8:A0:C6:99:43:E9:4C:4A:E1:18:E8
{法名称:SHA1withRSA
版本: 3
*******************************************
*******************************************
别名名称Q?shuany
创徏日期Q?2009-7-29
输入cdQ?trustedCertEntry
所有?CN=shuany, OU=xx, O=xx, L=xx, ST=xx, C=xx
{֏?CN=shuany, OU=xx, O=xx, L=xx, ST=xx, C=xx
序列?4a6f2cd9
有效? Wed Jul 29 00:52:41 CST 2009 至Thu Jul 29 00:52:41 CST 2010
证书指纹:
MD5:15:03:57:9B:14:BD:C5:50:21:15:47:1E:29:87:A4:E6
SHA1:C1:4F:8B:CD:5E:C2:94:77:B7:42:29:35:5C:BB:BB:2E:9E:F0:89:F5
{法名称:SHA1withRSA
版本: 3
*******************************************
*******************************************
------------------------------------------------------------------------------
6、证书条目的删除Q?/span>
keytool -delete -alias shuany(指定需删除的别? -keystore yushan.keystore -storepass 123456
7、证书条目口令的修改Q?/span>
keytool -keypasswd -alias yushan(需要修改密码的别名) -keypass yushan(原始密码) -new 123456(别名的新密码) -keystore e:\yushan.keystore -storepass 123456
8、keystore口o的修改:
keytool -storepasswd -keystore e:\yushan.keystore(需修改口o的keystore) -storepass 123456(原始密码) -new yushan(新密?
9、修改keystore中别名ؓ(f)yushan的信?/span>
keytool -selfcert -alias yushan -keypass yushan -keystore e:\yushan.keystore -storepass 123456 -dname "cn=yushan,ou=yushan,o=yushan,c=us"
<td align="center"><ul class="ul1"><li>本站L据:沛_省石家庄??sh)?lt;/li><li>参考数据一Q河北省矛_庄市 ?sh)?lt;/li><li>参考数据二Q河北省矛_庄市 ?sh)?lt;/li></ul></td>
l果只取了主数据?br />
http~码问题在这里也ZC下?br />br=new BufferedReader(new InputStreamReader(httpConn.getInputStream(),"gb2312"));//在这个地方加上编?br />
q种Ҏ(gu)获取IP很不E_Q容易获取不刎ͼ我测试是q样的,最好的Ҏ(gu)q是有自qIP数据库?br />U真IP数据库刚好可以用上?br />具体参考:http://javagp.group.javaeye.com/group/topic/11866
在他的博客上有源码下载,直接用就可以?br />
主要参考 ?http://gzhzh.javaeye.com/blog/425458
如果你下载的是安装包的话QJDK环境变量是没有配|的Q但可以q行.jar文gQ在cmd下面可以q行javaQ但是不能运行javac.
下面介绍的是如何配置JDK环境变量Q?/p>
|上搜烦吧,q个东西多用用就会了Q我开始学?fn)JAVA的时候,半年多还不会自己配置Q每ơ配|都得上|搜索。搜索关键:jdk配置Qjava配置,java环境配置
a. 标记注释 -- 没有变量Q只有名U标识。例?/span> @annotation
b. 单一值注?/span> -- 在标记注释的基础上提供一D|据。如 @annotation(“data”)
c. 完整注释 -- 可以包括多个数据成员Q每个数据成员由名称和值构成?/span>
@annotation(val1="data1",val2="data2")
.Java ?/span> “ 注释 ”
Java 中提?/span> 3 个内|注释类?/span>
a. Override Q只能用于方?/span> ( 不能用于c,包声明或者其他构?/span> )
作用Q可以保证编译时?/span> Override 函数的声明正?/span>
用法Q?/span> @Override
public void fun(){..}
b.Deprecated 同样只能作用与方?/span>
作用Q对不应再用的Ҏ(gu)q行注解
用法Q?/span> @Deprecated public void fun{...} // 它们说这个注释跟函数要同一?/span>
c.SupressWarnings 可以注释一D代?/span>
作用Q关闭特定的警告信息Q例如你在 用泛型的时候未指定cd
用法Q?/span> @SupressWarnings("unchecked")
Java 中还提供了四U元注释Q专门负责注释其他的注释
@Target 表示该注释可以用于什么地斏V可用的 ElementType 参数包括Q?/span>
CONSTRUCTOR : 构造器的声?/span>
FIELD : 域声?/span> ( 包括 enum 实例 )
LOCAL_VARIABLE : 局部变量声?/span>
METHOD : Ҏ(gu)声明
PACKAGE : 包声?/span>
PARAMETER : 参数声明
TYPE : cR接?/span> ( 包括注解cd ) ?/span> enum 声明
@Retention 表示需要在什么别保存该注释信息。可选的 RetentionPoicy 参数包括Q?/span>
SOURCE : 注释被~译器丢?/span>
CLASS : 注释?/span> class 文g中可用,但会?/span> VM 丢弃
RUNTIME : VM 在q行时也保留注释Q因此可以通过反射机制d注释的信息?/span>
@Documented 注释包含在 JavaDoc ?/span>
@Inheried 允许子类l承父类中的注释?/span>
com.jtattoo.plaf.smart.SmartLookAndFeel