??xml version="1.0" encoding="utf-8" standalone="yes"?>
update service_config set update_url = concat('xxxxxxxx', agent_id, '.apk');
语义Q更新表service_config的update_url字段
q回l果接参C生的字符丌Ӏ如有Q何一个参CؓNULL Q则q回gؓ NULL?br />
ucweb
通过W三Ҏ务器代理Q对 HTML数据q行压羃。这U方式比方式A多了一个第三方服务器,原理是,手机端的览器发出的览hQ首先发送至W三方的服务器,q三方的服务器q行代理Q去直接q接互联|站。互联网站发送的|页数据发送给W三Ҏ务器Qƈq三方服务器对原来比较大的数据q行压羃整理QŞ成一个适合于手机接收显C的数据量比较的面Q再传送给手机览器端。这时候手机浏览器对压~后的数据进行解析,昄在屏q上。这U方式数据传输量比较,数据qQ数据是间接传递所以安全性降低。网|C效果不但取决于览器本w的解析Q更和第三方服务器的数据压羃方式有必然的联系。即Q?br />览器端----(W三Ҏ务器)----(DNS服务?----|站服务?---(HTML原代?----(W三Ҏ务器)----(压羃后的HTML代码)----览器端
opear的功能非常强大,速度慢是因ؓ要将整个|页下下来。如果用wifi会快很多?br />ucweb速度快是因ؓW三Ҏ务器对HTML数据q行压羃?br />
另外Q有一U传说还有一U浏览器Q?br />通过W三Ҏ务器代理Q把HTML数据压羃成分辨率较小的图片格式。这U方式和方式BcMQ但是第三方服务器压~后的数据不是普通的HTML代码Q而是一U分辨率比较的囄格式。这h大程度地保证了手机端昄的画面和原网늛同。手机端的浏览器不需要对代码q行解析Q而仅仅只是一个包含了链接的囄的显C终端。这U方式的数据传输量小Q数据的大小取决于图片的压羃比,׃数据格式已经发生了变化,所以理Z你不能像普通浏览器一样对文字q行选中复制{操作。但q种方式对于|页的版面支持是最好的。因为实际上Q你在手机浏览器上看到的图象Q是W三Ҏ务器打开|页的屏q拷贝。即Q?br />览器端----(W三Ҏ务器)----(DNS服务?----|站服务?---(HTML原代?----(W三Ҏ务器)----(压羃后的|页昄囑փ)----览器端
1、努哈?
天命汗爱新觉|?#183;努尔哈赤(1559?626q?Q女真族Q后金政权创立者。明万历四十四年Q?616q_正月Q在赫图阿拉U?#8220;覆育列国英明?#8221;,q号天命。在?1q。努哈赤顺应历史发展趋势,完成了统一女真各部大业Q对后来满族共同体的形成Q对加强各民族间l济文化的交,促进辽东l济的发展,起了U极作用?
2、皇太极
天聪汗爱新觉|?#183;皇太极(1592?643q?Q努哈赤第八子Q满族。天命十一q?1626q?九月Q后金汗位Q以ơ年为天聪元q。天聪十q_1636q_四月Q皇太极在沈阳称帝,建国号大清,改年号ؓ崇dQƈ以是qؓ崇d元年。前后在?7q。在位期_注意发展生Q增强兵力,不断Ҏ作战Q确定满族族名,建立清国Qؓ清王朝的立和后来统一中国打下了坚实基?
3、顺ȝ?
清世顺ȝ帝爱新觉|?#183;Q?638q?-1661q_Q皇太极W九子,清入兛_W一位皇帝?岁帝位Q由叔父睿亲王多衮摄政Q?4岁亲ѝ清初满汉民族矛盾与阶矛盾极ؓȀ烈,而至治朝结束时Q清廷击败了各种抗清势力Q完成了全国的统一?
4、康熙皇?
清圣康熙皇帝爱新觉|?#183;玄烨Q?654--1722q_Q顺ȝ帝第三子Q清入关后第二位皇帝。他q_了三藩叛乱,收复了台湾,驱逐了沙俄势力Q又qx蒙藏地区动ؕQ加Z多民族国家的E_和统一。在l济和文化徏设上Q康熙也创下对后世生积极媄响的重大业WQ开创了中国徏C会最后一个盛?---康乾盛世?
5、雍正皇?
清世宗雍正皇帝爱新觉|?#183;胤禛Q?678?735q_Q康熙皇帝第四子,清入兛_的第三位皇帝。在?3q。他Ҏ于皇权的反对势力大加挞伐,有效地改善了吏治Q增加了国库收入QؓN朝社会的J荣奠定了雄厚的基础?
6、乾隆皇?
清高宗乾隆皇帝爱新觉|?#183;弘历Q?711?799q_Q雍正皇帝第四子,清朝入关后第四位皇帝。他在将清朝的康乄世推向顶峰的同时Q也亲手它带向低谷Q他是媄响中?8世纪以后历史q程的重要皇帝?
7、嘉庆皇?
清仁宗嘉庆皇帝爱新觉|?#183;琰 (1760?820q?Q清朝入兛_W五位皇帝,N皇帝W十五子。乾隆六十年Q?795q_九月公开立ؓ皇太子,ơ年元旦Q受弘历内禅即位Q以是年为嘉庆元q_时年27岁。嘉庆四q_1799q_正月Q弘历死Q始亲政。在?5q。顒C政后Q立即铲除贪赃枉法蠹国肥U的权臣和珅Q人心大快Q复多方采取措施Q力图保持康乾之盛世Q但内忧外患重重Q积重难q。由于腐败势力甚强,又缺乏新生机Ӟl难摆脱江河日下的命q?
8、道光皇?
清宣宗道光皇帝爱新觉|?#183;d(1782?850q?Q清朝入兛_W六位皇帝,嘉庆皇帝W二子。嘉庆二十五q?1820q?七月即位Q以ơ年为道光元q_时年29岁。在?0q。在位期_׃国力开始衰落,故极力提倡节俭,攚w盐政Q部分弛开矿,q整吏沅R但׃腐|成风Q阻力过大,奏效甚微。对鸦片之害Q他最初力L抗,但因他本人对时势无知Q主要大臣懦弱无能,战略动摇无定Q反而迫害禁烟主力,不能抉|列强的R略,酿成癑ֹ遗憾?
9、咸丰皇?
清文宗咸丰皇帝爱新觉|?#183;奕詝(1831?861q?Q清朝入兛_W七位皇帝,道光皇帝W四子。道光三十年Q?850q_正月即位Q以ơ年为咸丰元q_时年20岁。在?1q。在位期_正逢清朝ؕ世,国库IQ危机四伏。即位不Cq_太^天国卛_金田起义Q且三年左右危及北京,怸帝屡zօ镇压太q_国及各地农民起义。战火未息,英法联合늕军又q速攻占天z、北京,奕詝从圆明园逃往避暑山庄。只命奕ƣ留北京与英法讲和。R略军竟野蛮地焚掠了圆明等园。不得已奕詝与英法等国签订了数宗不^{条U。奕詝纵有重整江׃心,已无回天之力?
10、同ȝ?
清穆宗同ȝ帝爱新觉|?#183;载柩(1856?874q?Q清朝入兛_W八位皇帝?岁即帝位Q终w成为其生母慈禧皇太后垂帘听政的傀儡?
11、光l皇?
清d宗光l皇帝爱新觉|?#183;载湉Q?871?908q_Q清朝入兛_W九位皇帝。醇亲王奕譞之子Q因其冲龄践,D慈禧太后W二ơ垂帘听ѝ在其亲政期_甲午之战中他力主反击Q大力支持维新变?但因变法p|而遭q禁Q直臛_世?
12、宣l皇?
清宣l皇帝爱新觉|?#183;溥AQ?906?967q_Q清朝末代皇帝。醇亲王载沣之子Q光l三十四q_1908q_即皇帝位?911q??2日,在辛亥革命的潮中退位。此后,以逊帝w䆾居住在皇宫?924q?1?日,被冯玉祥驱逐出宫?/span>
但是话说回来C本对于标{排序非常差,所以大安希望使用EditPlusQUE或者别的工PemacsQ用来查看网늚源文件。可以用如下方法:
一Q打开注册? 在运行对话框中输?regedit",后按Enter键?/span>
二:打开HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\INTERNET EXPLORER,在其下新Z个项”VIEW SOURCE EDITOR”,在其下再C个项”EDITOR NAME”,又击右侧H口中的”默认”数D为更换程序的路径及文件名,?"D:\UltraEdit-32\Uedit32.exe". 如果要改回默认的,只需其值删除即?
三:重新启动INTERNET EXPLORER,查看某个|页的源文g,用户׃发现打开的程序已l更改了.
摘自Q?/font>http://blog.csdn.net/hemingwang0902/archive/2009/06/05/4244285.aspx
2. 如果是用的JavaHL, 扑ֈ以下目录q删除auth目录.
C:\Documents and Settings\[YourUserName]\Application Data\Subversion\
3. 如果你用的SVNKit, 扑ֈ以下目录q删?keyring文g.
[eclipse]\configuration\org.eclipse.core.runtime
注意,实际在操?2 之后 eclipse中svn出工E?需要先重启一下eclipse,否则不断的提C入用户名密码.
An error occurred at line: 23 in the generated java file
The method getJspApplicationContext(ServletContext) is undefined for the type JspFactory
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:92)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:330)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:423)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:308)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:286)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:273)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:566)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:317)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
上网搜,发现不少人有q个问题Q但都没有解军_法。后来想到可能和tomcat6有关Q因为我在工E的lib中添加了很多包(一堆什么Spring
依赖Q,所以把他们一删JSP׃抛异怺。我估计是,工程中和tomcat6 lib中重复的包在加蝲时是先被加蝲Q也是tomcat6中相同的包没
有被加蝲Q,而工E中的包版本要比tomcat6中的低,造成上面的异常。我对照着tomcat中包Q发现工E中出现诸如catalina.jar、jsp-api.jar
、servlet-api.jar{这L重复包,把它们从工程中删了就应该行了Q对于上面的异常Q原因应该是包jsp-api.jarQ。看来不是什么包都可以一股脑往工程里加啊?br />
请关?a >@我的新浪微博
Windows XP的关机是由Shutdown.exeE序来控制的Q位于Windows\System32文g夹中。如果想让Windows 2000也实现同L效果Q可以把Shutdown.exe复制到系l目录下?
-fQ强行关闭应用程?
-m \\计算机名Q控制远E计机
-iQ显C图形用L面,但必LShutdown的第一个选项
-lQ注销当前用户
-rQ关机ƈ重启
-t 旉Q设|关机倒计?
-c "消息内容"Q输入关机对话框中的消息内容Q不能超127个字W)
点击"开?->"q行"Q输?cmd"Q到命o行方式:
输入shutdown -s -t 3600Q就能实?时后自动关机,3600的单位是U;
输入at 09:00 shutdown -aQ定?点关机;
输入shutdown -aQ取消定时关机?
如要你想实现开?分钟内自动再ơ关?把 shutdown -s -t 3600
攑ֈ一个文本文仉,保存,Ҏ展名为XXX.bat,把该文g攑ֈC:\Documents and Settings\Administrator\「开始」菜单\E序\启动里就好了
请关注我的新微?a >@爱彩生z?/a>
解决办法Q找到C:\Program Files\Common Files\Microsoft Shared\OFFICE12\Office Setup ControllerQ将q个文g夹删除或改名Q就不再出现提示了?nbsp;
上面是网上提供的解决ҎQ但是我试着改了下改名,未果Q尝试删除那个文件夹后,成功~~~所以徏议有q问题的人,如果改名不成功,是这删除该文件夹~~
摘自Q?/span>http://www.cnblogs.com/kafony/archive/2010/05/20/1739818.html q位仁兄说该文g夹不行,呵呵Q加个前~OLQ这U安装文Ӟ一般我不轻易删除,q是备䆾 ?/span>
请关注我的新微?/span>@爱彩生z?/span>
MyEclipse启动故障-Initializing Java Tooling
最q安装新pȝ后,重新安装了JDKQ然后启动以前安装的MyEclipse8.0后,右下角提?#8220;Initializing Java ToolingQ进?%”Q而且长时间进度不变?/span>
后来在网上找了一下,发现是由于JDK版本找不到造成的?/span>
解决ҎQ?br /> 1、找到设|面ѝWindow?》【Preferences?》【Java?》【Installed JREs】,删除不存在的JDKQ?/span>
2、增加已安装的JDKQ?/span>
3、重新配|TomcatQ或其他容器Q地址Q包括JDKQ?/span>
4、将MyEclispe关闭Q通过Windowsd理器强行关闭?/span>
5、重新启动MyEclipseQ问题解冟?br />
------------------------------------------------------------------
摘自Q?a >http://javadou.com/myeclipse-initializing-java-tooling-544/
描述Q在U下操作无问题,发布到正式环境后报错
思\Q看到这个问题,首先我的W一反应是是否两个环境的jar有异同,因ؓl常会因为升U包D老版本的找不到方法或者找不到cR当Ӟq个通过比较local跟生产机环境的jar很快p判断猜测是否正确?br />
其次看看HQL的语法是否正,实有网友说因ؓHQL的语法错误导_查了local的语法,没问题,那问题出在哪呢?再将两个生机和local两个版本q行比较Q然后得知两个HQL不同?/span>
原因Q可能是subclipse新旧版本冲突造成的,删掉\.metadata\.plugins\org.tigris.subversion.subclipse.core文g卛_Q尝试后OK
注:千万别挺某些的,把metadata删掉Q那完蛋了
http://www.w3cschool.cn/index-18.asp.htm
Ҏ我们长时间开发的U篏Q我们在使用q程中确实遇到的一些问题,通过q些U篏Q得我们找到移动互联网开发的一些规律:
1、我可以在屏q上昄几行信息Q?/span>
事实上,ҎC多行没有特别限制Q只要不过面板的最大尺寸就行(随设备的不同而不同)。然而,Z避免太多滚屏Q每屏(卛_片)5 ?/span> 7 行最佟?/span>当然屏不要太多,3-4屏ؓ极限Q因虑到目前市Z很多的山寨手机对WML面大小支持的不好?/span>
2、我们应该权?/span>GET/POST哪些问题Q?/span>
在实际开发中Q确实遇C些电话不支持使用 POST Ҏ发送表单数据,q种情况Q我们确实没有办法去做兼容了。因为在实际开发中Q有些数据我们必要为用户保密,例如用户名和密码必须通过 POST Ҏ发送?/span>
?/span> WAP |关上,如果日志功能被激zdƈ且请求已被记录,理员就有能看到用户名和密码。如果网x?/span> ISP 或其它第三方提供的,q个问题׃特别H出?/span>
即一个安全的q接也不能完全消除安全隐患。那些发送到 WAP |关的数据?/span> WTLSQ?/span>Wireless Transport Layer SecurityQ加密,它用与标准 TLS 相同的算法。然而,发送到 WAP |关的数据是二进制的~码格式Q对 WAPQ,所以这些加密后的数据必ȝ TLS 解密和再加密以适用于因特网。经q一D|间以后,敏感数据?/span> WAP |关上以明文的Ş式出现。黑客则会在适当的时刻,内存中的信息{储出来,q而成功地讉Kq些敏感数据?/span>
按照注释Q解册问题的一U办法是在自己公司(而不是在 ISPQ设一?/span> WAP |关。在q种情况下,一个可信的人可以操作网养Iq且可以关闭日志功能?/span>
您也可以?/span> WMLScript 来编写自定义的加密算法,以对客户端的用户名和密码q行加密。这只有在用简单的法时才有可能实玎ͼ在支?/span> DES cȝ法上,WMLScript 不够强大。虽然有q么多的虑?/span>
我们在实际的开发中选择的依焉选的?/span>GET。我们徏议?/span>GET方式提交参数Q是考虑?/span>URL可移植、保证参数完_但是同时我们Z保密、限长度可以在合适的地方Q用户保密数据、参数可能出现过长)应用POST?/span>
3、我怎样保持 SessionQ?/span>
我们再做M一个模块设计的时候都不要假设手机l端都支?/span>cookie(虽然部分手机支持cookieQ但不能保证用户都开?/span>cookie)。这P当用户在您的站点的不同页面之间穿梭时Qؓ了在服务器端保留关于客户端的信息Q在向服务器发送每个请求的同时Q一?/span> Session ID 必须被当作参C递?/span>Session ID 的参数名Ҏ Servlet 引擎的不同而不同?/span>
有时Q缺省的 Session ID 长度很大q度地增加了每个h的长度。结果导致客L?/span> WAP |关可能此h看作一个无效的 URL 而拒l。这h必要~短 Session ID 的长度。可自定义一些所?/span>sessionID长度的方案?/span>
4?/span>Select 框参数的提交Q?/span>
因ؓWAP览器的陋、多而杂Q在不同的浏览器里,select提交被截L参数g是不同的Q如?/span>select中,你选中?/span>1/2/3提交后,截取的|可能?/span>1,2,3Q也可能?/span>1Q?/span>2Q?/span>3?/span>
q点?/span>WEB上有些许差异Q请大家多注?/span>
5、参数简单化Q?/span>
在开发过E中Q我们经常是Z面参数提交的简单,即ؓ了减参数的提交个数Q我们喜Ƣ在WML面对一些参数进行拼装。如下:
<postfield name="content" value="$(bwBall)~$(swBall)~$(gwBall)"/>Q实际操作中Q我们应该避免这L参数DQ仅在WAP1.1之后实支持一些分割符的分?/span>
6、编码问题同h个诟病?
无论我们?/span>J2EE/J2SE开发过E中Q都会遇到编码的问题Q不同的?/span>WML中遇到的~码问题大多数ƈ不是我们服务端导致的Q手机厂商对~码没有固定的设|,很多用户不会d心手机的~码Q在参数提交时如果带有中文参敎ͼ在参数接收时Q就需要对参数q行处理Q因为客L提交q来的可以是ASCII?/span>
7?#8220;内部服务器错?#8221;Q?/span>
如果?/span>WML开发你没遇到过q类错误Q那你绝对不是一个称职的开发。在手机中报q类错误Q基本上都属于功能机Q对应的 response code ?/span>500?/span>
8?/span>WML面对图片的支持度?
?/span>WML面里,囄是不被徏议的Q如果非要用的话,h意图片不要多?/span>5张,囄最好要l过处理Q越越好。另外图片的格式最好是PNGQ如果有条g的话PNG?/span>GIF?/span>JPG最好都备上?/span>
9、{义字W的使用Q?/span>
?/span>WML中,?/span>HDML一P多个q箋的空格只昄一个空|?/span>WML中,一定要注意使用转义字符Q如Q?/span>
< ----- <
> ----- >
‘ ----- '
“ ----- "
& ----- &
$ ----- $$
I格 -----
- ----- ­
特别是在URL参数传递过E中Q源码中&必须写成&
10、一个标准的cradQ?/span>
card?/span>WML的单元,由此Q我们可以知道一?/span>WML面可以有多?/span>cardQ静态文字预加蝲推荐使用Q?/span>
如下是一?/span>WML最基本的元素:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE wml PUBLIC "-//WAPFORUM//DTD WML 1.1//EN"
"http://www.wapforum.org/DTD/wml_1.1.xml">
<wml>
<head>
<meta forua="true" http-equiv="Cache-Control" content="max-age=0"/>
<meta forua="true" http-equiv="Cache-Control" content="no-cache"/>
</head>
<card id="index" title="爱彩?/span>">
<p>内容</p>
</card>
</wml>
11、关?/span>WML面的表单参数提?/span><anchor>Q?/span>
有一个标准的表单提交的实例:
源码Q?/span>
<img src="http://wap.baidu.com/logo.gif" alt="Baidu"/>
<input name="word" size="4"/><br/>
<anchor>
搜网页
<go method="get">
<postfield name="word" value="$(word)"/>
<postfield name="tn" value="wisewml"/>
<postfield name="rn" value="5"/>
<postfield name="ie" value="unicode"/>
<postfield name="cl" value="2"/>
<postfield name="vit" value="uni"/>
<postfield name="from" value="578b_w1"/>
</go>
</anchor>|
<anchor>
进贴吧
<go method="get">
<postfield name="kw" value="$(word)"/>
<postfield name="from" value="578b_w2"/>
<postfield name="inb" value="1"/>
</go>
</anchor>
在这里有个很好的体现Q提交文字所在的位置Q这个问题,针对部分手Z有差异(会生页面解析失败的情况Q。我们最好的习惯是将提交文字写在<anchor>?/span><go href=”” method=”get”>之间?/span>
12?/span>WAP如何保证表现层可l护性?
q可能是最可怕的事情了,׃WAP业务的特D性,合作推广相对WAP较频J,如果pȝ开发h员没有一个好的思想Q好的编E习惯,喜欢代码粘来粘去(特别是页面代码)Q时间长了,q将l系l带来毁灭性的l局?/span>
13、低端机?/span>WML标签的支持?
Udl端Q大家要清楚的就是这是个以简zؓȝ地盘Q无Z业务上还是从技术上Q?/span>WEB人员都喜Ƣ将WEB的一套模式照搬到WAP中来Q如果你真的那样做的话,我要告诉你,你会ȝ很惨Q很?/span>WEB上的业务是跟WAP的用L的截然不同的Q那么从技术上来说Q也是不能通用的?/span>
特别是低端机Q很多好的效果,好的模式都是不支持的Q所以说q是个简单的q_?/span>
举例Q在html面我们会用各种颜色Q各U字体,x设法的让展示更炫Q?/span>WAP行不通的Q如下标{ְ不能通过---一般手Z报:内容格式错误
<b>_体</b> ---------低端Z支持
<i>斜体</i> ---------低端Z支持
<img alt="pic" src="" /> ---------在?/span>img标签Ӟalt标签必填
如果你想你的应用以展Cؓ主,那么有些丰富面的标{你可以试一下,如果你的q_是电子商务,那么我奉劝品及开发h员,q些标签你还是离它们q点?/span>
14、如何去?/span>WAP面输入框缓存?
?/span>WAP面输入框的~存是让用户感到很头疼的东西Q很多时候我们第二次讉K同一个输入框是想重新输入值的Q结果页面响应给我们的框里却遗留了上一ơ输入的倹{还需要手动的删除上一ơ数据再重新输入数据。从q个操作上来说让用户体验很不畅Q或者说l用户用带来了d?/span>
Z规避q种输入框缓存,我们可以利用随机敎ͼ如参?/span>param我们可以写成 param + random
15、部分手机对下拉框的支持度?
在开发过E中Q我们遇C些奇怪的问题Q在WAP1.0的手机里Q有些低端的手机不支持下拉框的定号选择。如Q?/span>
<select name='params'>
<option value='1'>value1</option>
<option value='3'>value3</option>
<option value='5'>value5</option>
<option value='7'>value7</option>
<option value='9'>value9</option>
</select><br/>
原本我们是希望用户选择的是3Q则我们接受到的也是3Q可是不q的是,我们接收到的?Q通过多次的查日志验证Q确实有q样的情况存在,卻I该类型的手机下拉框全部是按照升序的D行传递的。那么在我们q个事例的值就是,0,1,2,3,4而不?,3,5,7,9?/span>
16、部分手机对复选框的支持?
q个Ҏ需要品设计h员注意了Q在产品设计的时候尽量避免这些复选的出现。因为在出现复选框的时候,部分手机是会默认全选的Q如MOTO手机Q?/span>
(2)配置hibernate.cfg.xml文g
(1) hibernate.connection.provider_class定义Hibernate的连接加载类Q这里Proxoolq接池是用这个,不同的连接池有不同的加蝲c,可以查阅Hibernate文档获取相关信息
(2) hibernate.proxool.pool_aliasq里是用我们上面提到的q接池的别名
(3) hibernate.proxool.xml是向Hibernate声明q接池的配置文g位置Q可以用相对或绝对\径,用相对\径时要注意一定在要Path范围内!不然会抛出异常?br />
(4) dialect是声明SQL语句的方a
(5) show_sql定义是否昄Hibernate生成的SQL语言Q一般在调试阶段设ؓtrue,完成后再ҎfalseQ这h利于调试?br />
(6) <mapping >资源文g映射
uuid.hexQ采?28位的法来生成一?2位字W串。最通用的一U方式。适用于所有数据库
uuid.stringQ同样采?28位的UUID法。将生成的字W编码位16位。适用于除PostgreSQL.以外的数据库
nativeQ根据具体连接的数据库从identity, sequence或者hilo选择一U来生成主键。适用的数据库Ҏ选择的生成方式确定?
assignedQ?交给应用自己l主键赋倹{要注意的是赋值必d调用save()Ҏ之前完成。适用的数据库Ҏ选择的生成方式确定?/p>
Unmi’s blogQ?a >http://unmi.cc
Quartz cron 表达式的格式十分cM?UNIX cron 格式Q但q是有少许明昄区别。区别之一是 Quartz 的格式向下支持到U别的计划Q?UNIX cron 计划仅支持至分钟U。许多我们的触发计划要基于秒U递增?例如Q每45U?Q因此这是一个非常好的差异?/span>
?UNIX cron 里,要执行的作业Q或者说命oQ是存放?cron 表达式中的,在第六个域位|上。Quartz ?cron 表达式存放执行计划。引用了 cron 表达式的 CronTrigger在计划的旉里会?job 兌上?/span>
另一个与 UNIX cron 表达式的不同Ҏ在表辑ּ中支持域的数目。UNIX l出五个?分、时、日、月和周)QQuartz 提供七个域。表 5.1 列出?Quartz cron 表达式支持的七个域?/span>
名称 |
是否必须 |
允许?/span> |
Ҏ字符 |
U?/span> |
?/span> |
0-59 |
, - * / |
?/span> |
?/span> |
0-59 |
, - * / |
?/span> |
?/span> |
0-23 |
, - * / |
?/span> |
?/span> |
1-31 |
, - * ? / L W C |
?/span> |
?/span> |
1-12 ?JAN-DEC |
, - * / |
?/span> |
?/span> |
1-7 ?SUN-SAT |
, - * ? / L C # |
q?/span> |
?/span> |
I??1970-2099 |
, - * / |
月䆾和星期的名称是不区分大小写的?span style="color: purple">FRI?fri是一L?br />
域之间有I格分隔Q这?UNIX cron 一栗无可争辩的Q我们能写的最单的表达式看h是q个了:
* * * ? * *
q个表达会每U钟(每分U的、每时的、每天的)Ȁ发一个部|的 job?/span>
·理解Ҏ字符
?UNIX cron 一PQuartz cron 表达式支持用Ҏ字符来创建更为复杂的执行计划。然而,Quartz 在特D字W的支持上比标准 UNIX cron 表达式更丰富了?/span>
* 星号
使用星号(*) 指示着你想在这个域上包含所有合法的倹{例如,在月份域上用星h味着每个月都会触发这?trigger?br />
表达式样例:0 * 17 * * ?
意义Q每天从下午5点到下午5:59中的每分钟激发一?trigger。它停在下午 5:59 是因为?17 在小时域上,在下?6 ҎQ小时变?18 了,也就不再理会q个 triggerQ直C一天的下午5炏V?br />
在你希望 trigger 在该域的所有有效g被激发时使用 *字符?/span>
? 问号
? 号只能用?span style="color: purple">?/span>?span style="color: purple">周域上,但是不能在这两个域上同时使用。你可以认ؓ ?字符?"我ƈ不关心在该域上是什么倹{? q不同于星号Q星h指示着该域上的每一个倹{? 是说不ؓ该域指定倹{?br />
不能同时q两个域上指定值的理由是难以解释甚x难以理解的。基本上Q假定同时指定值的话,意义׃变得含不清了:考虑一下,如果一个表辑ּ?span style="color: purple">?/span>域上有?1Q同时在?/span>域上指定?WED。那么是?trigger 仅在每个月的11P且正好又是星期三那天被激发?q是在每个星期三?1可Ȁ发呢Q要去除q种不明性的办法是不能同时在这两个域上指定倹{?br />
只要CQ假如你两域的其中一个指定了|那就必须在另一个字g放一???br />
表达式样例:0 10,44 14 ? 3 WEB
意义Q在三月中的每个星期三的下午 2:10 ?下午 2:44 被触发?/span>
, 逗号
逗号 (,) 是用来在l某个域上指定一个值列表的。例如,使用?0,15,30,45 在秒域上意味着?5U触发一?trigger?br />
表达式样例:0 0,15,30,45 * * * ?
意义Q每刻钟触发一?trigger?/span>
/ 斜杠
斜杠 (/) 是用于时间表的递增的。我们刚刚用了逗号来表C每15分钟的递增Q但是我们也能写成这?0/15?br />
表达式样例:0/15 0/30 * * * ?
意义Q在整点和半Ҏ?5U触?trigger?/span>
- 中划U?/span>
中划U?(-) 用于指定一个范围。例如,在小时域上的 3-8 意味着 "3,4,5,6,7 ?8 炏V? 域的g允许回卷Q所以像 50-10 q样的值是不允许的?br />
表达式样例:0 45 3-8 ? * *
意义Q在上午?点至上午?点的45分时触发 trigger?/span>
L 字母
L 说明了某域上允许的最后一个倹{它仅被?/span>?span style="color: purple">?/span>域支持。当用在日域上,表示的是?span style="color: purple">?/span>域上指定的月份的最后一天。例如,当月域上指定?JANӞ?span style="color: purple">?/span>域上?L会促?trigger ??1可触发。假?span style="color: purple">?/span>域上?SEPQ那?L 会预C着??0可发。换句话_是不管指定了哪个月Q都是在相应月䆾的时最后一天触?trigger?br />
表达?0 0 8 L * ?意义是在每个月最后一天的上午 8:00 触发 trigger。在?/span>域上?* 说明?"每个??br />
?L字母用于周域上,指示着周的最后一天,是星期?(或者数?)。所以如果你需要在每个月的最后一个星期六下午?11:59 触发 triggerQ你可以用这L表达?0 59 23 ? * L?br />
当用于?/span>域上Q你可以用一个数字与 Lqv来表C月份的最后一个星?X。例如,表达?0 0 12 ? * 2L说的是在每个月的最后一个星期一触发 trigger?/span>
不要让范围和列表g L q用 |
W 字母
W 字符代表着qx (Mon-Fri)Qƈ且仅能用于日域中。它用来指定L定日的最q的一个^日。大部分的商业处理都是基于工作周的,所?W 字符可能是非帔R要的。例如,日域中的 15W意味着 "该?5L最q一个^日? 假如15h星期六,那么 trigger 会在14?星期?触发Q因15hq的是星期一Q这个例子中也会?7?span style="color: blue">Q译者Unmi注:不会?7可发的Q如果是15WQ可能会是在14?15h星期?或?5?15h星期?触发Q也是只能出现在邻q的一天,如果15号当天ؓqx直接׃当日执行Q?/span>?span style="color: purple">W只能用在指定?span style="color: purple">?/span>域ؓ单天Q不能是范围或列表倹{?/span>
# 井号
# 字符仅能用于?/span>域中。它用于指定月䆾中的W几周的哪一天。例如,如果你指定周域的gؓ 6#3Q它意思是某月的第三个周五 (6=星期五,#3意味着月䆾中的W三?。另一个例?2#1意思是某月的第一个星期一 (2=星期一Q?span style="color: purple">#1意味着月䆾中的W一?。注意,假如你指?#5Q然而月份中没有W?5 周,那么该月不会触发?/span>
讉K值栈中对象的普通属?get setҎ)Q?/span>
<s:property value="user.age"/>
<s:property value="user['age']"/>
<s:property value="user[""age""]"/>
wrong: <%--<s:property value="user[age]"/>--%>
讉K值栈中对象的普通属?get setҎ):
<s:property value="cat.friend.name"/>
讉K值栈中对象的普通方法:<s:property value="password.length()"/>
讉K值栈中对象的普通方法:<s:property value="cat.miaomiao()" />
讉K值栈中action的普通方法:<s:property value="m()" />
讉K静态方法:<s:property value="@com.bjsxt.struts2.ognl.S@s()"/>
讉K静态属性:<s:property value="@com.bjsxt.struts2.ognl.S@STR"/>
讉KMathcȝ静态方法:<s:property value="@@max(2,3)" />
讉K普通类的构造方法:
<s:property value="new com.bjsxt.struts2.ognl.User(8)"/>
讉KList:<s:property value="users"/>
讉KList中某个元?<s:property value="users[1]"/>
讉KList中元素某个属性的集合:<s:property value="users.{age}"/>
讉KList中元素某个属性的集合中的特定?
<s:property value="users.{age}[0]"/>
<s:property value="users[0].age"/>
讉KSet:<s:property value="dogs"/>
讉KSet中某个元?<s:property value="dogs[1]"/>
<!--set是没有顺序的Q所以取下标值是没有意义?->
讉KMap:<s:property value="dogMap"/>
讉KMap中某个元?<s:property value="dogMap.dog101"/>
<s:property value="dogMap['dog101']"/>
<s:property value="dogMap[""dog101""]"/><!--取出key为dog101的?->
讉KMap中所有的key:<s:property value="dogMap.keys"/>
讉KMap中所有的value:<s:property value="dogMap.values"/>
讉K容器的大:<s:property value="dogMap.size()"/>
<s:property value="users.size"/> <!--不加ku9ohao也可以访?->
投媄(qo)Q?lt;s:property value="users.{?#this.age==1}[0]"/><!--格式固定Qthis指@环过E中的每一个对象。取出users里age{于1的集合里面的W一个元?->
投媄Q?lt;s:property value="users.{^#this.age>1}.{age}"/><!--^指第一个元?->
投媄Q?lt;s:property value="users.{$#this.age>1}.{age}"/><!--$指结元素-->
投媄Q?lt;s:property value="users.{$#this.age>1}.{age} == null"/><!--查看age>1的user的age是否为空-->
[]:<s:property value="[0].username"/>
<!--指value stack栈顶的那个ActionQ因为action在栈?值value stack从上往下数的第?个元?-->
<!--[0]代表action的位|,而不是action那个对象Q[0]代表?往下数到栈底的对象的集合?->
<!--[0].usernameQ如果有多个actionQ在W一个action里找不到[0].usernameQ会往下找-->
Appfuse是由Matt Raible开发的一个指导性的入门UJ2EE框架Q它对如何集成流行的Spring、Hibernate、iBatis、struts、Xdcolet、junit {基框架l出了示范。提供了对Taperstry和JSF的支持?/span>
?在持久层斚wQAppFuse可以使用Hibernate O/R映射工具Qhttp://www.hibernate.orgQ、iBatisQ?/span>
?在容器方面,它采用了Spring FrameworkQhttp://www.springframework.orgQ;
?在web框架斚wQ用户可以自由选择Struts、Spring/MVCQWebworkQTaperstry、JSFq几个web框架?/span>
?在开发模式方面,采用TDD的开发方式,使用JUnit试各层Q甚x?jsp 输出?w/o 错误?/span>
?化开发方面,Appfuse预定义好了一套目录结构、基cR用来创建数据库、配|Tomcat、测试部|应用的 Ant dQ帮助快速自动生成源E序和自动维护部分配|文件?/span>
保存Q运行,q是不成功!感觉好似urlrewrite.jarq个包没启动成功一P但我已经时时按网上的配置配好的了Q加载顺序ؓQ?
1, encodingFilter
2, opensessionInviewfilter
3, UrlRewriteFilter
4, struts2-Cleanup
5, struts2
q已l是没有错的了,Z么会不成功的呢?于是再googleQ终于在http://wiki.springside.org.cn/display/SpringSide3/Viewq个里看到一句:首先在web.xml中加入url rewrite filter,注意需攑ֈstruts2 filter的前面,然后在WEB-INF/下放一个urlrewrite.xmlq行定义Q然后在WEB-INF/下放一个urlrewrite.xmlQ?于是马上查看了一下,发现我自q竟然写在src目录下,那些在WEB-INF目录下就是在classes生成urlrewrite.xmlQ于是将src目录下的删除Q再classes目录下移至WEB-INF目录下再q行。泪奔中.....实在太操心意了?nbsp;
原文出处Q?a style="font-family: " >http://it.chinawin.net/softwaredev/article-c88e.html
Blocked time includes any pre-processing time (such as cache lookup) and the time spent waiting for a network connection to become available. Internet Explorer will only create a maximum of two concurrent network connections per host name (i.e. www.microsoft.com) and will queue up requests until a network connection is available. Often the Blocked time is the most significant factor in the download time of images embedded in a web page.
闭塞旉Q包括所有的q程之前的时_像,cacheҎQ和{待|络链接的时_IE在每个主机名Q像www.microsoft.comQ下最多只创徏两个当前的网l连接,而且要排队等待直到这个网l链接可用,通常Q闭塞时间媄响网中囄加蝲旉的重要因素?/p>
Connect is the time required to create a TCP connection to the web server (or proxy). If a secure HTTPS connection is being used this time includes the SSL handshake process. Keep-Alive connections are often used to avoid the overhead of repeatedly connecting to the web server.
q接旉Q是创徏TCPq接到服务器或者代理服务器所p的时_如果一个包含SSL的安全的HTTPSq接存在QKeep-Alive链接l常被用刎ͼ以避免多ơ重复的q接WEB服务器?/p>
Send is the time required to send the HTTP request message to the server and will depend on the amount of data that is sent to the server. For example, long Send times will result from uploading files using an HTTP POST
发?/strong>Q是发送HTTPh到服务器的时_而且q个旉取决与发送请求的数据量的大小Q例如,长的发送时间是׃用PSOT方式上传文g造成的?/p>
Wait is the idle time spent waiting for a response message from the server. This value includes delays introduced due to network latency and the time required to process the request on the web server. {待Q是p在等待服务器响应消息的空闲时_q个值包括网lgq和服务器处理请求的旉?/p>
Receive is the time taken to read the response message from the server. This value will be depend on the size of the content returned, network bandwidth and whether HTTP compression was used. 接收Q是p在从服务器读取响应消息的旉。这个值可以受到请求消息内容的大小Q网l带宽和是否使用了HTTP压羃?/p>
Cache Read is the time taken to read the content from the browser cache during (Cache) or 304 responses. ~存dQ是p在从览器缓存中d内容或?04响应的时间?/p>
TTFB (or Time To First Byte) is the duration from the initial network request being initiated by the browser to the first byte being received from the server. It includes TCP connection time, the time to send the request and the time taken to get the first byte of the response message. TTFBQ是最初的|络h被发起到从服务器接收到第一个字节这D|_它包含了TCPq接旉Q发送HTTPh旉和获得响应消息第一个字节的旉?/p>
Network is the total duration of all network related operations for an HTTP request. NetworkQ是所有的对一个HTTPh的相x作的q段旉?/p>
]]>
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.ClassUtils;
import org.apache.commons.lang.RandomStringUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.math.NumberUtils;
/**
* commons-lang-2.4.jar 包常用方法集?br />
*
*/
public class CommonsLang {
public static void main(String[] args) {
String[] test = {"33", "ddffd"};
String[] test1 = {"ddffd", "33"};
// 1.判断两个数据是否相等
System.out.println(ArrayUtils.isEquals(test, test1));
// 2.{33,ddffd} 数l内容以{,}形式输出Q?br />
System.out.println(ArrayUtils.toString(test));
Map map = ArrayUtils.toMap(new String[][] { { "RED", "#FF0000" }, { "GREEN", "#00FF00" }, { "BLUE", "#0000FF" } });
// 3.toMap 一个数l,但每个元?Each element of the array
// must be either a {@link java.util.Map.Entry} or an Array,
// 方式一 下面是遍历map的方式,取得其keySet.iterator();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
// it.next()只包含key
System.out.println("key:" + key + "value:" + map.get(key));
}
// 方式?取得其entrySet()集合,
Iterator it1 = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it1.next();
// it1.next()中包含key和value
System.out.println("key :" + entry.getKey() + "value :" + entry.getValue());
}
// 4.取得cd
System.out.println(ClassUtils.getShortClassName(Test.class));
// 取得其包?br />
System.out.println(ClassUtils.getPackageName(Test.class));
// 5.NumberUtils
System.out.println(NumberUtils.stringToInt("6"));
System.out.println(NumberUtils.stringToInt("7", 10));
// 6.五位的随机字母和数字
System.out.println(RandomStringUtils.randomAlphanumeric(5));
// 7.StringEscapeUtils
System.out.println(StringEscapeUtils.escapeHtml("<html>"));
// 输出l果?amp;lt;html>
System.out.println(StringEscapeUtils.escapeJava("String"));
// 8.StringUtils,判断是否是空格字W?br />
System.out.println(StringUtils.isBlank(" "));
// 数l中的内容以,分隔
System.out.println(StringUtils.join(test, ","));
// 在右边加下字W?使之总长度ؓ6
System.out.println(StringUtils.rightPad("abc", 6, 'T'));
// 首字母大?br />
System.out.println(StringUtils.capitalize("abc"));
// Deletes all whitespaces from a String 删除所有空?br />
System.out.println(StringUtils.deleteWhitespace(" ab c "));
// 判断是否包含q个字符
System.out.println(StringUtils.contains("abc", "ba"));
// 表示左边两个字符
System.out.println(StringUtils.left("abc", 2));
System.out.println(StringUtils.right("abcd", 3));
}
}
<s:form action="submit.action" >
<s:textfield name="param" label="content"/>
<s:submit name="method1" value="Ҏ一" method="method1"/>
<s:submit name=" method1" value="Ҏ?/span>" method="method1" />
</s:form>
try {
XXX
} catch (Exception e) {
Super.addFieldError(“username”, “输入有误”);
或者:
Super.addActionError(“输入有误”);
}
感兴可以研I一下源码,使用时我们只需要在面昄q些错误?/span>OK?/span>
如:
<s:fielderror>
<s:param>username</s:param>
</s:fielderror>
或?/span>
<s:actionerror/>
但是在实际应用中Q?/span>fielderror我们比较們于有针对性的错误信息输出Q因?/span>fielderror它本w就是个MapQ可以详l指定错误的字段-原因。而且在表单提交时更合适,只要对应?/span>error字段和提交属性的字段?/span>Struts2会ؓ我们自动表格排版(没试?/span>)
修改主题:<s:form theme="simple"> 不能昄错误信息,不能自动d表格排版,Ҏ需要自己发?/span>
注:我们只需要进行设|?/span>error的默?/span>inputQ?/span>Struts2会ؓ我们自动q行视图转发Q?/span><result name=”input”>/input.jsp</result>
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:125)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:162)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:227)
at oracle.jdbc.driver.CharCommonAccessor.getLong(CharCommonAccessor.java:239)
at oracle.jdbc.driver.OracleResultSetImpl.getLong(OracleResultSetImpl.java:514)
at oracle.jdbc.driver.OracleResultSet.getLong(OracleResultSet.java:1617)
at org.hibernate.type.LongType.get(LongType.java:28)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:163)
at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:154)
at org.hibernate.type.AbstractType.hydrate(AbstractType.java:81)
at org.hibernate.persister.entity.AbstractEntityPersister.hydrate(AbstractEntityPersister.java:2096)
at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:1380)
at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:1308)
at org.hibernate.loader.Loader.getRow(Loader.java:1206)
at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:580)
at org.hibernate.loader.Loader.doQuery(Loader.java:701)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
at org.hibernate.loader.Loader.doList(Loader.java:2220)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
at org.hibernate.loader.Loader.list(Loader.java:2099)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
从异怸我们明确的能看到 org.hibernate.type.LongType.get(LongType.java:28)Q这个表明了?/span>LongType的异常。此时我们锁定的目标是实体cȝLongcd?/span>
1. 查实体类?/span>Longcd参数与数据库中对应的字段是否匚w
2. 如果?/span>O-R对应的字D늱型没问题Q则考虑DB中数据是否有问题Q?/span>Hibernate中,Stringcd的数据可以插入到Longcd中,可是在查询时候将无法转型Q详l请了解Oracle?/span>Longcd数据Q?/span>
struts提供两种方式讉Ksession?/span>requestQ其中比较常用的是利?/span>SPRING里面所说的IOCx制反?/span>
IOC方式Q?/span>
actioncd?/span>ServletRequestAware接口Qƈ新徏一?/span>HttpServletRequest request
public class UserLoginAction extends ActionSupport implements ServletRequestAware {
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
然后可以生成?/span>request得到对象Q如request.getRemoteAddr()
actioncd?/span>SessionAware接口Qƈ创徏一?/span>MAP对象session
public class UserLoginAction extends ActionSupport implements ServletRequestAware,SessionAware{
public void setServletRequest(HttpServletRequest request) {
this.request=request;
}
public void setSession(Map session) {
this.session=session;
}
?/span>Ioc方式
q种方式主要是利用了com.opensymphony.xwork2.ActionContextcM?/span>org.apache.struts2.ServletActionContextc,具体的方法如下所C?/span>
获得request对象Q?/span>
A. HttpServletRequest request = ServletActionContext.getRequest ();
BQ?/span>ActionContext ct = ActionContext.getContext()
HttpServletRequest request = (HttpServletRequest)ct.get(ServletActionContext. HTTP_REQUEST );
获得session对象Q?/span>
?/span>Struts2中底层的session都被装成了MapcdQ我们称之ؓSessionMapQ而^常我们所说的session则是?/span>HttpSession对象Q具体的获得Ҏ如下所C?/span>
AQ?/span>Map session = ActionContext.getSession();
BQ?/span>Map session = (Map)ActionContext.getContext().get(ActionContext.SESSION);
得到q个SessionMap之后我们可以对sessionq行d了,如果我们惛_到原始的HttpSession可以首先得到HttpServletRequest对象Q然后通过request.getSession()来取得原始的HttpSession对象。一般情况下SessionMap已经可以完成所有的工作Q我们不必再ȝ底层?/span>session了?/span>
1. 标准?/span>WML1.0表单提交格式
<anchor>提交
<go href="<s:url value='/wap/postParams.action/>" method="get">
<postfield name="param1" value="$(param1)" />
<postfield name="param2" value="$(param2)" />
<postfield name="struts.token.name" value="struts.token"/>
<postfield name="struts.token" value="${sessionScope['struts.token'] }"/>
</go>
</anchor>
2. <a href=””></a>?/span><s:url />完成链接效果
<a href='
<s:url action="postParams">
<s:param name="param1" value="#stu.id" />
<s:param name="struts.token.name" value="struts.token" />
<s:param name="struts.token" value="${sessionScope['struts.token']}" />
</s:url>'>
提交</a>
3Q?/span><s:a /> ?/span> <s:url />一起完成链接提?/span>
<s:url id="toUrl" action="postParams" namespace="/wap">
<s:param name="param1" value="%{param1}"/>
<s:param name="param2" value="%{param2}" />
<s:param name="struts.token.name" value="struts.token" />
<s:param name="struts.token" value="${sessionScope['struts.token'] }"/>
</s:url>
<s:a href="%{toUrl}">提交</s:a>
以上q三个方法在无线互联|开发过E中都是很实用的Q具体的要看个h爱好Q当Ӟ如果你做WEB开发,你也可以直接?/span><s:form />