??xml version="1.0" encoding="utf-8" standalone="yes"?>
var pay_no;
var money;
var checkcode;
var feeetype;
var old_pay_no;
var old_money;
var splitAll = new Array();
//试 PARAMS = "pay_no=jmW9n%2fJCCDo%3d&money=wB1k5PqI0oU%3d&checkcode=nhIAV2UrfsUreUdGf0wS3kcPYe5P6iTZ%2boRAgdGvPLN33eTEKYp75j%2f%2bhT7xSYg%2be%2bHGf2MZyyAcYpRMl6ng3ireWvV%2bj5kRZkldFCGF8nhE1ANvxGBMBQ%3d%3d&feeetype=Q1dQXRPDVOc%3d&old_pay_no=0GUN11ebpe4%3d&old_money=0GUN11ebpe4%3d";
splitAll = PARAMS.split("&");
var arrayvar;
for( var isplit = 0 ; isplit < splitAll.length ; isplit++){
arrayvar = new Array();
arrayvar = splitAll[isplit].split("=");
for(var i = 0; i < arrayvar.length;i++){
if(arrayvar[i] = "pay_no"){
pay_no = arrayvar[i+1];
//alert(pay_no);
break;
}
if(arrayvar[i] = "money"){
money = arrayvar[i+1];
// alert(money);
break;
}
if(arrayvar[i] = "checkcode"){
checkcode = arrayvar[i+1];
// alert(checkcode);
break;
}
if(arrayvar[i] = "feeetype"){
feeetype = arrayvar[i+1];
// alert(feeetype);
break;
}
if(arrayvar[i] = "old_pay_no"){
old_pay_no = arrayvar[i+1];
// alert(old_pay_no);
break;
}
if(arrayvar[i] = "old_money"){
old_money = arrayvar[i+1];
// alert(old_money);
break;
}
}
}
var name = "test"
var tempForm = document.createElement("form");
tempForm.id="tempForm1";
tempForm.method="post";
//tempForm.action=" tempForm.action=" tempForm.target=name;
var hideInput1 = document.createElement("input");
hideInput1.type="hidden";
hideInput1.name= "pay_no"
hideInput1.value= "EeM1whUd4q4%3d";
tempForm.appendChild(hideInput1);
var hideInput2 = document.createElement("input");
hideInput2.type="hidden";
hideInput2.name= "money"
hideInput2.value= "i6hN5C6DIN4%3d";
tempForm.appendChild(hideInput2);
var hideInput3 = document.createElement("input");
hideInput3.type="hidden";
hideInput3.name= "checkcode"
hideInput3.value= "nhIAV2UrfsWnq1I38RKp5%2b46w4bxah62p6tSN%2fESqefuOsOG8WoetiUOtz2bp40id93kxCmKe%2bY%2f%2foU%2b8UmIPnvhxn9jGcsgHGKUTJep4N4q3lr1fo%2bZEWZJXRQhhfJ4RNQDb8RgTAU%3d";
tempForm.appendChild(hideInput3);
var hideInput4 = document.createElement("input");
hideInput4.type="hidden";
hideInput4.name= "feeetype"
hideInput4.value= "Q1dQXRPDVOc%3d";
tempForm.appendChild(hideInput4);
var hideInput5 = document.createElement("input");
hideInput5.type="hidden";
hideInput5.name= "old_pay_no"
hideInput5.value= "0GUN11ebpe4%3d";
tempForm.appendChild(hideInput5);
var hideInput6 = document.createElement("input");
hideInput6.type="hidden";
hideInput6.name= "old_money"
hideInput6.value= "0GUN11ebpe4%3d";
tempForm.appendChild(hideInput6);
tempForm.attachEvent("onsubmit",function(){ openWindow(name); });
document.body.appendChild(tempForm);
tempForm.fireEvent("onsubmit");
alert("tempForm");
tempForm.submit();
document.body.removeChild(tempForm);
}
W一U类型是标量QscalarQ,也就是一个单独的字符ԌstringQ或数字QnumbersQ,比如"北京"q个单独的词?/p>
W二U类型是序列QsequenceQ,也就是若q个相关的数据按照一定顺序ƈ列在一P又叫做数l(arrayQ或列表QListQ,比如"北京Q上??/p>
W三U类型是映射QmappingQ,也就是一个名/值对QName/valueQ,x据有一个名Uͼq有一个与之相对应的|q又UC散列QhashQ或字典QdictionaryQ,比如"首都Q北??/p>
我恍然大悟,数据构成的最单位原来如此简单!难怪在~程语言中,只要有了数组QarrayQ和对象QobjectQ就能够储存一切数据了?/p>
关于json?/strong>
21世纪初,Douglas CrockfordL一U简便的数据交换格式Q能够在服务器之间交换数据。当旉用的数据交换语a是XMLQ但是Douglas Crockford觉得XML的生成和解析都太ȝQ所以他提出了一U简化格式,也就是Json?/p>
Json的规格非常简单,只用一个页面几百个字就能说清楚Q而且Douglas Crockford声称q个规格永远不必升Q因规定的都规定了?/p>
1Q?q列的数据之间用逗号Q?Q?Q分隔?/p>
2Q?映射用冒P"Q?Q表C?/p>
3Q?q列数据的集合(数组Q用Ҏ?"[]")表示?/p>
4Q?映射的集合(对象Q用大括P"{}"Q表C?/p>
上面四条规则Q就是Json格式的所有内宏V?/p>
比如Q下面这句话Q?/p>
"北京市的面积?6800qx公里Q常住h?600万h。上市的面Uؓ6400qx公里Q常住h?800万?
写成json格式是q样Q?/p>
[
{"城市":"北京","面积":16800,"人口":1600},
{"城市":"上v","面积":6400,"人口":1800}
]
如果事先知道数据的结构,上面的写法还可以q一步简化:
[
["北京",16800,1600],
["上v",6400,1800]
]
由此可以看到Qjson非常易学易用。所以,在短短几q中Q它取代xmlQ成Z互联|上最受欢q的数据交换格式?/p>
我猜惻IDouglas Crockford一定事先就知道Q数据结构可以简化成三种形式Q否则怎么可能json定义得如此精炼呢Q?/p>
学习javascript的时候,我曾l一度搞不清?数组"(array)?对象"(object)的根本区别在哪里Q两者都可以用来表示数据的集合?/p>
比如有一个数la=[1,2,3,4]Q还有一个对象a={0:1,1:2,2:3,3:4}Q然后你q行alert(a[1])Q两U情况下的运行结果是相同的!q就是说Q数据集合既可以用数l表C,也可以用对象表示Q那么我到底该用哪一U呢Q?/p>
我后来才知道Q数l表C有序数据的集合Q而对象表C无序数据的集合。如果数据的序很重要,q数组Q否则就用对象?/p>
当然Q数l和对象的另一个区别是Q数l的数据没有"名称"QnameQ,对象的数据有"名称"QnameQ?/p>
但是问题是,很多~程语言中,都有一U叫?兌数组"Qassociative arrayQ的东西。这U数l中的数据是有名U的?/p>
比如在javascript中,可以q样定义一个对象:
var a={"城市":"北京","面积":16800,"人口":1600};
但是Q也可以定义成一个关联数l:
a["城市"]="北京";
a["面积"]=16800;
a["人口"]=1600;
qv初也加剧了我Ҏl和对象的淆,后来才明白,在Javascript语言中,兌数组是对象Q对象就是关联数l?/p>
首先M载FCKEditor2.6.3Q当然本文编写的时候,q个是最新版本,也许你现在看到的已经是更新的版本了,那么可能某些配置办法已经变化了,本文也将跟进以保持最新动态,相反如果你用的旧版本的控gQ其配置和用方法也有所区别Q,下蝲地址Qhttp://www.fckeditor.net/downloadQ我们需要下载两个文?br />
W一是FCKeditor_2.6.3.zipQ就是FCKEditor的控Ӟ
W二是FCKeditor.JavaQfckeditor-java-2.4.1-bin.zipQ,是在Java代码中用FCKEditor的相兛_LQ?
有了q两个文Ӟ使用FCKEditor的基具备了Q接下来我们要做两g事情Q一件事情就是要把FCKEditor控g攑ֈweb目中,q个控g是用于网늚Q所以其代码是用JavaScript脚本~写的,需要和web|页一赯下蝲的浏览器上才能执行,W二件事情就是这个网上的控件因为支持图片的上传与下载,所以在上传与下载的时候需要服务端的支持,那么我们我的java服务端如何支持这个控件的工作呢?FCKEditor自n提供了相关的java工具Q就是我们下载的W二个文件。因此我们要做的W二件事情就是在服务端配|java工具Q得FCKEditor控g在处理上传图片时能够正确工作?
接下来我们就开始对配置FCKEditor控gq行两项工作Q?
W一Q解压羃FCKeditor_2.6.3.zipQ在其中我们能找C个文件夹叫fckeditorQ那么将q个文gҎ个复制到你的web应用的根目录下,是存放jsp面的地斏V?
W二Q解压羃fckeditor-java-2.4.1-bin.zipQ将q样几个jar文g复制到web应用的WEB-INF\lib目录中(commons-fileupload-1.2.1.jarQcommons-io-1.3.2.jarQjava-core-2.4.1.jarQslf4j-api-1.5.2.jarQslf4j-simple-1.5.2.jarQ,其中最后一个文件在q个zip包中可能不存在,那么你可以去q个链接地址下蝲一个文件叫fckeditor-java-2.4.1-bin.zip (下蝲地址Qhttp://sourceforge.net/project/showfiles.php?group_id=75348&package_id=129511)Q在q个war文g中的lib中存在上q的5个jar文gQ其实在war中也包含了FCKEditor控g的内容,也就是说如果你只是下载了war也可以了。然后在classpath目录中创Z个名叫ؓfckeditor.properties的文Ӟ文g中放|一行内容ؓQconnector.userActionImpl=net.fckeditor.requestcycle.impl.UserActionImplQ?
在web.xml中添加一个Servlet的配|,配置内容如下Q?
<servlet>
<servlet>
<servlet-name>Connector</servlet-name>
<servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Connector</servlet-name>
<url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
</servlet-mapping>
好了Q现在你已经完成了配|的q程Q接下来我们需要在jsp中用FCKEditor控g了,在需要用这个控件的jsp文g的开头添加标{ֺ的引入语句:<%@ taglib uri="http://java.fckeditor.net" prefix="FCK" %>Q在使用控gq行文本格式化输入的地方Q原来你可能使用的textarea标签Q用如下的内容来替换原来的输入控gQ?
<FCK:editor instanceName="EditorDefault">
控g中要昄的初始内?
</FCK:editor>
其中instanceName属性的值就相当于form表单中的input的name倹{就是表单提交时候的键值对中的键的名字?
window.onload=function(){ShowMessage();}
Q?/span> 1 Q表单的客户端验?/span>
表单的客L验证主要是通过 JavaScript 来完成的?/span>
<html>
<head>
<title> 客户端验?/span> </title>
<Script>
function Check()
{
username=document.form1.username.value;
age=document.form1.age.value;
year=document.form1.year.value;
email=document.form1.email.value;
<!--
验证提交数据的长?/span>
-->
if(username.length<2||username.length>8)
{
alert("
用户名长度必d
2
位到
8
位之?/span>
");
return false;
}
<!--
验证提交数据的范?/span>
-->
if(age.length!=2||isNaN(age)||parseInt(age)<20||parseInt(age)>50)
{
alert("
你的q龄不符合我们的要求Q?/span>
");
return false;
}
<!--
验证提交数据的类?/span>
-->
<!--
限定出生q䆾是一?/span>
4
位整?/span>
-->
if(year.length!=4||isNaN(year))
{
alert("
q䆾填写不正!
");
return false;
}
<!--
限定电子邮箱不能为空Q且必须要有?/span>
@
”和?/span>
.
?/span>
-->
if(email.length==""||(email.indexOf('@')==-1)||(email.indexOf('.')==-1))
{
alert("
电子邮g填写不正!
");
return false;
}
return true;
}
</Script>
</head>
<body>
<h3> 客户端验?/span> </h3>
<form name="form1" action="X.jsp" OnSubmit="return Check();">
<p> ?/span> ?/span> 名: <input name="username"></p>
<p> q?/span> 龄: <input name="age"></p>
<p> 出生q䆾Q?/span> <input name="year"></p>
<p> 电子邮gQ?/span> <input name="email"></p>
<p><input type=Submit value=" 提交 "></p>
</form>
</body>
</html>
Q?/span> 2 Q表单的服务器端验证
表单的服务器端验证是通过服务器端?/span>
X.jsp
来完成的?/span>
<html>
<head>
<title>A Form</title>
</head>
<body>
<h3>The form will be checked by the Server.</h3>
<form name="fm" action="XXX.jsp" method="post">
<p>UserName:
<input type="text" name="username">
</p>
<p>PassWord:
<input type="password" name="password">
</p>
<p>BirthYear:
<input type="text" name="birthyear">
</p>
<p><center>
<a href='JavaScript:fm.submit();'> 提交 </a>
<a href='JavaScript:fm.reset();'> 重置 </a>
</center></p>
</form>
</body>
</html>