<html:link>的讲解和编码的讲解
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@page import="com.form.TestForm"%>
<%@page import="com.form.Person"%>
<%@page import="com.form.Go"%>
<%@page import="java.net.URLEncoder"%>
<%@ taglib prefix="html" uri="http://jakarta.apache.org/struts/tags-html"%>
<%
request.setAttribute("name", "曹欢操");
Date date = new Date();
request.setAttribute("date", date);
Person person1 = new Person();
person1.setId(1);
person1.setName("a");
Person person2 = new Person();
person2.setId(1);
person2.setName("a");
Person person3 = new Person();
person3.setId(1);
person3.setName("a");
Go go = new Go();
Map map = go.getMap();
map.put("x",person1);
map.put("y",person2);
map.put("z",person3);
request.setAttribute("go", go);
%>
<!-- 这是将保存在request中的name的值赋值给paramId中的userName -->
<html:link action="/testGoGo1.htm?p=go" paramId="userName" paramName="name">点击</html:link>很好 可以自动拦截以任何东西结尾的
<!-- 这是将保存在request中的name对象的time属性赋值给paramId中的now -->
<html:link action="/testGoGo1.htm?p=go" paramId="now" paramName="date" paramProperty="time">点击</html:link>
<!--这是将go对象的map属性(脸面包含喝多对象) -->
<html:link action="/testGoGo1.htm?p=go" name="go" property="map">点击</html:link>
<a href="${pageContext.request.contextPath}/testGoGo1.htm?p=go&userName=${name}">电机及</a>
<%
//如果不进行编码的的在后台得到的id的值就是asd,但是如果通过编码的话就是asd&go
String s = URLEncoder.encode("asd&go","utf-8");
request.setAttribute("s",s);
%>
<a href="${pageContext.request.contextPath}/testGoGo1.htm?p=go&id=${s}">点击</a>;
//name相当于select的name属性
<html:select property="name">
//list是保存在request的一个属性(里面保存的一个一个的对象),id是list中的对象的id属性,name同id一样
<html:optionsCollection name="list" value="id" label="name"/>
1、URLEncoder是对字符编码,
URLDecoder是对字符进行解码:
1.大写字母A-Z
2.小写字母a-z
3.数字 0-9
4.标点符 "." "-" "*" and "_"
不会被编码,是安全的,
我就搞不懂,它们所指别的字符的都是不安全的,究竟是哪不安全,能不能举个例子??
另外,这种编码解码在WEB开发中,有什么意义,能不能举个例子?
2、举个简单例子:
text = "abcd";url = "a.jsp?text="+text;
这样没有问题
但是当text = "abcd&edf"; 这样url就是"a.jsp?text=abcd&edf"
request.getParameter就获得abcd,剩余的就解析为另外一个参数edf
所以需要对符号"&"编码
3、举个简单例子:
String value1="123&中文";
String enc="UTF-8";
String url="Http://localhost:8080/forum.jsp?id="+URLEncoder.encoder(value1,enc);
如果没有进行URL编码,getParameter("id")的值为 "123";
另外,假设服务器的Http URL encoding 是"UTF-8", 而value1中含有中文。
那么,enc 也要是UTF-8。才能正确显示中文。
4、原理解释:
URLEncoder类:
用于HTML的form中数据编码的类。
这个类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法.
如果想了解HTML的编码细则,请参考HTML规范。
编码规则如下:
字符"a"-"z","A"-"Z","0"-"9",".","-","*",和"_" 都不被编码,维持原值,
空格" "被转换为加号"+"。
所有其他的字符都被认为是不安全的,首先都根据指定的编码scheme被转换为1个或者多个字节。[凭什么认为其他的字符都是不安全的?看来这些规范的制订者中没有中国人呀!]
然后每个字节都被表示成"%xy"格式的由3个字符组成的字符串,xy是字节的2位16进制的表达(xy is the two-digit hexadecimal representation of the byte),推荐的编码scheme为UTF-8,然而,出于兼容性的考虑,如果没有制定编码的scheme,那么将使用当前操作系统的编码的scheme。
如:如果编码scheme是UTF-8,
"The string ü@foo-bar"将被转换为"The+string+%C3%BC%40foo-bar" 。
因为载UTF-8中字符ü被编码成2个字节C3 (十六进制) 和BC (十六进制), 字符@被编码成一个字节40 (十六进制)。
起始于:JDK1.0
这个类共有2个重载方法:
public static String encode(String s, String enc) throws UnsupportedEncodingException。起始于:JDK1.4
和即将被废弃的方法:public static String encode(String s)。(因为这个方法的编码的字符集依赖于程序运行的系统的默认的字符集)。
第一个方法的作用是:根据指定的encode scheme 将一个字符串翻译成application/x-www-form-urlencoded格式。
注意: W3C推荐UTF-8。
参数:
s - 将要被翻译的字符串。
enc - 编码用的character。
返回:翻译后的字符串。
抛出异常: UnsupportedEncodingException - 如果不支持制定的编码
起始于:1.4
另请参考:URLDecoder.decode(java.lang.String, java.lang.String)
类URLDecoder的作用和URLEncoder的作用相反,方法类似,这里就不再赘述了。
如果你想知道你的字符串被编码后的值是什么样,你可以打开www.baidu.com,然后输入你要编码后的数值,然后提交,你可以在地址栏看到你被编码后的字符串
</html:select>