??xml version="1.0" encoding="utf-8" standalone="yes"?>蜜臀av一区二区,欧美日韩激情视频一区二区三区,综合视频一区http://www.aygfsteel.com/software5168/category/10649.htmlzh-cnSat, 11 Aug 2007 02:00:32 GMTSat, 11 Aug 2007 02:00:32 GMT60如何控制单选、复选、列表框http://www.aygfsteel.com/software5168/archive/2007/08/09/135402.htmlsoftware5168software5168Thu, 09 Aug 2007 01:17:00 GMThttp://www.aygfsteel.com/software5168/archive/2007/08/09/135402.htmlhttp://www.aygfsteel.com/software5168/comments/135402.htmlhttp://www.aygfsteel.com/software5168/archive/2007/08/09/135402.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/135402.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/135402.html下面是部分代码?br><html>
<head>
<script language="javascript">
 function a(){
  window.document.getElementsByName("dx")[0].checked=true;
 }
 function b(){
  window.document.getElementsByName("dx")[0].checked=false;
 }
 function c(){
  window.document.getElementsByName("fx")[0].checked=true;
 }
 function d(){
  window.document.getElementsByName("fx")[0].checked=false;
 }
 function e(){
  for(i=0;i<window.document.getElementsByName("fx").length;i++){
      if(!window.document.getElementsByName("fx")[i].checked){
       window.document.getElementsByName("fx")[i].checked=true;
      }
     }
 }
 function f(){
  for(i=0;i<window.document.getElementsByName("fx").length;i++){
      if(window.document.getElementsByName("fx")[i].checked){
       window.document.getElementsByName("fx")[i].checked=false;
      }
     }
 }
 function g(){
  window.document.getElementById("lbka")[1].selected=true;
 }
 function h(){
  alert("选择号ؓ:"+window.document.getElementById("lbka").selectedIndex + "    gؓ:" +window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].value+"    文本gؓ:" + window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].text);
 }
 function m(){
  sel = false;
  var val="";
     for(i=0;i<window.document.getElementsByName("dx").length;i++){
      if(window.document.getElementsByName("dx")[i].checked){
       val = window.document.getElementsByName("dx")[i].value;
       sel=true;
    break;
      }  
     }
    if(sel){
   alert("单选gؓ:"+val);
     
     }else{
   alert("请选择文g");
      return false;
  }  
 }
 function j(){
  var sel = false;
  var val="";
     for(i=0;i<window.document.getElementsByName("fx").length;i++){
      if(window.document.getElementsByName("fx")[i].checked){
       if(val==""){
        val=window.document.getElementsByName("fx")[i].value;
       }else{
        val = val + "," +window.document.getElementsByName("fx")[i].value;
       } 
      }
     }
     if(val==""){
      alert("请选择文g");
      return false;
     }else{
   alert("复选gؓ:"+val);
  }
 }
</script>
</head>
<body>
<table id="table1" width="100%"  border="1" align="center" cellpadding="0" cellspacing="0">
 <tr>
  <td>文g</td>
  <td>列表?lt;/td>
  <td>单?lt;/td>
  <td>复?lt;/td>
 </tr>
 <tr>
  <td>文gA</td>
  <td><select name="lbka"><option value="lbka1">文gA1</option><option value="lbka2">文gA2</option></select></td>
  <td><input type="radio" name="dx" value="dxa"></td>
  <td><input type="checkbox" name="fx" value="fxa"></td>
 </tr>
 <tr>
  <td>文gB</td>
  <td><select name="lbkb"><option value="lbkb1">文gB1</option><option value="lbkb2">文gB2</option></select></td>
  <td><input type="radio" name="dx" value="dxb"></td>
  <td><input type="checkbox" name="fx" value="fxb"></td>
 </tr>
 <tr>
  <td colspan="4">
   <a href="#" onclick="a();">单选A选中</a>
   <a href="#" onclick="b();">单选A不选中</a>
   <a href="#" onclick="c();">复选A选中</a>
   <a href="#" onclick="d();">复选A不选中</a>
   <a href="#" onclick="e();">复选全?lt;/a>
   <a href="#" onclick="f();">复选全不?lt;/a>
   <a href="#" onclick="g();">选中列表框文件A2</a>
   <a href="#" onclick="h();">取得选中列表框A的?文本</a>
   <a href="#" onclick="m();">判断单选选择</a>
   <a href="#" onclick="j();">判断复选选择</a>
  </td>
 </tr>
</table>
</body>
</html>

software5168 2007-08-09 09:17 发表评论
]]>
如何动态控制表单元?/title><link>http://www.aygfsteel.com/software5168/archive/2007/08/08/135271.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 08 Aug 2007 08:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2007/08/08/135271.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/135271.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2007/08/08/135271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/135271.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/135271.html</trackback:ping><description><![CDATA[主要通过javascript实现Q理解IE的DOMl构Qƈ调用元素的固定方法,可以实现表单元素的动态增删?br>下面是部分代码?br><html><br><head><br><script language="javascript"><br> function add(){<br>  //取得表格<br>  var table = document.getElementById("table1");<br>  //取得行数;<br>  var num = table.rows.length;<br>  //增加一?br>  var newrow1 = table.insertRow(num-1);<br>  var cell1 = newrow1.insertCell();<br>     var cell2 = newrow1.insertCell();<br>     var cell3 = newrow1.insertCell();<br>     var cell4 = newrow1.insertCell();<br>  //增加行元?br>  var inputcell2 = document.createElement("<input size='32' name=''>");<br>     cell2.appendChild(inputcell2);<br>  var inputcell4_1 = document.createElement("<input size='32' name=''>");<br>  var inputcell4_2 = document.createElement("<input type='button' value='删除元素'onClick='del(this);'/>");<br>     cell4.appendChild(inputcell4_1);<br>  cell4.appendChild(inputcell4_2);<br>  //h标签昄<br>  frash();<br> }<br> function del(obj){<br>  //取得按钮所在行<br>  var i = obj.parentNode.parentNode.rowIndex;<br>      var tab = document.getElementById("table1");<br>      //删除按钮所在行<br>  tab.deleteRow(i-1);  <br>      frash();<br> }<br> function frash(){<br>  var table = document.getElementById("table1");<br>     var num = table.rows.length;<br>     //计算动态元素个?br>  var n = num-2;<br>     for(i=1;i<=n;i++){<br>   //讄标签?br>      table.rows[i].cells[0].innerText="元素"+i+"属性A";<br>      //讄属性?br>   table.rows[i].cells[1].childNodes[0].setAttribute("name","ysa"+i);<br>      table.rows[i].cells[2].innerText="元素"+i+"属性B";<br>      table.rows[i].cells[3].childNodes[0].setAttribute("name","ysb"+i);<br>     } <br> }<br></script><br></head><br><body><br><table id="table1" width="100%"  border="1" align="center" cellpadding="0" cellspacing="0"><br> <tr><br>  <td>标签1</td><br>  <td><input name="a"></td><br>  <td>标签2</td><br>  <td><input name="b"></td><br> </tr><br> <tr><br>  <td colspan="4" align="center"><a href="#" onclick="add();">增加元素</a></td><br> </tr><br></table><br></body><br></html> <img src ="http://www.aygfsteel.com/software5168/aggbug/135271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2007-08-08 16:11 <a href="http://www.aygfsteel.com/software5168/archive/2007/08/08/135271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何实现面打印http://www.aygfsteel.com/software5168/archive/2007/08/08/135193.htmlsoftware5168software5168Wed, 08 Aug 2007 03:27:00 GMThttp://www.aygfsteel.com/software5168/archive/2007/08/08/135193.htmlhttp://www.aygfsteel.com/software5168/comments/135193.htmlhttp://www.aygfsteel.com/software5168/archive/2007/08/08/135193.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/135193.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/135193.html下面是部分代码?br><html>
<head>
<title>***上v市眼病防M心病人结帐费用报?**</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<!--media=print q个属性可以在打印时有?->
<style media=print>
.Noprint{display:none;}
.PageNext{page-break-after: always;}
</style>
<style>
body,td,th
{
font-size: 12px;
}
.tdp
{
border-bottom: 1 solid #000000;
border-left: 1 solid #000000;
border-right: 0 solid #ffffff;
border-top: 0 solid #ffffff;
}
.tabp
{
border-color: #000000;

border-collapse:collapse;
}
.NOPRINT {
font-family: "宋体";
font-size: 12px;
}

</style>
<script language="javascript">
  var i=0;
       function zoomL(){
      i++;
      document.getElementById("f").style.zoom=1+i/3;
  }
       function zoomS(){
      i--;
      document.getElementById("f").style.zoom=1+i/3;
  }
</script>
</head>

<body >
<OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0 VIEWASTEXT> </OBJECT>
<input type=button value=打印 onclick="document.all.WebBrowser.ExecWB(6,1)" class="NOPRINT">
<input type=button value=直接打印 onclick="document.all.WebBrowser.ExecWB(6,6)" class="NOPRINT">
<input type=button value=面讄 onclick="document.all.WebBrowser.ExecWB(8,1)" class="NOPRINT">
<input type=button value=打印预览 onclick="document.all.WebBrowser.ExecWB(7,1)" class="NOPRINT">
<input type=button value=攑֤ onclick="zoomL();" class="NOPRINT">
<input type=button value=~小 onclick="zoomS();" class="NOPRINT">
<br/>
<table width="90%" border="0" align="center" cellpadding="0" cellspacing="0">
<tr align="center">
<td colspan="5"><font size="3">上v市眼病防M心病人结帐费用报表(AQ?</font></td>
</tr>
<tr>
<td>汇Mh?5</td>
<td>费用合计 15853.12</td>
<td>l计日期 </td>
<td>制表?023</td>
<td>制表日期Q?004-05-13</td>
</tr>
</table>

<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp" id="f">
<tr>
<td >姓名</td>
<td >住院?lt;/td>
<td >U室</td>
<td >l帐日期</td>
<td >出院日期</td>
<td >费用合计</td>
<td >M交易费用</td>
<td >分类l付费用</td>
<td >非医保交易费</td>
</tr>
<tr>
<td >&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td>
<td >&nbsp;</td> 
<td >&nbsp;</td> 
</tr>
</table>
<hr align="center" width="90%" size="1" noshade class="NOPRINT" >
<!--分页-->
<div class="PageNext"></div>
<table width="90%" border="1" align="center" cellpadding="2" cellspacing="0" bordercolor="#000000" class="tabp">
<tr>
<td >W??lt;/td>
</tr>
<tr>
<td >看到分页了吧</td>
</tr>
<tr>
<td >&nbsp;</td>
</tr>
<tr>
<td >&nbsp;</td>
</tr>
<tr>
<td ><table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td width="50%" >q样的报?
对一般的要求够了?lt;/td>
<td>&nbsp;</td>
</tr>
</table></td>
</tr>
</table>

<table width="780%" border="1" class="Noprint">
<tr>
<td>能不能打?lt;/td>
</tr>
</table>

</body>
</html>


software5168 2007-08-08 11:27 发表评论
]]>
如何同时提交表单中的文g和文?/title><link>http://www.aygfsteel.com/software5168/archive/2007/08/08/135184.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 08 Aug 2007 02:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2007/08/08/135184.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/135184.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2007/08/08/135184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/135184.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/135184.html</trackback:ping><description><![CDATA[<p>思\是把表单cd讄为enctype="multipart/form-data"Q其他表单中文本数据通过javascript处理Q附加在action后面Q后台通过request.getParameter()取得。上传文件调用commons-fileupload.jar中方法?br><br>下面是部分代码?br><form  name="ajform" action="/da.do" method="post" enctype="multipart/form-data"><br>   <tr><td><input name="a" value=""></td></tr><br>   <tr><td><input name="b" type="file"></td></tr><br>   <tr><td><a href="#" onclick="checksubmit();">提交</a></td></tr><br></form></p> <script language="javascript"><br>   function checksubmit(){<br>      var value  = "/da.do?formAction=save";   <br>      value = value+"&a="+ window.document.getElementById("a").value;<br>      window.document.ajform.action=value;<br>      window.document.ajform.submit();<br>   }<br></script><br><br>String a = request.getParameter("a");<br>try {<br>      //文g上传目录“/file/wj”<br>    String filepath= request.getSession().getServletContext().getRealPath("/")+"file"+File.separator+"wj";<br>   //文g上传临时目录“/file/temp”<br>    String tempPath = request.getSession().getServletContext().getRealPath("/")+"file"+File.separator+"temp";<br>    File dir = new File(filepath);<br>      //建立目录<br>       if(!dir.exists()){<br>        dir.mkdirs();<br>       }<br>       File dir1 = new File(tempPath);<br>       if(!dir1.exists()){<br>        dir1.mkdirs();<br>       }<br>       DiskFileUpload fu = new DiskFileUpload();<br>       //讄最大文件尺寸,q里?0MB<br>          fu.setSizeMax(10485760);<br>          //讄~冲区大,q里?kb<br>          fu.setSizeThreshold(4096);<br>          //讄临时目录Q?br>          fu.setRepositoryPath(tempPath);<br>          <br>    List fileItems = fu.parseRequest(request);<br>    Iterator iter = fileItems.iterator();<br>    while (iter.hasNext()) {<br>       FileItem item = (FileItem) iter.next();<br>        String fileName = item.getName();<br>        //判断是否为文?br>        if(fileName!=null){<br>         //取文件名<br>         String name = fileName.substring(fileName.lastIndexOf(File.separator)+1);<br>         if(fileName!=null&& !fileName.equals("")) {          <br>           File file = new File(filepath+File.separator+name);<br>                   //上传文g <br>                  item.write(file);<br>                } <br>        }  <br>     }<br>   } catch (Exception e) {<br>       e.printStackTrace();<br>   } <img src ="http://www.aygfsteel.com/software5168/aggbug/135184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2007-08-08 10:52 <a href="http://www.aygfsteel.com/software5168/archive/2007/08/08/135184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最单的视频面http://www.aygfsteel.com/software5168/archive/2007/01/12/93506.htmlsoftware5168software5168Fri, 12 Jan 2007 10:34:00 GMThttp://www.aygfsteel.com/software5168/archive/2007/01/12/93506.htmlhttp://www.aygfsteel.com/software5168/comments/93506.htmlhttp://www.aygfsteel.com/software5168/archive/2007/01/12/93506.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/93506.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/93506.html<head>
</head>
<body>
<embed height=240 name=aa style="BORDER-BOTTOM:#2a8a21 3px solid;BORDER-LEFT:#2a8a21 3px  solid;BORDER-RIGHT:#2a8a21 3px solid;BORDER-TOP:#2a8a21 3px solid"
 type=audio/x-pn-realaudio-plugin width=320 loop="no" console="clip1" reset="false"
 controls="ImageWindow" src="a1.rmvb">
</embed><br>
<embed height=30 type=audio/x-pn-realaudio-plugin width=320  console="clip1"  reset="false" autostart="false" controls="controlpanel">
</embed><br>
<embed height=30 type=audio/x-pn-realaudio-plugin width=320  console="clip1"  reset="false" autostart="false" controls="statusbar">
</embed><br>
<Script Language=JavaScript>
function OpenFile(txt){
 document.aa.src=txt.value;
}
</Script>
</body>
</html>

software5168 2007-01-12 18:34 发表评论
]]>
ant 模板http://www.aygfsteel.com/software5168/archive/2006/12/14/87658.htmlsoftware5168software5168Thu, 14 Dec 2006 03:03:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/12/14/87658.htmlhttp://www.aygfsteel.com/software5168/comments/87658.htmlhttp://www.aygfsteel.com/software5168/archive/2006/12/14/87658.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/87658.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/87658.html<?xml version="1.0"?>
<project name="jartest" default="jar" basedir=".">
<property name="build.dir" value="${basedir}/build" />
<property name="build.classes.dir" value="${build.dir}/classes" />
<target name="jar" description="打包成Jar">
<jar jarfile="${basedir}/ejbfile.jar">
<fileset dir="${build.classes.dir}">
<include name="**/*.class" />
</fileset>
<metainf dir="${basedir}/META-INF ">
<include name="**" />
</metainf>
</jar>
</target>
</project>

2。web应用打包
<?xml version="1.0"?>
<project name="wartest" default="war" basedir=".">
<target name="war" description="创徏WEB发布?>
<war warfile="${basedir}/EJBTest.war" webxml="${basedir}/WEB-INF/web.xml">
<fileset dir="${basedir}">
<include name="**"/>
<exclude name="build.xml" />
<exclude name="/WEB-INF/web.xml" />
</fileset>
</war>
</target>
</project>

software5168 2006-12-14 11:03 发表评论
]]>
电子书下载连?/title><link>http://www.aygfsteel.com/software5168/archive/2006/12/13/87382.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 13 Dec 2006 01:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/12/13/87382.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/87382.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/12/13/87382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/87382.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/87382.html</trackback:ping><description><![CDATA[ejb3.0实例教程<a ><br />http://book.knowsky.com/down/818.html</a><br /><br />J2EE应用与BEA WebLogic Server(W二?<br /><a >http://www.itepub.net/html/ebookcn/2006/0523/40144.html</a><br /><br />JavaScript权威指南W四?br /><a >http://www.itepub.net/html/ebookcn/2006/0523/40153.html</a><br /><br />Jbuilder2006<br /><a >http://www.borland.com/downloads/download_jbuilder.html</a><br />JBuilder2006破解<br /><a >http://www.54bk.com/user1/2690/archives/2005/21893.html</a><br /><img src ="http://www.aygfsteel.com/software5168/aggbug/87382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-12-13 09:18 <a href="http://www.aygfsteel.com/software5168/archive/2006/12/13/87382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>springMVC心得http://www.aygfsteel.com/software5168/archive/2006/09/17/70138.htmlsoftware5168software5168Sun, 17 Sep 2006 06:11:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/09/17/70138.htmlhttp://www.aygfsteel.com/software5168/comments/70138.htmlhttp://www.aygfsteel.com/software5168/archive/2006/09/17/70138.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/70138.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/70138.html以SimpleFormControllerZ
1。spring 接收一個請求後首先會判?get"還是"post"Ҏ

2? "get"Ҏ?br />         2?? 首先創徏一個command象H通過調用AbstractFormController的formBackingObjectҎ得到H通常是一個pojoH根據name用來和提交的數據E定?br />          2?? 然後會創Z個BindException象H裡面包括command象H和其他一些屬性?br />           2?? 判斷sessionForm 屬性﹐默認為false。如果為trueH就會把command象象保存在session裡   ?面。session中key為類?".FORM." + command象名。可以通過request.getSession().getAttribute(this.getFormSessionAttributeName(request));得到command象?br />      
   2?? 調用AbstractFormController的referenceDataҎ。這個方法默認為I﹐可以復寫來初始化頁面參數?br />
2?? q回ModelAndView象H返回formview頁面?/p>

2 ? “post”方法時
   2?? 首先得到command象,如果SessionForm = falseH調用formBackingObjectde創徏
                     如果SessionForm = true,從request.getSession中得到原command象H然後將command象?br />                     Session中刪除?br />  2??  然後會創Z個ServletRequestDataBinder象H裡面包括command象H和其他一些屬性?br />                   這個過E將調用initBinder()H可以複寫這個方法初始化數據?br /> 2?? 調用processFormSubmission(HttpServletRequest request, HttpServletResponse response, Object command,  BindException errors)。有錯誤時返回formview頁面H否則進入successview頁面。這個過E將調用onSubmit(Object command)H必須複寫這個方法放入業務邏輯?br /> 
   






software5168 2006-09-17 14:11 发表评论
]]>
springMVCW四個例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/09/06/68084.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 06 Sep 2006 10:03:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/09/06/68084.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/68084.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/09/06/68084.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/68084.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/68084.html</trackback:ping><description><![CDATA[ <p>1./WEB-INF/web.xml<br /><?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.4" <br /> xmlns="<a <br /> xmlns:xsi="<a <br /> xsi:schemaLocation="<a >http://java.sun.com/xml/ns/j2ee</a><br /> <a ><br /><!--<br /><!DOCTYPE web-app<br />    PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"<br />    "<a ><br /><web-app><br />--><br /> <br /> <!--<br /> <context-param><br />     <param-name>contextConfigLocation</param-name><br />     <param-value>/WEB-INF/application-servlet.xml</param-value><br />   </context-param><br /> <listener><br />     <listener-class><br />       org.springframework.web.context.ContextLoaderListener<br />     </listener-class><br />   </listener><br />   --><br /> <servlet> <br />        <servlet-name>hello</servlet-name> <br />        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  <br />  <init-param> <br />          <param-name>contextConfigLocation</param-name> <br />          <param-value>/WEB-INF/application-servlet.xml</param-value> <br />      </init-param><br />  <load-on-startup>1</load-on-startup><br />    </servlet> <br /> <br />    <servlet-mapping> <br />        <servlet-name>hello</servlet-name> <br />        <url-pattern>*.do</url-pattern> <br />    </servlet-mapping> <br /> <br /><!--<br /> <taglib> <br />      <taglib-uri>/spring</taglib-uri> <br />      <taglib-location>/WEB-INF/spring.tld</taglib-location> <br /> </taglib><br />--> <br /></web-app><br /><br />2./WEB-INF/application-servlet.xml<br /><?xml version="1.0" encoding="UTF-8"?> <br /><!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<a > <br /><beans> <br />    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <br />        <property name="mappings"> <br />            <props> <br />                <prop key="/login.do">loginAction</prop> <br />            </props> <br />        </property> <br />    </bean> <br />    <br />    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <br />        <property name="viewClass"> <br />            <value>org.springframework.web.servlet.view.JstlView</value> <br />        </property> <br />        <property name="prefix"> <br />            <value>/</value> <br />        </property> <br />        <property name="suffix"> <br />            <value>.jsp</value> <br />        </property> <br />    </bean> <br />    <br />    <bean id="loginAction" class="onlyfun.caterpillar.LoginAction"> <br />        <property name="commandName"><br />         <value>command</value><br />  </property><br />  <property name="commandClass"> <br />            <value>onlyfun.caterpillar.LoginForm</value> <br />        </property> <br />        <property name="successView"> <br />            <value>success</value> <br />        </property> <br />        <property name="formView"> <br />            <value>form</value> <br />        </property><br />       <property name="user">          <br />            <ref local="user" /><br />        </property><br />    </bean> <br />   <br />   <bean id="user" class="onlyfun.caterpillar.User"><br />     <property name="username"><br />         <value>111</value><br />     </property><br />     <property name="password"><br />         <value>111</value><br />     </property><br />    </bean><br /></beans></p> <p> <br /> <br />3./form.jsp<br /><<a href="mailto:%@taglib">%@taglib</a> prefix="spring" uri="<a %</a>> <br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><html> <br /><head><title>Login</title></head> <br /><body><br /> <spring:bind path="command.*"> <br />        <font color="red"><b>${status.errorMessage}</b></font><br> <br />    </spring:bind> <br />       請入用者名Ep密碼Q?lt;p>     <br />    <form name="loginform" action="login.do" method="post"> <br />     <spring:bind path="command.username">   <br />          名稱 <input type="text" name="${status.expression}" value="${status.value}"/><br />          <font color="red">${status.errorMessage}</font><br><br />     </spring:bind><br />     <spring:bind path="command.password">  <br />          密碼 <input type="password" name="${status.expression}" value="${status.value}"/><br />          <font color="red">${status.errorMessage}</font><br><br />     </spring:bind> <br />        <input type="submit" value="定"/> <br />    </form> <br />      注意Q入錯誤會再回到這個頁面中? <br /></body> <br /></html><br /><br />4./index.jsp<br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><br />  </head> <br />  <body>   <br />    begin......<br />    <%<br />     response.sendRedirect("login.do");<br />    %><br />  </body><br /></html><br /><br />5./success.jsp<br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><<a href="mailto:%@taglib">%@taglib</a> prefix="c" uri="<a %</a>><br /><html> <br /><head><title>Login Success</title></head> <br /><body> <br />    <H1><c:out value="用戶名﹕${user}"/></H1> <br /></body> <br /></html><br /><br />6./WEB-INF/classes/onlyfun/caterpillar/LoginAction.class<br />package onlyfun.caterpillar; </p> <p>import org.springframework.validation.BindException;<br />import org.springframework.web.servlet.mvc.SimpleFormController; <br />import org.springframework.web.servlet.*; </p> <p>public class LoginAction extends SimpleFormController { <br />    private User user;<br />    protected ModelAndView onSubmit(Object command,BindException errors) throws Exception { <br />       LoginForm form = (LoginForm) command; <br />       String username = user.getUsername();<br />       String password = user.getPassword();<br />       if(username.equals(form.getUsername()) && <br />         password.equals(form.getPassword())) { <br />          return new ModelAndView(this.getSuccessView(),"user", form.getUsername());<br />       }<br />       else { <br />        errors.reject("loginfail", "使用者名E或密碼錯誤"); <br />        if(!(username.equals(form.getUsername()))){<br />         errors.rejectValue("username", "error", null, "使用者名E錯?);<br />        }<br />       if(!(password.equals(form.getPassword()))){<br />         errors.rejectValue("password", "error", null, "密碼錯誤"); <br />        }       <br />           return new ModelAndView(this.getFormView(),errors.getModel()); <br />       } <br />    }<br />    public User getUser() {<br />     return user;<br />    }<br />    public void setUser(User user) {<br />     this.user = user;<br />    } <br />}</p> <p> <br /> <br />7./WEB-INF/classes/onlyfun/caterpillar/LoginForm.class<br />package onlyfun.caterpillar; </p> <p>public class LoginForm { <br />    private String username; <br />    private String password; <br />    <br />    public void setUsername(String username) { <br />       this.username = username; <br />    } <br />    <br />    public void setPassword(String password) { <br />       this.password = password; <br />    } <br />    <br />    public String getUsername() { <br />       return username; <br />    } <br />    <br />    public String getPassword() { <br />       return password; <br />    } <br />}<br /><br />8./WEB-INF/tags/spring.tld<br /><br />9./WEB-INF/tags/c.tld<br /><br />10./WEB-INF/classes/onlyfun/caterpillar/User.class<br />package onlyfun.caterpillar;</p> <p>public class User {<br /> private String username;<br /> private String password;<br /> public String getPassword() {<br />  return password;<br /> }<br /> public void setPassword(String password) {<br />  this.password = password;<br /> }<br /> public String getUsername() {<br />  return username;<br /> }<br /> public void setUsername(String username) {<br />  this.username = username;<br /> }<br />}</p> <img src ="http://www.aygfsteel.com/software5168/aggbug/68084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-09-06 18:03 <a href="http://www.aygfsteel.com/software5168/archive/2006/09/06/68084.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ServletConfig与ServletContext的区?/title><link>http://www.aygfsteel.com/software5168/archive/2006/09/05/67752.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Tue, 05 Sep 2006 02:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/09/05/67752.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/67752.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/09/05/67752.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/67752.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/67752.html</trackback:ping><description><![CDATA[ HttpServletRequest,HttpServletResponse:q两个属性的作用范围最?br />    旉上:只是本nh和应{完成就失效Q当然{发是把当前的request对象取出来传l另一<br />          个资源,其实本n的request对象q是只生存到本次hl束Qresponse也同栗?br />    I间上:只能发送请求的客户端有效?br /><br />    HttpSession:一ơ连l到客户端关闭,旉作用范围比上面两个大Q空间Q用范围相同?br /><br />    ServletConfig:从一个servlet被实例化后,对Q何客L在Q何时候访问有效,但仅Ҏservlet<br />    有效Q一个servlet的ServletConfig对象不能被另一个servlet讉K?br /><br />    ServletContext:对Q何servletQQ何h在Q何时间都有效Q这才是真正全局的对象?br /><br />    那么QServletConfig参数和ServletContext参数到底应该如何使用Q如何取得?<br /><br />    一般来_Ҏ个应用的配置Qؓ了不使用“硬~码”,应该配置为ServletContext参数Q比如字<br />    W集讑֮?br />    <web-app><br />        .................<br />        <init-param><br />            <param-name>charset</param-name> <br />            <param-value>GB2312</param-value> <br />        </init-param><br />        .................<br />    </web-app><br />    注意以上格式只是2?以后的标准格式,旧容器(引擎Q采用服务商自己的格式配|。注意它?br />    父元素应该是<web-app>也就是说它是对一个应用作用的?br /><br />    而如果只有一个特定的servlet要设定的参数Q其它servlet不能׃nQ应该配|ؓServletConfig<br />    参数Q如一个读取附件的servlet要用到绝对目录,而别的servlet不会用到Q?br />    <servlet><br />            <servlet-name>GetAtt</servlet-name><br />        <servlet-class>mail.GetAttServlet</servlet-class><br />        <init-param><br />            <param-name>absPath</param-name> <br />            <param-value>/usr/mail/ax/axman/Maildir/</param-value> <br />        </init-param><br />    </servlet><br />    不用_因ؓ?lt;servlet>标签中已l指定了name和class,也就是说只有mail.GetAttServletq个<br />    servlet中才能取到path,而别的Servlet是不能取到的?br /><br />    那么如何讉Kq两个对象的参数呢?<br />    讉KServletConfig参数Q?br />        首先要取得ServletConfig对象Q然后调用它的getInitParameter();Ҏ。要讉K<br />    ServletConfig对象Qjsp中直接用config内置对象Q但因ؓ你的JSP~译后的servlet一般不会被<br />    加到web.xml中的Q所以一般不会通过jsp来取ҎJSP~译后的servlet的配|参敎ͼ那么在servlet<br />    中要得到ServletConfig对象有两U方法:<br /><br />    在inii()Ҏ中取刎ͼ通过init的重载方法传?br /><br />    .....<br />    public class Test extends HttpServlet <br />    {<br />        ServletConfig config;<br />        public void init(ServletConfig config) throws ServletException {<br />            this.config = config;<br />        }<br />        ..................<br />    }<br />    然后在下面的Ҏ中就可以讉Kconfig对象。但要注意,Z保能从构造方法中到到当前servlet?br />    config对象Q应该调用父cȝ构造方法:<br />    .....<br />    public class Test extends HttpServlet <br />    {<br />        ServletConfig config;<br />        public void init(ServletConfig config) throws ServletException {<br />            super.init(config);<br />            this.config = config;<br />        }<br />        ..................<br />    }<br /><br />    通过getServletConfig()Ҏ直接到时Q这样做的好处是不必调手工传递属性,惛_M时候都?br />    以得到?br /><br />    q有W三U方法,要自己实C些接口,q里作ؓ一般讨论就不介l了?br /><br />    要访问ServletContext对象Q只要从现有的ServletConfig对象getServletContextQ)可以了Q然?br />    调用它的getInitParameter()Ҏ可以获取它的参数?br /><br />    按说QServletContext对象的作用域比ServletConfig作用域大Qؓ什么要从ServletConfig中到?br />    ServletContext对象呢?我个为:容器保存了很多个ServletContext对象Q请求时容器到底取哪一?br />    l你呢?那就取其中包含ServletConfig信息的那个给你,是说取ServletConfig对象的父U对象。就?br />    象HttpSession要从requset中取得一P是取那个包含当前requese对象的session对象l你Q这只是?br />    的个人想法,q没有来得及看具体实现。反正就q么用吧?<img src ="http://www.aygfsteel.com/software5168/aggbug/67752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-09-05 10:26 <a href="http://www.aygfsteel.com/software5168/archive/2006/09/05/67752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring + jsfhttp://www.aygfsteel.com/software5168/archive/2006/08/25/65776.htmlsoftware5168software5168Fri, 25 Aug 2006 06:06:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/08/25/65776.htmlhttp://www.aygfsteel.com/software5168/comments/65776.htmlhttp://www.aygfsteel.com/software5168/archive/2006/08/25/65776.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/65776.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/65776.htmlJSF和Spring集成的资料比较少,原理是获得彼此的上下文引?以此q一步获得各自管理的bean,q是可能?因ؓ两者是web应用框架都遵循servlet规范,Z者整合提供了可能和基.
 
在Spring中ApplicationContext是相当重要的c?对于web应用,它还包装了javax.servlet.ServletContext,为web应用提供了所有可以利用的数据,包括可管理bean,Faces中通过FacesContextcd以获得所有可以利用的资源,同样包括JSF的可理支持bean,它们都围l着ServletContext提供了自q门面,通过各自的门面在Servlet容器的世界里彼此盔R?
本文介绍两种方式,实现二者集?
1.         通过写自qcL完成二者的q?实际上只是获得彼此世界里存活的bean,对于JSF中事件处理可能需要更q一步的构思和~码,Zq点,W二个方法介l了一U框?
2.         使用框架完成二者集?
 
一  自己动手,下面的代码以CZZ,其它涉及的类和接口略?
q个工具cL供在JSF世界里查找Spring理的bean.也实现在Spring中查找JSFlg的方?
package com.skysoft.rbac.dao;
 
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.faces.el.ValueBinding;
import javax.faces.FactoryFinder;
import javax.faces.application.Application;
import javax.faces.application.ApplicationFactory;
 
public final class SpringFacesUtil {
  public SpringFacesUtil() {
  }
  /**
   * 从Spring中查找bean.
   * @param beanname String
   * @return Object
   */
  public static Object findBean(String beanname) {
    ServletContext context = (ServletContext) FacesContext.getCurrentInstance().
        getExternalContext().getContext();
    ApplicationContext appctx = WebApplicationContextUtils.
        getRequiredWebApplicationContext(context);
    return appctx.getBean(beanname);
  }
  /**
   * 从JSF中查找bean.
   * @param beanname String
   * @return Object
   */
  public static Object lookupBean(String beanname) {
    Object obj = getValueBinding(getJsfEl(beanname)).getValue(FacesContext.
        getCurrentInstance());
    return obj;
  }
 
  private static ValueBinding getValueBinding(String el) {
    return getApplication().createValueBinding(el);
  }
 
  private static Application getApplication() {
    ApplicationFactory appFactory = (ApplicationFactory) FactoryFinder.
        getFactory(FactoryFinder.APPLICATION_FACTORY);
    //FactoryFinder.FACES_CONTEXT_FACTORY
    //FactoryFinder.RENDER_KIT_FACTORY
    return appFactory.getApplication();
  }
 
  private static String getJsfEl(String value) {
    return "#{" + value + "}";
  }
}
下面定义一个由JSF理的bean:
package com.skysoft.rbac.dao;
 
import javax.servlet.ServletContext;
 
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.skysoft.struts.jsf.util.FacesUtils;
 
public class ServiceLocatorBean
    implements ServiceLocator {
  private static final String DAO_SERVICE_BEAN_NAME = "userDAO";
  //q个dao是由Spring提供的管理bean,q个dao可以使用Hibernate实现.
  private UserDAO dao;
 
  public ServiceLocatorBean() {
    this.dao = (UserDAO)SpringFacesUtil.findBean(DAO_SERVICE_BEAN_NAME);
  }
 
  public UserDAO getDao() {
    return dao;
  }
}
下面是一个用ServiceLocatorBean的类.
public class UserDAOImp
    extends HibernateDaoSupport implements UserDAO {
  private UserDAO dao;
  private List list;
 
  public UserDAOImp() {}
 
  public List getList() {
    if (list == null) {
      list = dao.getList();
    }
    return list;
  }
 
  public UserDAO getDao() {
    return dao;
  }
 
  public void setDao(UserDAO dao) {
    this.dao = dao;
  }
}
 
在faces-config.xml中的配置:
       <managed-bean>
              <managed-bean-name>serviceLocatorBean</managed-bean-name>
              <managed-bean-class>com.skysoft.rbac.dao.ServiceLocatorBean</managed-bean-class>
              <managed-bean-scope>session</managed-bean-scope>
       </managed-bean>
       <managed-bean>
              <managed-bean-name>User</managed-bean-name>
              <managed-bean-class>com.skysoft.rbac.User</managed-bean-class>
              <managed-bean-scope>request</managed-bean-scope>
              <managed-property>
                     <property-name>serviceLocator</property-name>
                     <property-class>com.skysoft.rbac.dao.ServiceLocatorBean</property-class>
                     <value>#{serviceLocatorBean}</value>
              </managed-property>
       </managed-bean>
在applicationContext.xml中的配置:
       <bean id="userDAO" class="com.skysoft.rbac.dao.UserDAOImp">
              <property name="sessionFactory">
                     <ref local="sessionFactory" />
              </property>
       </bean>
?使用框架
1 介绍
q个框架是Spring相关目,提供一个包de.mindmatters.faces.spring,q个包包含JSF和Spring框架l合集成的粘合代?q些代码以独立于一个实现的方式完成,q样它能和Q何JSF实现一起?
本包的提供的代码主要目的是尽可能透明的集成两个框?主要特征:
l         JSF/JSP开发者应该能讉KSpring理的Beans,好象它们是由JSF理?
l         JSF可管理beans应能集成入Spring.
l         RequestHandledEvent事g也应该能被发布到Spring.
2  JSF配置集成
本包构造了一个基于faces配置文g(e.g. /WEB-INF/faces-config.xml)的WebApplicationContextc? 让它成ؓ遵@"spring-beans" DTD配置文g(e.g. defined in /WEB-INF/applicationContext.xml)来配|的ApplicationContext的孩?q样依从"faces-config" DTD的WebApplicationContext是全特征的,卌动拥有如下功?
l         JSF可管理beans实现了Spring?Aware interfaces:
ApplicationContextAware
BeanFactoryAware
BeanNameAware
ResourceLoaderAware
ServletContextAware
l         JSF可管理beans实现Spring的lifecycle interfaces:
InitializingBean
DisposableBean
l         实现Spring的FactoryBean interface
l         实现Spring的ApplicationListener interface
l         发布ApplicationEvent事g.
l         从资源中d消息.
{等,更多可看Spring.
3 讉K方式
1) 从JSF中程序化的访问Spring理的beans.
因ؓ在FacesWebApplicationContext和ApplicationContext之间有层ơ关p?所以你的JSF可管理支持beans能容易的实现ApplicationContextAware接口,q能通过getBeanҎ讉K它而不它是否定义在FacesWebApplicationContext中还是定义在父ApplicationContextcd象中.
2) 通过JSF EL从JSF中访问Spring理的beans.
能够使用JSF EL讉Kbeans无论你引用的bean由JSF理q是由Spring理.两个bean上下文在存取旉合ƈ.
a) 直接讉K:
如果一个带有请求名字的bean只存在于Spring上下文内的话,q个bean被?bean的singleton属性设|被完全保持.
b) 区域化访?scoped access):
如果你要从JSF定义bean的作用域的能力上得益q想让那个bean由Spring理,那么p在两个上下文中定?只是对于JSF上下文中的定义的cȝ型要使用de.mindmatters.faces.spring.SpringBeanFactoryc?你还应该讄那个bean的singleton属性到false,因这能覆盖你的作用域讄.在你使用JSF EL讉Kbean?你总能获得一个遵从你在JSF上下文中定义的作用域讄的由Spring理的bean的实?
 
?用法
通常,p讄M其它JSF web应用一栯|你的web应用,下面的样例配|展C怎样使能上面提到的特征?/div>
在web.xml 配置中必d入下列配|条? 同时注意把该库的jsf-spring.jar 攑֜适当的位|?
<web-app>
    .........
    <!--
        qo器用于向Spring发布RequestHandledEvent,它应该媄到和FacesServlet url相同的模?
    -->   
    <filter>
        <filter-name>RequestHandled</filter-name>
        <filter-class>de.mindmatters.faces.spring.support.RequestHandledFilter</filter-class>
    </filter>
      
    <filter-mapping>
        <filter-name>RequestHandled</filter-name>
        <url-pattern>*.faces</url-pattern>
    </filter-mapping>
 
    <!--
    q个侦听器用于装入Spring beans的父应用上下?
    -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    .........
</web-app>
下面的一些说?都可以通过下蝲q个Spring相关目得到,列在q里只ؓ演示上面的说明的功能.
WEB-INF/faces-config.xml
<!-- 一个纯JSF理的bean -->
<managed-bean>
    <managed-bean-name>jsfBean</managed-bean-name>
    <managed-bean-class>example.NameBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>name</property-name>
    </managed-property>
</managed-bean>
<!--一个SpringBeanScope用来定义Spring可管理bean的作用域.-->
       <managed-bean>
              <managed-bean-name>scopedAccessSpringBean</managed-bean-name>
       <managed-bean-class>de.mindmatters.faces.spring.SpringBeanScope</managed-bean-class>
              <managed-bean-scope>session</managed-bean-scope>
       </managed-bean>
<!-- q是一个纯JSF可管理bean,它持有一个到Spring可管理bean的一个引? -->
<managed-bean>
    <managed-bean-name>referencingBean</managed-bean-name>
    <managed-bean-class>example.ReferencingBean</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>referencedBean</property-name>
        <value>#{managedPropertyAccessSpringBean}</value>
    </managed-property>
</managed-bean>
WEB-INF/applicationContext.xml (partial)
<!-- 一个纯Spring的可理bean -->
<bean id="directAccessSpringBean" class="example.NameBean"/>
<!-- 一个向JSF作用域提供的可管理bean.  -->
<bean id="scopedAccessSpringBean" class="example.NameBean" singleton="false"/>
<!-- 一个纯Spring的可理bean,它由一个JSF可管理bean引用.(当然?它也能被直接讉K?) -->
<bean id="managedPropertyAccessSpringBean" class="example.NameBean" singleton="false"/>
参?
http://jsf-spring.sourceforge.net/   JSF-Spring,Spring相关目官方站点,提供本文介绍的框架下载以及实例下?


software5168 2006-08-25 14:06 发表评论
]]>springMVC W三個例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/24/65526.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Thu, 24 Aug 2006 07:18:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/24/65526.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/65526.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/24/65526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/65526.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/65526.html</trackback:ping><description><![CDATA[1./home.xsl<br /><?xml version="1.0"?><br /><xsl:stylesheet version="1.0" xmlns:xsl="<a ><br />    <xsl:output method="html" omit-xml-declaration="yes" /><br />    <xsl:template match="/"><br />        <html><br />            <head><title>Hello!</title></head><br />            <body><br />                <h1>My First Words</h1><br />                <xsl:for-each select="wordList/word"><br />                    <xsl:value-of select="."/><br /><br />                </xsl:for-each> <br />            </body><br />        </html><br />    </xsl:template><br /></xsl:stylesheet><br /><br />2./index.html<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head>    <br />  </head><br />  <body><br />   <center><input type="button" value="xslt" onclick="location.href='home.htm'"></center><br />  </body><br /></html><br /><br />3./WEB-INF/web.xml<br /><?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.4" <br /> xmlns="<a <br /> xmlns:xsi="<a <br /> xsi:schemaLocation="<a >http://java.sun.com/xml/ns/j2ee</a><br /> <a > <br /> <servlet> <br />        <servlet-name>hello</servlet-name> <br />        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><br />  <init-param> <br />         <param-name>contextConfigLocation</param-name> <br />         <param-value>/WEB-INF/application-servlet.xml</param-value> <br />     </init-param>  <br />    </servlet>  <br />    <servlet-mapping> <br />        <servlet-name>hello</servlet-name> <br />        <url-pattern>*.htm</url-pattern> <br />    </servlet-mapping>   <br /></web-app><br /><br />4./WEB-INF/application-servlet.xml<br /><?xml version="1.0" encoding="UTF-8"?> <br /><!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<a > <br /><beans> <br />    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <br />        <property name="mappings"> <br />            <props> <br />                <prop key="/home.htm">homeAction</prop> <br />            </props> <br />        </property> <br />    </bean>   <br />    <bean id="bundleViewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver"> <br />        <property name="basename"> <br />            <value>views</value> <br />        </property> <br />    </bean>   <br />    <bean id="homeAction" class="xslt.HomePageController"/> <br /></beans><br /><br />5./WEB-INF/classes/views_zh_TW.properties<br />home.class=xslt.HomePage<br />home.stylesheetLocation=/home.xsl<br />home.root=wordList<br /><br />6./WEB-INF/classes/xslt/HomePage.class<br />package xslt;<br />import java.util.*;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.jdom.Element;<br />import org.jdom.output.DOMOutputter;<br />import org.springframework.web.servlet.view.xslt.AbstractXsltView;<br />import org.w3c.dom.Node;<br />public class HomePage extends AbstractXsltView {<br />  protected Node createDomNode( <br />          Map model, String rootName, HttpServletRequest req, HttpServletResponse res<br />      ) throws Exception {    <br />          org.jdom.Document doc = new org.jdom.Document();<br />          Element root = new Element(rootName);<br />          doc.setRootElement(root);<br />          List words = (List) model.get("wordList");<br />          for (Iterator it = words.iterator(); it.hasNext();) {<br />              String nextWord = (String) it.next();<br />              Element e = new Element("word");<br />              e.setText(nextWord);<br />              root.addContent(e);<br />          }<br />          // convert JDOM doc to a W3C Node and return<br />          return new DOMOutputter().output( doc );<br />      }<br />}<br /><br /><br />7./WEB-INF/classes/xslt/HomePageController.class<br />package xslt;<br />import java.util.*;<br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br />import org.springframework.web.servlet.ModelAndView;<br />import org.springframework.web.servlet.mvc.AbstractController;<br />public class HomePageController extends AbstractController{<br /> protected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {<br />  Map map = new HashMap();<br />     List wordList = new ArrayList();         <br />     wordList.add("hello");<br />     wordList.add("world");        <br />     map.put("wordList", wordList);       <br />     return new ModelAndView("home", map);<br /> }<br />}<br /><img src ="http://www.aygfsteel.com/software5168/aggbug/65526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-24 15:18 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/24/65526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDOMhttp://www.aygfsteel.com/software5168/archive/2006/08/24/65491.htmlsoftware5168software5168Thu, 24 Aug 2006 04:50:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/08/24/65491.htmlhttp://www.aygfsteel.com/software5168/comments/65491.htmlhttp://www.aygfsteel.com/software5168/archive/2006/08/24/65491.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/65491.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/65491.html 1.         Abstract

?/span> Java 的世界裡Q要操控 XML Q最單的方法莫過於使用 JDOM 。在這裡我簡單的介紹如何?/span> JDOM 從無到有的徏立一?/span> XML 、當有一?/span> XML file 時,如何這?/span> XML file 讀進程式裡及如何利?/span> JDOM ?/span> XML 透過 XSLT 轉成 HTML ?/span>

JDOM 是由 Brett Mclaughlin ?/span> Jason Hunter R寫Q在 http://www.jdom.org 可免M載?/span>

 

2.         建立、新增、刪除、?/span>

1 展示如何建立、新增、刪除及輸出一?/span> XML Q每?/span> XML ?/span> JDOM 裡是׃?/span> Document 別代表Q所以一開始我們要?/span> new 一?/span> Document Q在建構 Document 時應指明根節點,如果沒有指明Q在建構應由 setRootElement a定。基本上 XML 都可以化成一個樹狀i構Q所以,在產生根點之後,q根節點開始增加子點,新增的方式是呼叫 Element.addContent 新的節點加入。刪除如果知道是某節點以下的子節點,則可呼叫 Element.getChildren 取得所有子點,再找刪除的點予以刪除?/span>

當徏立好 XML 之後Q通常我們會希望它輸出到檔案, JDOM 提供?/span> XMLOutputter 別供我們Z用,輸出前要先設定編方式,不然Q會?/span> UTF-8 為預a| setNewlines 則是指明輸出時是否要q我們斷行,方便pQ如果沒有加這行指oQ預a是不會斯Q那麼所有資料將在同一行上?/span>

===== 1 =====

import org.jdom.*;

import org.jdom.output.*;

import java.io.*;

import java.util.List;

 

public class myCreate {

  public myCreate() {

    String[] strChapter = { "XML ", " R寫 XML", " 剖析 XML", " 約制 XML", " 驗正 XML", " 轉換 XML" };

 

    Element elmtRoot = new Element("Article");

    Document docJDOM = new Document(elmtRoot);

    // 新增

    for(int i=0; i<6; i++) {

      Element elmtChapter = new Element("Chapter");

      elmtChapter.addContent(strChapter[i]);

      elmtChapter.setAttribute("sort", new Integer(i).toString());

      elmtRoot.addContent(elmtChapter);

    }

    // 刪除

    List lstChapter = elmtRoot.getChildren("Chapter");

    lstChapter.remove(4);

    // 輸出

    OutputXML(docJDOM, "e:/myJDOM.xml");

  }

 

  private void OutputXML(Document docXML, String strFilename) {

    XMLOutputter fmt = new XMLOutputter();

    try {

      fmt.setEncoding("big5");

      fmt.setNewlines(true);

      FileWriter fwXML = new FileWriter(strFilename);

      fmt.output(docXML, fwXML);

      fwXML.close();

    }

    catch (IOException e) {

      e.printStackTrace();

    }

  }

 

  public static void main(String[] args) {

    myCreate myCreate1 = new myCreate();

  }

}

 

3.         讀進一?/span> XML file

目前 XML 最常被拿來應用的領域之一大概是當作a定檔,因此Q如何從檔案中讀入一份已存在?/span> XML 更為重要?/span>

JDOM 是利?/span> SAX ?/span> DOM 來剖?/span> XML Q用 SAX 會比 DOM Q所以一般都是用 SAX Q如果對 SAX 不熟悉,?/span> http://www.saxproject.org/ 盔R文g資料?/span>

2 是?/span> SAX 建立 Document Q在建立 SAXBuilder 時傳入的參數指出是否?/span> DTD 驗正 XML 的合法性, true 表示要, false 表示不要。當呼叫 build 之後 JDOM 已E幫我們用 SAX 建立好一?/span> XML Tree Q如此我們就可以很方便由 Tree 中找到我們要的節點?/span>

 

===== 2 =====

import org.jdom.*;

import org.jdom.input.*;

import org.jdom.output.*;

import java.io.*;

import java.util.List;

 

public class myRead {

  public myRead() {

    Document docJDOM;

 

    // 利用 SAX 建立 Document

    SAXBuilder bSAX = new SAXBuilder(false);

    try {

      docJDOM = bSAX.build(new File("e:/myJDOM.xml"));

    }

    catch (JDOMException e) {

      e.printStackTrace();

      return;

    }

    // 在根點中加入一個新的子?/span>

    Element elmtRoot = docJDOM.getRootElement();

    Element elmtChapter = new Element("Chapter");

    elmtChapter.setText(" 驗正 XML");

    elmtChapter.setAttribute("sort", "4");

    elmtRoot.addContent(elmtChapter);

    // 印出所有根點的子節?/span>

    List lstChildren = elmtRoot.getChildren("Chapter");

    for(int i=0; i<lstChildren.size(); i++) {

      Element elmtChild = (Element) lstChildren.get(i);

      System.out.println("Child " + i);

      System.out.println("  Text:" + elmtChild.getText());

      System.out.println("  Attribute:" + elmtChild.getAttributeValue("sort"));

    }

    // 輸出到檔?/span>

    OutputXML(docJDOM, "e:/myJDOM2.xml");

  }

 

  private void OutputXML(Document docXML, String strFilename) {

    XMLOutputter fmt = new XMLOutputter();

    try {

      fmt.setEncoding("big5");

      fmt.setNewlines(true);

      FileWriter fwXML = new FileWriter(strFilename);

      fmt.output(docXML, fwXML);

      fwXML.close();

    }

    catch (IOException e) {

      e.printStackTrace();

    }

  }

 

  public static void main(String[] args) {

    myRead myRead1 = new myRead();

  }

}

 

4.         轉換 XML ?/span> HTML

要將 XML 轉成 HTML 當然要先寫好 XSL Q但是即使寫?/span> XSL Q?/span> JDOM 也並不提?/span> XML 轉換Q幸好在 JDOM 安裝好之後,會?/span> Apache ?/span> Xalan Q它可以q我們做這樣的轉換?/span>

要?/span> Apache ?/span> Xalan Q首先確?/span> xalan.jar ?/span> classpath 裡?/span> Xalan 的第一個用法是在命令列埯Q指令如下?/span>

C:\> java org.apache.xalan.xslt.Process –IN XML 文g –XSL XSL 樣版 –OUT 輸出檔名

命o列的用法在一般的運用裡是很方便,但是我們有興趣的是在程式裡怎麼用。範?/span> 4 提供了一個簡單的 sample ?/span>

===== 4 =====

import javax.xml.transform.TransformerFactory;

import javax.xml.transform.Transformer;

import javax.xml.transform.TransformerException;

import javax.xml.transform.TransformerConfigurationException;

import javax.xml.transform.stream.*;

 

public class myGenHTML {

 

  public myGenHTML(String strXML, String strXSL, String strHTML) {

    try {

      GenHTML(strXML, strXSL, strHTML);

    }

    catch (TransformerConfigurationException e) {

      e.printStackTrace();

    }

    catch (TransformerException e) {

      e.printStackTrace();

    }

  }

 

  private void GenHTML(String strXMLFile, String strXSLFile, String strHTMLFile) throws TransformerConfigurationException, TransformerException

  {

    TransformerFactory myFactory = TransformerFactory.newInstance();

    Transformer myTransformer = myFactory.newTransformer(new StreamSource(strXSLFile));

    myTransformer.transform(new StreamSource(strXMLFile), new StreamResult(strHTMLFile));

  }

 

  public static void main(String[] args) {

    myGenHTML myGenHTML1 = new myGenHTML(args[0], args[1], args[2]);

  }

}



software5168 2006-08-24 12:50 发表评论
]]>
springMVC W二個例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/23/65304.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 23 Aug 2006 08:29:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/23/65304.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/65304.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/23/65304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/65304.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/65304.html</trackback:ping><description><![CDATA[ <p>1./WEB-INF/web.xml<br /><?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.4" <br /> xmlns="<a <br /> xmlns:xsi="<a <br /> xsi:schemaLocation="<a >http://java.sun.com/xml/ns/j2ee</a><br /> <a ><br /> <br /> <servlet> <br />        <servlet-name>hello</servlet-name> <br />        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><br />  <init-param> <br />         <param-name>contextConfigLocation</param-name> <br />         <param-value>/WEB-INF/application-servlet.xml</param-value> <br />     </init-param>  <br />    </servlet> <br /> <br />    <servlet-mapping> <br />        <servlet-name>hello</servlet-name> <br />        <url-pattern>*.do</url-pattern> <br />    </servlet-mapping> <br /> <br /> <welcome-file-list><br />     <welcome-file>form.jsp</welcome-file><br />   </welcome-file-list><br /></web-app><br /><br /><br />2./WEB-INF/application-servlet.xml<br /><?xml version="1.0" encoding="UTF-8"?> <br /><!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<a > <br /><beans> <br />    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <br />        <property name="mappings"> <br />            <props> <br />                <prop key="/login.do">loginAction</prop> <br />            </props> <br />        </property> <br />    </bean> <br />    <br />    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <br />        <property name="viewClass"> <br />            <value>org.springframework.web.servlet.view.InternalResourceView</value> <br />        </property> <br />        <property name="prefix"> <br />            <value>/</value> <br />        </property> <br />        <property name="suffix"> <br />            <value>.jsp</value> <br />        </property> <br />    </bean> <br />    <br />    <bean id="loginAction" class="onlyfun.caterpillar.LoginAction"> <br />        <property name="commandClass"> <br />            <value>onlyfun.caterpillar.LoginForm</value> <br />        </property> <br />        <property name="successView"> <br />            <value>success</value> <br />        </property> <br />        <property name="formView"> <br />            <value>form</value> <br />        </property> <br />    </bean> <br /></beans><br /><br /><br />3./WEB-INF/classes/onlyfun/caterpillar/LoginAction.class<br />package onlyfun.caterpillar; </p> <p>import org.springframework.web.servlet.mvc.SimpleFormController; <br />import org.springframework.web.servlet.*; </p> <p>public class LoginAction extends SimpleFormController { <br />    protected ModelAndView onSubmit(Object command) throws Exception { <br />       LoginForm form = (LoginForm) command; <br />        <br />       if("111".equals(form.getUsername()) && <br />             "111".equals(form.getPassword())) { <br />          return new ModelAndView(this.getSuccessView(),"user", form.getUsername()); <br />       } <br />       else { <br />           return new ModelAndView(this.getFormView()); <br />       } <br />    } <br />}<br /><br />4./WEB-INF/classes/onlyfun/caterpillar/LoginForm.class<br />package onlyfun.caterpillar; </p> <p>public class LoginForm { <br />    private String username; <br />    private String password; <br />    <br />    public void setUsername(String username) { <br />       this.username = username; <br />    } <br />    <br />    public void setPassword(String password) { <br />       this.password = password; <br />    } <br />    <br />    public String getUsername() { <br />       return username; <br />    } <br />    <br />    public String getPassword() { <br />       return password; <br />    } <br />}<br /><br /><br />5./form.jsp<br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><html> <br /><head><title>Login</title></head> <br /><body> <br />    請入用者名Ep密碼Q?lt;p> <br />    <form name="loginform" action="login.do" method="post"> <br />        名稱 <input type="text" name="username"/><br> <br />        密碼 <input type="password" name="password"/><br> <br />        <input type="submit" value="定"/> <br />    </form> <br />    注意Q入錯誤會再回到這個頁面中?<br /></body> <br /></html><br /><br /><br />6./success.jsp<br /><br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><html> <br /><head><title>Login Success</title></head> <br /><body> <br />    <H1> Hello, ${user}!!</H1> <br />    This is your secret gift. <br /></body> <br /></html><br /></p> <img src ="http://www.aygfsteel.com/software5168/aggbug/65304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-23 16:29 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/23/65304.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>springMVC W一個例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/23/65289.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 23 Aug 2006 07:52:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/23/65289.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/65289.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/23/65289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/65289.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/65289.html</trackback:ping><description><![CDATA[ <p>1. /hellouser.jsp<br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><html> <br /><head><title>HelloPage</title></head> <br /><body> <br />     <H1> ${helloWord}</H2> <br /></body> <br /></html><br /><br />2./index.jsp<br /><%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><br />  </head> <br />  <body><br />    <%<br />     response.sendRedirect("hellouser.do");<br />    %><br />  </body><br /></html><br /><br />3./WEB-INF/web.xml<br /><?xml version="1.0" encoding="UTF-8"?><br /><web-app version="2.4" <br /> xmlns="<a <br /> xmlns:xsi="<a <br /> xsi:schemaLocation="<a >http://java.sun.com/xml/ns/j2ee</a><br /> <a ><br /> <br /> <servlet> <br />        <servlet-name>hello</servlet-name> <br />        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><br />  <init-param> <br />         <param-name>contextConfigLocation</param-name> <br />         <param-value>/WEB-INF/application-servlet.xml</param-value> <br />     </init-param>  <br />    </servlet> <br /> <br />    <servlet-mapping> <br />        <servlet-name>hello</servlet-name> <br />        <url-pattern>*.do</url-pattern> <br />    </servlet-mapping> <br />  <br /></web-app><br /><br />4./WEB-INF/application-servlet.xml<br /><?xml version="1.0" encoding="UTF-8"?> <br /><!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "<a > <br /><beans> <br />    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> <br />        <property name="mappings"> <br />            <props> <br />                <prop key="/hellouser.do">helloUserAction</prop> <br />            </props> <br />        </property> <br />    </bean> <br />    <br />    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <br />        <property name="viewClass"> <br />            <value>org.springframework.web.servlet.view.InternalResourceView</value> <br />        </property> <br />    </bean> <br />    <br />    <bean id="helloUserAction" class="onlyfun.caterpillar.HelloUserAction"> <br />        <property name="helloWord"> <br />            <value>Hello!</value> <br />        </property> <br />        <property name="viewPage"> <br />            <value>/hellouser.jsp</value> <br />        </property> <br />    </bean> <br /></beans><br /><br />5./WEB-INF/classes/onlyfun/caterpillar/HelloUserAction.class<br />package onlyfun.caterpillar; </p> <p>import java.io.IOException; <br />import java.util.*; <br />import javax.servlet.*; <br />import javax.servlet.http.*; <br />import org.springframework.web.servlet.mvc.Controller; <br />import org.springframework.web.servlet.ModelAndView; <br />import org.springframework.web.bind.RequestUtils; </p> <p>public class HelloUserAction implements Controller { <br />   private String helloWord; <br />    private String viewPage; <br />    <br />   public ModelAndView handleRequest(HttpServletRequest req, HttpServletResponse res) <br />        throws ServletException, IOException { <br />     //String user = RequestUtils.getRequiredStringParameter(req, "user"); <br />      Map model = new HashMap(); <br />      model.put("helloWord", getHelloWord()); <br />     // model.put("user", user); <br />    <br />       return new ModelAndView(getViewPage(), model); <br />    } <br />    <br />    public void setViewPage(String viewPage) { <br />       this.viewPage = viewPage; <br />    } <br />    <br />    public String getViewPage() { <br />       return viewPage; <br />    } </p> <p>    public void setHelloWord(String helloWord) { <br />       this.helloWord = helloWord; <br />    } <br />    <br />    public String getHelloWord() { <br />       return helloWord; <br />    } <br />}</p> <img src ="http://www.aygfsteel.com/software5168/aggbug/65289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-23 15:52 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/23/65289.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax - 回調函數Observer實現例子http://www.aygfsteel.com/software5168/archive/2006/08/14/63390.htmlsoftware5168software5168Mon, 14 Aug 2006 00:50:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/08/14/63390.htmlhttp://www.aygfsteel.com/software5168/comments/63390.htmlhttp://www.aygfsteel.com/software5168/archive/2006/08/14/63390.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/63390.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/63390.html1.EventRouter.js
/**
 * @author user
 */
var jsEvent = new Array();
jsEvent.EventRouter = function(el,eventType){
 this.lsnrs = new Array();
 this.el = el;
 el.eventRouter = this;
 el[eventType] = jsEvent.EventRouter.callback;
};
jsEvent.EventRouter.prototype.addListener = function(lsnr){
 this.lsnrs.append(lsnr,true); 
} ;

jsEvent.EventRouter.prototype.notify = function(e){
 var lsnrs = this.lsnrs;
 for(var i=0;i<lsnrs.length;i++){
  var lsnr = lsnrs[i];
  lsnr.call(this,e);
 }
};
jsEvent.EventRouter.callback=function(event){
 var e = event || window.event;
 var router = this.eventRouter;
 router.notify(e);
};

Array.prototype.append = function(obj,nodup){
 if(nodup){ 
  this[this.length]=obj;
 }
};

2.mousemat.css
.mousemat{
 background-color:#ffe0d0;
 border:solid maroon 0px;
 position:absolute;
 margin:0px;
 width:500px;
 height:500px;
 top:50px;
 left:50px; 
}
.thumbnail{
 background-color:#ffe0d0;
 border:solid maroon 0px;
 position:absolute;
 margin:0px;
 width:100px;
 height:100px;
 top:50px;
 left:600px; 
}
.cursor{
 background-color:blue;
 position:relative;
 height:5px;
 width:5px;
}

3.mousemat.htm
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Untitled Document</title>
  <link rel='stylesheet' type = 'text/css' href = 'mousemat.css'>
  <script type ='text/javascript' src = 'EventRouter.js'></script>
  <script type='text/javascript'>
   var cursor = null;
   window.onload = function(){
    var mat = document.getElementById('mousemat');
    cursor = document.getElementById('cursor');
    var mouseRouter = new jsEvent.EventRouter(mat,"onmousemove");
    //var mouseRouter = new jsEvent.EventRouter(mat,"onclick");
    mouseRouter.addListener(writeStatus);
    mouseRouter.addListener(drawThumbnail);
   };
   function writeStatus(e){
    window.status = e.clientX + "," + e.clientY;
   }
   function drawThumbnail(e){
    cursor.style.left = ((e.clientX/5)-2) + "px";
    cursor.style.top = ((e.clientY/5)-2) + "px";
   }
  </script>
 </head>
 <body>
  <div class='mousemat' id='mousemat'></div>
  <div class='thumbnail' id='thumbnail'>
   <div class = 'cursor' id = 'cursor'></div>
  </div>
 </body>
</html>



software5168 2006-08-14 08:50 发表评论
]]>
ajax 單個元素中實現多個回調函數的例子http://www.aygfsteel.com/software5168/archive/2006/08/11/63028.htmlsoftware5168software5168Fri, 11 Aug 2006 08:12:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/08/11/63028.htmlhttp://www.aygfsteel.com/software5168/comments/63028.htmlhttp://www.aygfsteel.com/software5168/archive/2006/08/11/63028.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/63028.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/63028.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  <title>Untitled Document</title>
  <link rel='stylesheet' type = 'text/css' href = 'mousemat.css'>
  <script type='text/javascript'>
   var cursor = null;
   window.onload = function(){
    var mat = document.getElementById('mousemat');
    mat.onmousemove = mouseObserver;
    cursor = document.getElementById('cursor');
   }
   function mouseObserver(event){
    var e = event || window.event;
    writeStatus(e);
    drawThumbnail(e);
   }
   function writeStatus(e){
    window.status = e.clientX + "," + e.clientY;
   }
   function drawThumbnail(e){
    cursor.style.left = ((e.clientX/5)-2) + "px";
    cursor.style.top = ((e.clientY/5)-2) + "px";
   }
  </script>
 </head>
 <body>
  <div class='mousemat' id='mousemat'></div>
  <div class='thumbnail' id='thumbnail'>
   <div class = 'cursor' id = 'cursor'></div>
  </div>
 </body>
</html>


2.mousemat.css
mousemat{
 background-color:#ffe0d0;
 border:solid maroon 0px;
 position:absolute;
 margin:0px;
 width:500px;
 height:500px;
 top:50px;
 left:50px; 
}
.thumbnail{
 background-color:#ffe0d0;
 border:solid maroon 0px;
 position:absolute;
 margin:0px;
 width:100px;
 height:100px;
 top:50px;
 left:600px; 
}
.cursor{
 background-color:blue;
 position:relative;
 height:5px;
 width:5px;
}

software5168 2006-08-11 16:12 发表评论
]]>
ajax -W一個例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/11/63003.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Fri, 11 Aug 2006 06:46:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/11/63003.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/63003.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/11/63003.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/63003.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/63003.html</trackback:ping><description><![CDATA[1.MyHtml.html<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><br /> <script type='text/javascript'><br />  var req = null;<br />  var console = null;<br />  var READY_STATE_UNINITIALIZED = 0;<br />  var READY_STATE_LOADING = 1;<br />  var READY_STATE_LOADED = 2;<br />  var READY_STATE_INTERACTIVE = 3;<br />  var READY_STATE_COMPLETE = 4;<br />  <br />  function sendRequest(url,params,HttpMethod){<br />   if(!HttpMethod){<br />    HttpMethod = "GET";<br />   }<br />   req = initXMLHTTPRequest();<br />   if(req){<br />    req.onreadystatechange = onReadyState;<br />    req.open(HttpMethod,url,true);<br />    req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");<br />    req.send(params);<br />    <br />   }<br />  }<br />  <br />  function initXMLHTTPRequest(){<br />   var xRequest = null;<br />   if(window.XMLHttpRequest){<br />    xRequest = new XMLHttpRequest();<br />   }else if(window.ActiveXObject){<br />    xRequest = new ActiveXObject("Microsoft.XMLHTTP");<br />   }<br />   return xRequest;<br />  }<br />  <br />  function onReadyState(){<br />   var ready = req.readyState;<br />   var data = null;<br />   if(ready==READY_STATE_COMPLETE){<br />    data = req.responseText;<br />   }else{<br />    data = "loading...[" + ready +"]";<br />   }<br />   toConsole(data);<br />  }<br />  <br />  function toConsole(data){<br />   if(console!=null){<br />    var newline = document.createElement("div");<br />    console.appendChild(newline);<br />    var txt = document.createTextNode(data);<br />    console.appendChild(txt);<br />   }<br />  }<br />  <br />  window.onload = function(){<br />   console = document.getElementById('console');<br />   sendRequest("data.txt");<br />  }<br /> </script><br />  </head><br />   <br />  <body><br />   <DIV id ='console'></DIV><br />  </body><br /></html><br /><br />2.data.txt<br /> i'm ok!!!!!!!!<img src ="http://www.aygfsteel.com/software5168/aggbug/63003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-11 14:46 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/11/63003.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax 參數傳遞的例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/11/62998.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Fri, 11 Aug 2006 06:35:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/11/62998.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/62998.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/11/62998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/62998.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/62998.html</trackback:ping><description><![CDATA[ <p>1.new_file.htm<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<a ><br /><html><br /> <head><br />  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><br />  <title>Untitled Document</title><br />  <SCRIPT type='text/javascript' src='new_file.js'></SCRIPT><br />  <SCRIPT type='text/javascript'><br />   window.onload = load;<br />  </SCRIPT><br /> </head><br /> <body><br />  <CENTER><INPUT type='button' id='b1'></INPUT></CENTER> <br /> </body><br /></html><br /><br />2.new_file.js<br />var value = '500';</p> <p>function load(){<br /> var domEl = document.getElementById('b1'); <br /> JsButton(value,domEl);<br />}<br />function JsButton(value,domEl){<br /> this.domEl = domEl;<br /> this.value = value;<br /> this.domEl.buttonObj = this;<br /> //this.domEl.onclick = function(){<br />  //alert(this.value);<br /> //}<br /> this.domEl.onclick = JsButton.prototype.clickHandler;<br />} </p> <p>JsButton.prototype.clickHandler = function(){<br /> //alert(this.value); 在回調函怸調用this屬性時H?br /> //得到的是應的DOM元素裡面的數|此處為空?br /> var buttonObj = this.buttonObj;<br /> var value =(buttonObj && buttonObj.value)? buttonObj.value:"unknown value";<br /> alert(value);<br />}</p> <img src ="http://www.aygfsteel.com/software5168/aggbug/62998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-11 14:35 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/11/62998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax http://www.aygfsteel.com/software5168/archive/2006/08/11/62945.htmlsoftware5168software5168Fri, 11 Aug 2006 03:34:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/08/11/62945.htmlhttp://www.aygfsteel.com/software5168/comments/62945.htmlhttp://www.aygfsteel.com/software5168/archive/2006/08/11/62945.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/62945.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/62945.html1.musical_dyn_keys.css
.musicalKeys{
 background-color:#ffe0d0;
 border:solid maroon 2px;
 position:absolute;
 overflow:auto;
 margin:4px;
}
.toplong{
 width:536px;
 height:68px;
 top:24px;
 left:24px;
}
.sidebar{
 width:100px;
 height:400px;
 top:24px;
 left:570px;
}
.musicalButton{
 border:solid navy 1px;
 width:60px;
 height:60px;
 position:relative;
 margin:2px;
 float:left;
}
.do{background-color:red;}
.re{background-color:orange;}
.mi{background-color:yellow;}
.fa{background-color:green;}
.so{background-color:blue;}
.la{background-color:indigo;}
.ti{background-color:violet;}
div.console{
 font-family:arial,helvetica;
 font-size:16px;
 color:navy;
 background-color:white;
 border:solid navy 2px;
 width:536px;
 height:320px;
 top:106px;
 left:24px;
 margin:4px;
 position:absolute;
 overflow:auto;
}

2.musical_dyn_keys.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "<html>
 <head>
  <title>Two Keyboards</title>
  <LINK rel='stylesheet' type='text/css' href='musical_dyn_keys.css'/>
  <SCRIPT type='text/javascript' src='musical_dyn_keys.js'></SCRIPT>
  <SCRIPT type='text/javascript'>
   window.onload=assignKeys
  </SCRIPT>
 </head>
 <body>
  <DIV id='keyboard-top' class='toplong musicalKeys'></DIV>
  <DIV id='keyboard-side' class='sidebar musicalKeys'></DIV>
  <DIV id='console' class='console'></DIV>
 </body>
</html>


3.musical_dyn_keys.js
var notes = new Array("do","re","mi","fa","so","la","ti","do");
function assignKeys(){
 var candidates = document.getElementsByTagName("DIV");
 if(candidates){
  for(var i=0;i<candidates.length;i++){
   var candidate = candidates[i];
   if(candidate.className.indexOf('musicalKeys')>=0){
    makeKeyboard(candidate);
   }
  }
 }
}

function makeKeyboard(el){
 for(var i=0;i<notes.length;i++){
  var key=document.createElement("DIV");
  key.className = notes[i] + " musicalButton";
  alert(key.className);
  key.note = notes[i];
  key.onclick = playNote;
  el.appendChild(key);
 } 
}

function playNote(event){
 var note = this.note;
 var console = document.getElementById('console');
 if(note && console){
  console.innerHTML +=note + ".";
 }
}



software5168 2006-08-11 11:34 发表评论
]]>
ajax - 單的客戶端MVC實現例子http://www.aygfsteel.com/software5168/archive/2006/08/10/62822.htmlsoftware5168software5168Thu, 10 Aug 2006 09:03:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/08/10/62822.htmlhttp://www.aygfsteel.com/software5168/comments/62822.htmlhttp://www.aygfsteel.com/software5168/archive/2006/08/10/62822.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/62822.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/62822.html1.murical.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>  
    <link rel='stylesheet' type='text/css' href='musical.css'>
    <script type='text/javascript' src="musical.js"></script>
    <script type='text/javascript'>
   window.onload = assignKeys
    </script>  
  </head>
 
  <body>
   <DIV>
    <DIV id='keyboard' class='musicalKeys'>
   <DIV class='do musicalButton'></DIV>
   <DIV class='re musicalButton'></DIV>
   <DIV class='mi musicalButton'></DIV>
   <DIV class='fa musicalButton'></DIV>
   <DIV class='so musicalButton'></DIV>
   <DIV class='la musicalButton'></DIV>
   <DIV class='ti musicalButton'></DIV>
   <DIV class='do musicalButton'></DIV>
  </DIV>
  <DIV id='console' class='console'></DIV>
   </DIV>
  </body>
</html>

2.musical.css
.body{
 background-color:white; 
}
.musicalKeys{
 background-color:#ffe0d0;
 boarder:solid maroon 2px;
 width:536px;
 height:68px;
 top:24px;
 left:24px;
 margin:4px;
 position:absolute;
 overflow:auto;
}
.musicalButton{
 border:solid navy 1px;
 width:60px;
 height:60px;
 position:relative;
 margin:2px;
 float:left;
}
.do{background-color:red;}
.re{background-color:orange;}
.mi{background-color:yellow;}
.fa{background-color:green;}
.so{background-color:blue;}
.la{background-color:indigo;}
.ti{background-color:violet;}
div.console{
 font-family:arial,helvetica;
 font-size:16px;
 color:navy;
 background-color:white;
 border:solid navy 2px;
 width:536px;
 height:320px;
 top:106px;
 left:24px;
 margin:4px;
 position:absolute;
 overflow:auto;
}

3.musical.js
function assignKeys(){
 var keyboard=document.getElementById("keyboard");
 var keys = keyboard.getElementsByTagName("DIV");
 if(keys){
  for(var i=0;i<keys.length;i++){
   var key=keys[i];
   var classes=(key.className).split(" ");
   if(classes && classes.length>=2 && classes[1]=="musicalButton"){
    var note=classes[0];
    key.note=note;
    //key.onmouseover=playNote;
    key.onclick = playNote;
   }
  }
 }
}

function playNote(event){
 var note = this.note;
 var console = document.getElementById("console");
 if(note && console){
  console.innerHTML += note + ".";
 }
}



software5168 2006-08-10 17:03 发表评论
]]>
ajax -rico最單的例?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/09/62569.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Wed, 09 Aug 2006 07:15:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/09/62569.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/62569.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/09/62569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/62569.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/62569.html</trackback:ping><description><![CDATA[MyHtml.html<br /><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><br /><html><br />  <head><br />  <script type="text/javascript" src="prototype.js"></script><br />  <script type="text/javascript" src="rico.js"></script><br />  <script type='text/javascript'><br />     function accordion(){<br />   var outer = $('myAccordion');<br />   outer.style.width = '320px';   <br />  new Rico.Accordion(<br />   outer,<br />   {panelHeight:400,<br />    expandedBg:'#909090',<br />    collapsedBg:'#404040'<br />   }<br />  );<br />  }<br />    window.onload = accordion <br />  </script><br />  </head> <br />  <body><br />   <div id='myAccordion'><br />    <div><br />     <div>first title</div><br />     <div>first!!!!!</div><br />    </div><br />    <div><br />     <div>second title</div><br />     <div>second!!!!!</div><br />    </div><br />   </div>   <br />  </body><br /></html><br /><img src ="http://www.aygfsteel.com/software5168/aggbug/62569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-09 15:15 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/09/62569.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>正則表達?/title><link>http://www.aygfsteel.com/software5168/archive/2006/08/03/61516.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Thu, 03 Aug 2006 07:26:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/08/03/61516.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/61516.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/08/03/61516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/61516.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/61516.html</trackback:ping><description><![CDATA[ String sql = "INSERT INTO AB(A,B,C,D,E) VALUES(?,?,?,?,?)";<br /> sql = sql.toUpperCase();<br /> String str="<a href="file://\\s*INSERT\\s+INTO\\s+([^\\(]+)\\(([^\\)]+)\\)\\s*VALUES\\s*\\(([^\\)]+)\\)\\s">\\s*INSERT\\s+INTO\\s+([^\\(]+)\\(([^\\)]+)\\)\\s*VALUES\\s*\\(([^\\)]+)\\)\\s</a>*"; <br /> Pattern p = Pattern.compile(str);<br /> Matcher m = p.matcher(sql);<br /> m.find();<br /> String table = m.group(1); <br /> String cols = m.group(2);<br /> String values = m.group(3);<br /> System.out.println("table ==== " + table); //AB<br /> System.out.println("cols ==== " + cols); //AHBHCHDHE<br /> System.out.println("values ==== " + values); //H﹐H﹐H﹐H﹐H?br /><br />a﹕.表示M字符<br />      [abc]表示abc之一字符<br />      [^abc]表示非abc的一字符<br />      \s表示I格Htab,換行H換頁﹐回車<br />     \S表示非空|tab,換行H換頁﹐回車<br />    \d表示數字[0-9]<br />    \D表示非數字[^0-9]<br />   \w表示詞字W[a-zA-Z0-9]<br />   \W表示非詞字符[^a-zA-Z0-9]<br /> <br />匚w量詞   X? 表示1?個X<br />                  X* 表示0或n個X<br />                  X+表示1或n個X<img src ="http://www.aygfsteel.com/software5168/aggbug/61516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-08-03 15:26 <a href="http://www.aygfsteel.com/software5168/archive/2006/08/03/61516.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>WEB開發中的JAVA字符R碼http://www.aygfsteel.com/software5168/archive/2006/07/25/60028.htmlsoftware5168software5168Tue, 25 Jul 2006 09:12:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/07/25/60028.htmlhttp://www.aygfsteel.com/software5168/comments/60028.htmlhttp://www.aygfsteel.com/software5168/archive/2006/07/25/60028.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/60028.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/60028.html一、概?br />  在JAVA應用E式特別是基於WEB的程式中Q經帔R到字W的R碼問題。為了防止出現亂|首先需要了解JAVA是如何處理字W的Q這樣可以有目的地在輸入/輸出環節中增加必要的轉碼。其ơ,由於各種伺服器有不同的處理方式,還需要多做試驗,Z使用中不出現亂碼?br />二、基本概?/strong>
2Q? JAVA中字W的表達
  JAVA中有char、byte、String這幾個概cchar 指的是一個UNICODE字符Q為16位的整數。byte 是字Q字W串在網路傳輸或存儲前需要轉換為byte數組。在從網路接收或從存儲設備讀取後需要將byte數組轉換成String。String是字W串Q可以看成是由chari成的數i。String ?char 為內存Ş式,byte是網路傳輸或存儲的序列化形式?br />舉例Q?br />?br />String ying = “英?
char ying = ying.charAt(0);
String yingHex = Integer.toHexString(ying);
82 F1
byte yingGBBytes = ying.getBytes(“GBK?;
GBR碼的字數?br />D3 A2

 

2Q? R碼方式的簡?br />  String序列化成byte數組或反序列化時需要選擇正的R碼方式。如果編方式不正確Q就會得C?x3F的倹{常用的字符R碼方式有ISO8859_1、GB2312、GBK、UTF-8/UTF-16/UTF-32?br />ISO8859_1用來R碼拉丁文,它由單字Q?Q?55Q組成?br />  GB2312、GBK用來R碼體中文Q它有單字節和雙字節混合i成。最高位?的字和下一個字構成一個字,最高位?的字是ASCII{?br />  UTF-8/UTF-16/UTF-32是國際標準UNICODE的編方式?用得最多的是UTF-8Q主要是因為它在拉丁文R碼時節約空間?/p>

UNICODE?UTF-8R碼
U-00000000 - U-0000007F: 0xxxxxxx
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

三、J2SE中相關的函數
String str =”英?
//取得GB2312R碼的字
byte[] bytesGB2312 = str.getBytes(“GB2312?;

//取得q~省R碼的字(solaris為ISO8859_1,windows為GB2312)
byte[] bytesDefault = str.getBytes();

//用指定的R碼字轉換成字W串
String newStrGB = new String(bytesGB2312, “GB2312?;

//用^臺缺省的R碼字轉換成字W串(solaris為ISO8859_1,windows為GB2312)
String newStrDefault = new String(bytesDefault);

//用指定的R碼從字裏面讀取字W?br />InputStream in = xxx;
InputStreamReader reader = InputStreamReader( in, “GB2312?;
char aChar = reader.read();
四、JSP、數據n的編?br />4Q? JSP中的R碼
(1) 靜態聲明:
CHARSET有兩個作用:
JSP文g的編方式:在讀取JSP文g、生成JAVA時Q源JSP文g中字的R碼
JSP輸出的R碼方式Q在埯JSP時,往response裏面寫入數據的R碼方式
(2) 動態改變:在往response裏面寫數據前可以調用response.setContentType()Q設定正的R碼型?br />(3) 在TOMCAT中,由Request.getParameter() 得到的參數,R碼方式都是ISO8859_1。所以如果在瀏覽器入框內入一個字“英”,在伺服器端就得到一個ISO8859_1R碼的(0x00,0xD3,0x00,0xA2Q。所以通常在接收參數時轉碼Q?br />String wrongStr = response.getParameter(“name?;
String correctStr = new String(wrongStr.getBytes(“ISO8859_1?,”GB2312?;
在最新的SERVLET規範裏面Q也可以在獲取參怹前執行如下代|
request.setCharacterEncoding(“GB2312?;

4Q? 數據庫的R碼
(1) 數據庫用UTF-16
如果String中是UNICODE字符Q寫入讀出時不需要轉?br />(2) 數據庫用ISO8859_1
如果String中是UNICODE字符Q寫入讀出時需要轉?br />寫入QString newStr = new String(oldStr.getByte(“GB2312?, “ISO8859_1?;
讀出:String newStr = new String(oldStr.getByte(“ISO8859_1?,”GB2312?;
五、源文g的編?br />5Q? 資源文g
資源文g的編方式和R輯q盔R。在WINDOWSq_下編寫的資源文gQ以GB2312方式R碼。在R譯時需要轉|以確保在各個^Z的正性:
native2ascii –encoding GB2312 source.properties
這樣從資源文件中讀出的是正確的UNICODE字符丌Ӏ?br />5Q? 源文?br />源文件的R碼方式和編輯^臺相關。在WINDOWSq_下開發的源文Ӟ以GB2312方式R碼。在R譯的時候,需要指定源文g的編方式:
javac –encoding GB2312
JAVAR譯後生成的字節文g的編為UTF-8?br />


點最新版TOMCAT4.1.18支援request.setCharacterEncoding(String enc)
點資源文件轉成company.name=\u82f1\u65af\u514b
點如果數據n使用utf-16則不需要這部分轉?br />點頁面上應有
轉碼?
String s = new String
(request.getParameter(“name?.getBytes(“ISO8859_1?,”GB2312?;
轉碼?
String s = new String(name.getBytes(“GB2312?,”ISO8859_1?;
轉碼?
String s = new String(name.getBytes(“ISO8859_1?,?GB2312?;



software5168 2006-07-25 17:12 发表评论
]]>
JAVA的反R譯---使用jadhttp://www.aygfsteel.com/software5168/archive/2006/07/12/57768.htmlsoftware5168software5168Wed, 12 Jul 2006 03:36:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/07/12/57768.htmlhttp://www.aygfsteel.com/software5168/comments/57768.htmlhttp://www.aygfsteel.com/software5168/archive/2006/07/12/57768.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/57768.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/57768.html  首先從控制台進入jad.exe目錄
   運行 jad example1.class
  (此時example1.class和jad.exe位於同一個目?
  成功運行後﹐當前目錄下產生一個新文gexample1.jadH裡面為反編譯後的java代碼

2.多?class文gR譯
?大致相同
輸入jad -o -dtest -sjava *.class
其中"test"表示反編譯文件的存放目錄H?java"表示反編譯後產生文g的後E名

3.某文件夾下所有文件編?br />?大致相同
輸入jad -o -dtest -sjava  tree/**/*.class
其中"test"表示反編譯文件的存放目錄H?java"表示反編譯後產生文g的後E名
tree表示源文件夾?br />
詳細說明參看“Readme.txt?br />jad下載聯接 http://www.infoxa.com/asp/soft_file/xxnr_soft_242.htm

software5168 2006-07-12 11:36 发表评论
]]>
Java操作Excel的一U方?/title><link>http://www.aygfsteel.com/software5168/archive/2006/06/30/55989.html</link><dc:creator>software5168</dc:creator><author>software5168</author><pubDate>Fri, 30 Jun 2006 08:54:00 GMT</pubDate><guid>http://www.aygfsteel.com/software5168/archive/2006/06/30/55989.html</guid><wfw:comment>http://www.aygfsteel.com/software5168/comments/55989.html</wfw:comment><comments>http://www.aygfsteel.com/software5168/archive/2006/06/30/55989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/software5168/comments/commentRss/55989.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/software5168/services/trackbacks/55989.html</trackback:ping><description><![CDATA[Java操作Excel的一U方法?br /><br /> bromon原创 版权所?br /><br />  MS的电子表|ExcelQ是Office的重要成员,是保存统计数据的一U常用格式。作为办公文档,势必要涉及到的电子文档的交换QExcel是一U在企业中非帔R用的文件格式,打印和管理也比较方便。在一个Java应用中,一部分数据生成Excel格式Q是与其他系l无~连接的重要手段?br /><br />  在开源世界中Q有两套比较有媄响的API可供使用Q一个是POIQ一个是jExcelAPI。其中jExcelAPI是一个韩国程序员的作品,虽然没有POI那样血l高贵,但是在笔者的使用q程中,感觉单方便,对中文支持非常好Q功能也比较强大。可以在sourceforge.net下蝲。作者的|站上对它的特征有如下描qͼ<br /><br /> ● 支持Excel 95-2000的所有版?br /> ● 生成Excel 2000标准格式<br /> ● 支持字体、数字、日期操?br /> ● 能够修饰单元格属?br /> ● 支持图像和图表<br /><br />  应该说以上功能已l能够大致满x们的需要。最关键的是q套API是纯Java的,q不依赖WindowspȝQ即使运行在Linux下,它同栯够正的处理Excel文g。另外需要说明的是,q套API对图形和图表的支持很有限Q而且仅仅识别PNG格式?br /><br />  搭徏环境<br /><br />  下载后的文件解包,得到jxl.jarQ放入classpathQ安装就完成了?br /><br /> 基本操作<br /><br /> 一、创建文?br /><br /> 拟生成一个名为“测试数?xls”的Excel文gQ其中第一个工作表被命名ؓ“第一”,大致效果如下Q?br /><br /> <br /><br /> 代码QCreateXLS.javaQ:<br />  <br />  <div id="wmqeeuq" class="codeStyle"><ol><li><i><font color="#339900">//生成Excel的类</font></i></li><li> <b><font color="#0000ff">import</font></b> java.io.*; </li><li> <b><font color="#0000ff">import</font></b> jxl.*; </li><li> <b><font color="#0000ff">import</font></b> jxl.write.*; </li><li></li><li> <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> CreateXLS </li><li> { </li><li>   <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">static</font></b> <b><font color="#0000ff">void</font></b> main(<b><a target="_blank"><font class="classLink"><u>String</u></font></a></b> args[]) </li><li>   { </li><li>   <b><font color="#0000ff">try</font></b></li><li>   { </li><li>    <i><font color="#339900">//打开文g</font></i></li><li>    WritableWorkbook book=Workbook.createWorkbook(<b><font color="#0000ff">new</font></b> <font color="#ff0000">File</font>(“测?xls?); </li><li>      </li><li>    <i><font color="#339900">//生成名ؓ“第一”的工作表,参数0表示q是W一?/font></i></li><li>    WritableSheet sheet=book.createSheet(“第一?0); </li><li>    </li><li>    <i><font color="#339900">//在Label对象的构造子中指名单元格位置是第一列第一?0,0)</font></i></li><li>    <i><font color="#339900">//以及单元格内容ؓtest</font></i></li><li>    <font color="#ff0000">Label</font> label=<b><font color="#0000ff">new</font></b> <font color="#ff0000">Label</font>(0,0,”test?; </li><li></li><li>    <i><font color="#339900">//定义好的单元格d到工作表?/font></i></li><li>    sheet.addCell(label); </li><li></li><li>    <i><font color="#339900">/**生成一个保存数字的单元?/font></i></li><li><i><font color="#339900">    *必须使用Number的完整包路径Q否则有语法歧义</font></i></li><li><i><font color="#339900">    *单元g|是W二列,W一行,gؓ789.123</font></i></li><li><i><font color="#339900">    */</font></i></li><li>    jxl.write.<font color="#ff0000">Number</font> number = <b><font color="#0000ff">new</font></b> jxl.write.<font color="#ff0000">Number</font>(1,0,789.123); </li><li>    sheet.addCell(number); </li><li></li><li>    <i><font color="#339900">//写入数据q关闭文?/font></i></li><li>    book.write(); </li><li>    book.close(); </li><li></li><li>    }<b><font color="#0000ff">catch</font></b>(<b><a target="_blank"><font class="classLink"><u>Exception</u></font></a></b> e) </li><li>    { </li><li>      <b><a target="_blank"><font class="classLink"><u>System</u></font></a></b>.out.println(e); </li><li>    } </li><li>  } </li><li> }  </li></ol></div><br /> ~译执行后,会在当前位置产生一个Excel文g?br /><br /> 三、读取文?br /><br /> 以刚才我们创建的Excel文gZQ做一个简单的d操作Q程序代码如下:<br />  <br />  <div id="wmqeeuq" class="codeStyle"><ol><li><i><font color="#339900">//dExcel的类</font></i></li><li> <b><font color="#0000ff">import</font></b> java.io.*; </li><li> <b><font color="#0000ff">import</font></b> jxl.*; </li><li></li><li> <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> ReadXLS </li><li> { </li><li> <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">static</font></b> <b><font color="#0000ff">void</font></b> main(<b><a target="_blank"><font class="classLink"><u>String</u></font></a></b> args[]) </li><li> { </li><li>  <b><font color="#0000ff">try</font></b></li><li>  { </li><li>   Workbook book= </li><li> Workbook.getWorkbook(<b><font color="#0000ff">new</font></b> <font color="#ff0000">File</font>(“测?xls?); </li><li>    </li><li>   <i><font color="#339900">//获得W一个工作表对象</font></i></li><li> Sheet sheet=book.getSheet(0); </li><li></li><li> <i><font color="#339900">//得到W一列第一行的单元?/font></i></li><li> Cell cell1=sheet.getCell(0,0); </li><li> <b><a target="_blank"><font class="classLink"><u>String</u></font></a></b> result=cell1.getContents(); </li><li> <b><a target="_blank"><font class="classLink"><u>System</u></font></a></b>.out.println(result); </li><li></li><li> book.close(); </li><li></li><li>  }<b><font color="#0000ff">catch</font></b>(<b><a target="_blank"><font class="classLink"><u>Exception</u></font></a></b> e) </li><li>  { </li><li>   <b><a target="_blank"><font class="classLink"><u>System</u></font></a></b>.out.println(e); </li><li>  } </li><li> } </li><li> }  </li></ol></div><br /><br /> E序执行l果Qtest<br /><br /> 四、修Ҏ?br /><br /> 利用jExcelAPI可以修改已有的Excel文gQ修改Excel文g的时候,除了打开文g的方式不同之外,其他操作和创建Excel是一L。下面的例子是在我们已经生成的Excel文g中添加一个工作表Q?br /><br />  <div id="wmqeeuq" class="codeStyle"><ol><li><i><font color="#339900">//修改Excel的类Q添加一个工作表</font></i></li><li> <b><font color="#0000ff">import</font></b> java.io.*; </li><li> <b><font color="#0000ff">import</font></b> jxl.*; </li><li> <b><font color="#0000ff">import</font></b> jxl.write.*; </li><li></li><li> <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">class</font></b> UpdateXLS </li><li> { </li><li> <b><font color="#0000ff">public</font></b> <b><font color="#0000ff">static</font></b> <b><font color="#0000ff">void</font></b> main(<b><a target="_blank"><font class="classLink"><u>String</u></font></a></b> args[]) </li><li> { </li><li>  <b><font color="#0000ff">try</font></b></li><li>  { </li><li>   <i><font color="#339900">//Excel获得文g</font></i></li><li>   Workbook wb=Workbook.getWorkbook(<b><font color="#0000ff">new</font></b> <font color="#ff0000">File</font>(“测?xls?); </li><li>    </li><li>   <i><font color="#339900">//打开一个文件的副本Qƈ且指定数据写回到原文?/font></i></li><li> WritableWorkbook book= </li><li> Workbook.createWorkbook(<b><font color="#0000ff">new</font></b> <font color="#ff0000">File</font>(“测?xls?,wb); </li><li>    </li><li>   <i><font color="#339900">//d一个工作表</font></i></li><li>   WritableSheet sheet=book.createSheet(“第二页?1); </li><li></li><li>   sheet.addCell(<b><font color="#0000ff">new</font></b> <font color="#ff0000">Label</font>(0,0,”第二页的测试数据?); </li><li>    </li><li>   book.write(); </li><li>   book.close(); </li><li>  }<b><font color="#0000ff">catch</font></b>(<b><a target="_blank"><font class="classLink"><u>Exception</u></font></a></b> e) </li><li>  { </li><li>   <b><a target="_blank"><font class="classLink"><u>System</u></font></a></b>.out.println(e); </li><li>  } </li><li> } </li><li> }  </li></ol></div><br /> 执行l果如图Q?br /><br /> <br /><br /> 高操作<br /><br /> 一、 数据格式化<br /><br /> 在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满一般的应用?br /><br /> 1、 字串格式化<br /><br /> 字符串的格式化涉及到的是字体、粗l、字L元素Q这些功能主要由WritableFont和WritableCellFormatcL负责。假设我们在生成一个含有字串的单元格时Q用如下语句,为方便叙qͼ我们为每一行命令加了编P<br /><br /><br />  <div id="wmqeeuq" class="codeStyle"><ol><li>WritableFont font1= </li><li> <b><font color="#0000ff">new</font></b> WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ? </li><li></li><li> WritableCellFormat format1=<b><font color="#0000ff">new</font></b> WritableCellFormat(font1); ? </li><li></li><li> <font color="#ff0000">Label</font> label=<b><font color="#0000ff">new</font></b> <font color="#ff0000">Label</font>(0,0,”data 4 test?format1) ?</li></ol></div><br /><br /> 其中①指定了字串格式Q字体ؓTIMESQ字?6Q加_显C。WritableFont有非怸富的构造子Q供不同情况下用,jExcelAPI的java-doc中有详细列表Q这里不再列出?br /><br /> ②处代码使用了WritableCellFormatc,q个c非帔R要,通过它可以指定单元格的各U属性,后面的单元格格式化中会有更多描述?br /><br /> ③处使用了Labelcȝ构造子Q指定了字串被赋予那U格式?br /><br /> 在WritableCellFormatcMQ还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定Q?br /><br />  <div id="wmqeeuq" class="codeStyle"><ol><li><i><font color="#339900">//把水q_齐方式指定ؓ居中</font></i></li><li> format1.setAlignment(jxl.format.Alignment.CENTRE); </li></ol></div><br /><br />  <div id="wmqeeuq" class="codeStyle"><ol><li><i><font color="#339900">//把垂直对齐方式指定ؓ居中</font></i></li><li> format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); </li></ol></div><br /><br /> 二、单元格操作<br /><br /> Excel中很重要的一部分是对单元格的操作Q比如行高、列宽、单元格合ƈ{,所qjExcelAPI提供了这些支持。这些操作相Ҏ较简单,下面只介l一下相关的API?br /><br /> 1、 合q单元格<br /><br />  <div id="wmqeeuq" class="codeStyle"><ol><li>WritableSheet.mergeCells(<b><font color="#0000ff">int</font></b> m,<b><font color="#0000ff">int</font></b> n,<b><font color="#0000ff">int</font></b> p,<b><font color="#0000ff">int</font></b> q);  </li></ol></div><br /><br /> 作用是从(m,n)?p,q)的单元格全部合ƈQ比如:<br />  <div id="wmqeeuq" class="codeStyle"><ol><li>WritableSheet sheet=book.createSheet(“第一?0); </li></ol></div><br /><br /> //合ƈW一列第一行到W六列第一行的所有单元格<br />  <div id="wmqeeuq" class="codeStyle"><ol><li>sheet.mergeCells(0,0,5,0); </li></ol></div><br /><br /> 合ƈ既可以是横向的,也可以是U向的。合q后的单元格不能再次q行合ƈQ否则会触发异常?br /><br /> 2、 行高和列宽<br /><br />  <div id="wmqeeuq" class="codeStyle"><ol><li>WritableSheet.setRowView(<b><font color="#0000ff">int</font></b> i,<b><font color="#0000ff">int</font></b> height); </li></ol></div><br /><br /> 作用是指定第i+1行的高度Q比如:<br /><br /> //第一行的高度设ؓ200<br />  <div id="wmqeeuq" class="codeStyle"><ol><li>sheet.setRowView(0,200); </li><li></li><li> WritableSheet.setColumnView(<b><font color="#0000ff">int</font></b> i,<b><font color="#0000ff">int</font></b> width); </li></ol></div><br /><br /> 作用是指定第i+1列的宽度Q比如:<br /><br /> //第一列的宽度设ؓ30<br />  <div id="wmqeeuq" class="codeStyle"><ol><li>sheet.setColumnView(0,30); </li></ol></div><br /><br /> jExcelAPIq有其他的一些功能,比如插入囄{,q里׃再一一介绍Q读者可以自己探索?br /><br /><br /><script type="text/javascript"><!-- google_ad_client = "pub-7390275636631344"; google_ad_width = 728; google_ad_height = 90; google_ad_format = "728x90_as"; google_ad_type = "text_image"; google_ad_channel ="5095444487"; google_color_border = "336699"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_url = "008000"; google_color_text = "000000"; //--></script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"></script><img src ="http://www.aygfsteel.com/software5168/aggbug/55989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/software5168/" target="_blank">software5168</a> 2006-06-30 16:54 <a href="http://www.aygfsteel.com/software5168/archive/2006/06/30/55989.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>使用JavadExcel文g内容http://www.aygfsteel.com/software5168/archive/2006/06/30/55986.htmlsoftware5168software5168Fri, 30 Jun 2006 08:51:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/06/30/55986.htmlhttp://www.aygfsteel.com/software5168/comments/55986.htmlhttp://www.aygfsteel.com/software5168/archive/2006/06/30/55986.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/55986.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/55986.html
  如果你有个Excel文gQ名为Book1.xlsQ译者注Q由于原文的例子我没有下载下来,所以我用了自己的例子)Qƈ且,该文件中有一个工作表QsheetQ名为Sheet1

  

微Y的ODBC驱动E序把工作表中的W一行作为列名(译者注Q即字段名)Q工作表名作为数据库表名?

  要通过JDBC讉K工作表,我们q必dZ个新的ODBC数据源,在Windows 2000pȝ上创建数据源的过E如下:


q入“控刉李?--> “管理工具?--> “数据源QODBCQ”,Q译者注Q打开后选择pȝDSNQ,点击dQ在弹出H口中选择“Driver do Microsoft Excel(*.xls)?br />



然后在数据源名处输入你一个名字Book1Q译者注Q相当于数据库名Q,然后点击“选择工作쀝,然后扑ֈq取你的Excel文g


点击定后,pȝ数据源列表中会出C讄的数据源名称Q?br />  



  现在数据表已l在数据源列表里了(译者注Q点ȝ定完成配|)?

  Q译者注Q我的例子中Q现在如果我们想挑出test1列中的所有“测试”|那就需要用以下的SQL查询Q?br />
  SELECT test1 FROM [Sheet1$] WHERE test1='试'

  要注意的是工作表名后面跟了一个?”符Pq个W号是不可缺的。ؓ什么?因ؓ他的前后有方括号Q因为?”是SQL语句中的保留字。Life is never easyQ译者注Q作者发感慨了)?

下面是例子程序:
import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.DriverManager;

public class ExcelReader {

    public static void main( StringQ] args ) {

        Connection c = null;
        Statement stmnt = null;
        try {
            Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
            c = DriverManager.getConnection( "jdbc:odbc:Book1", "", "" );
            stmnt = c.createStatement();
            String query = "SELECT test1 FROM [Sheet1$] WHERE test1='试'";
            ResultSet rs = stmnt.executeQuery( query );
            
            System.out.println( "查得匚w'试'的test1的记录ؓ:" );
            while( rs.next() ) {
                System.out.println( rs.getString( "test1" ) );
            }
        }
        catch( Exception e ) {
            System.err.println( e );
        }
        finally {
            try {
                stmnt.close();
                c.close();
            }
            catch( Exception e ) {
                System.err.println( e );
            }
        }
    }
}

在此E序中,d数main() 建立了一个数据表的连接,q取出符合条件的记录?

Q译者注Q另外,我这里还有一D늨序,是读取所有记录的E序Q仅作参考)Q?

import java.sql.Connection;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DriverManager;

public class ExcelReader {

    public static void main(StringQ] args){
        Connection connection = null;

        try{
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            Connection con = DriverManager.getConnection( "jdbc:odbc:Book1","","" );
            Statement st = con.createStatement();
            ResultSet rs = st.executeQuery( "SELECT * FROM [Sheet1$]" );

            ResultSetMetaData rsmd = rs.getMetaData();
            int numberOfColumns = rsmd.getColumnCount();

            while (rs.next()) {
                for (int i = 1; i <= numberOfColumns; i++) {
                    if(i>1)  //用逗号分隔各列
      System.out.print(", ");
                    String columnValue = rs.getString(i);
                    System.out.print(columnValue);
                }
                System.out.println("");
            }

            st.close();
            con.close();


        } catch(Exception ex) {
            System.err.print("Exception: ");
            System.err.println(ex.getMessage());
        }
    }

}


software5168 2006-06-30 16:51 发表评论
]]>
Oracle 函數大全http://www.aygfsteel.com/software5168/archive/2006/06/30/55850.htmlsoftware5168software5168Fri, 30 Jun 2006 01:01:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/06/30/55850.htmlhttp://www.aygfsteel.com/software5168/comments/55850.htmlhttp://www.aygfsteel.com/software5168/archive/2006/06/30/55850.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/55850.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/55850.html 

SQL中的单记录函?br />1.ASCII
q回与指定的字符对应的十q制?
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

        A         A      ZERO     SPACE
--------- --------- --------- ---------
       65        97        48        32


2.CHR
l出整数,q回对应的字W?
SQL> select chr(54740) zhao,chr(65) chr65 from dual;

ZH C
-- -
?A

3.CONCAT
q接两个字符?
SQL> select concat('010-','88888888')||'?3'  高乾竞电?from dual;

高乾竞电?br />----------------
010-88888888?3

4.INITCAP
q回字符串ƈ字W串的第一个字母变为大?
SQL> select initcap('smith') upp from dual;

UPP
-----
Smith


5.INSTR(C1,C2,I,J)
在一个字W串中搜索指定的字符,q回发现指定的字W的位置;
C1    被搜索的字符?br />C2    希望搜烦的字W串
I     搜烦的开始位|?默认?
J     出现的位|?默认?
SQL> select instr('oracle traning','ra',1,2) instring from dual;

 INSTRING
---------
        9


6.LENGTH
q回字符串的长度;
SQL> select name,length(name),addr,length(addr),sal,length(to_char(sal)) from gao.nchar_tst;

NAME   LENGTH(NAME) ADDR             LENGTH(ADDR)       SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ --------- --------------------
高乾竞          ?3 北京市v锭区                6   9999.99                    7

 

7.LOWER
q回字符?q将所有的字符写
SQL> select lower('AaBbCcDd')AaBbCcDd from dual;

AABBCCDD
--------
aabbccdd


8.UPPER
q回字符?q将所有的字符大写
SQL> select upper('AaBbCcDd') upper from dual;

UPPER
--------
AABBCCDD

 

9.RPAD和LPAD(_脓字符)
RPAD  在列的右边粘贴字W?br />LPAD  在列的左边粘贴字W?br />SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual;

LPAD(RPAD('GAO',1
-----------------
*******gao*******
不够字符则用*来填?/font>


10.LTRIM和RTRIM
LTRIM  删除左边出现的字W串
RTRIM  删除双出现的字W串
SQL> select ltrim(rtrim('   gao qian jing   ',' '),' ') from dual;

LTRIM(RTRIM('
-------------
gao qian jing


11.SUBSTR(string,start,count)
取子字符?从start开?取count?br />SQL> select substr('13088888888',3,8) from dual;

SUBSTR('
--------
08888888


12.REPLACE('string','s1','s2')
string   希望被替换的字符或变?
s1       被替换的字符?br />s2       要替换的字符?br />SQL> select replace('he love you','he','i') from dual;

REPLACE('H
----------
i love you


13.SOUNDEX
q回一个与l定的字W串读音相同的字W串
SQL> create table table1(xm varchar(8));
SQL> insert into table1 values('weather');
SQL> insert into table1 values('wether');
SQL> insert into table1 values('gao');

SQL> select xm from table1 where soundex(xm)=soundex('weather');

XM
--------
weather
wether


14.TRIM('s' from 'string')
LEADING   剪掉前面的字W?br />TRAILING  剪掉后面的字W?br />如果不指?默认为空格符

15.ABS
q回指定值的l对?br />SQL> select abs(100),abs(-100) from dual;

 ABS(100) ABS(-100)
--------- ---------
      100       100


16.ACOS
l出反余弦的?br />SQL> select acos(-1) from dual;

 ACOS(-1)
---------
3.1415927


17.ASIN
l出反正弦的?br />SQL> select asin(0.5) from dual;

ASIN(0.5)
---------
.52359878


18.ATAN
q回一个数字的反正切?br />SQL> select atan(1) from dual;

  ATAN(1)
---------
.78539816


19.CEIL
q回大于或等于给出数字的最整?br />SQL> select ceil(3.1415927) from dual;

CEIL(3.1415927)
---------------
              4


20.COS
q回一个给定数字的余u
SQL> select cos(-3.1415927) from dual;

COS(-3.1415927)
---------------
             -1


21.COSH
q回一个数字反余u?br />SQL> select cosh(20) from dual;

 COSH(20)
---------
242582598


22.EXP
q回一个数字e的nơ方?br />SQL> select exp(2),exp(1) from dual;

   EXP(2)    EXP(1)
--------- ---------
7.3890561 2.7182818


23.FLOOR
对给定的数字取整?br />SQL> select floor(2345.67) from dual;

FLOOR(2345.67)
--------------
          2345


24.LN
q回一个数字的Ҏ?br />SQL> select ln(1),ln(2),ln(2.7182818) from dual;

    LN(1)     LN(2) LN(2.7182818)
--------- --------- -------------
        0 .69314718     .99999999


25.LOG(n1,n2)
q回一个以n1为底n2的对?
SQL> select log(2,1),log(2,4) from dual;

 LOG(2,1)  LOG(2,4)
--------- ---------
        0         2


26.MOD(n1,n2)
q回一个n1除以n2的余?br />SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;

MOD(10,3)  MOD(3,3)  MOD(2,3)
--------- --------- ---------
        1         0         2


27.POWER
q回n1的n2ơ方?br />SQL> select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)
----------- ----------
       1024         27


28.ROUND和TRUNC
按照指定的精度进行舍?br />SQL> select round(55.5),round(-55.4),trunc(55.5),trunc(-55.5) from dual;

ROUND(55.5) ROUND(-55.4) TRUNC(55.5) TRUNC(-55.5)
----------- ------------ ----------- ------------
         56          -55          55          -55


29.SIGN
取数字n的符?大于0q回1,于0q回-1,{于0q回0
SQL> select sign(123),sign(-100),sign(0) from dual;

SIGN(123) SIGN(-100)   SIGN(0)
--------- ---------- ---------
        1         -1         0


30.SIN
q回一个数字的正u?br />SQL> select sin(1.57079) from dual;

SIN(1.57079)
------------
           1


31.SIGH
q回双曲正u的?br />SQL> select sin(20),sinh(20) from dual;

  SIN(20)  SINH(20)
--------- ---------
.91294525 242582598


32.SQRT
q回数字n的根
SQL> select sqrt(64),sqrt(10) from dual;

 SQRT(64)  SQRT(10)
--------- ---------
        8 3.1622777


33.TAN
q回数字的正切?br />SQL> select tan(20),tan(10) from dual;

  TAN(20)   TAN(10)
--------- ---------
2.2371609 .64836083


34.TANH
q回数字n的双曲正切?br />SQL> select tanh(20),tan(20) from dual;

 TANH(20)   TAN(20)
--------- ---------
        1 2.2371609

 

35.TRUNC
按照指定的精度截取一个数
SQL> select trunc(124.1666,-2) trunc1,trunc(124.16666,2) from dual;

   TRUNC1 TRUNC(124.16666,2)
--------- ------------------
      100             124.16

 

36.ADD_MONTHS
增加或减L?br />SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA
------
200002
SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA
------
199910


37.LAST_DAY
q回日期的最后一?br />SQL> select to_char(sysdate,'yyyy.mm.dd'),to_char((sysdate)+1,'yyyy.mm.dd') from dual;

TO_CHAR(SY TO_CHAR((S
---------- ----------
2004.05.09 2004.05.10
SQL> select last_day(sysdate) from dual;

LAST_DAY(S
----------
31-5?-04


38.MONTHS_BETWEEN(date2,date1)
l出date2-date1的月?br />SQL> select months_between('19-12?1999','19-3?1999') mon_between from dual;

MON_BETWEEN
-----------
          9
SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.mm.dd')) mon_betw from dual;

 MON_BETW
---------
      -60


39.NEW_TIME(date,'this','that')
l出在this时区=other时区的日期和旉
SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time
  2  (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

BJ_TIME             LOS_ANGLES
------------------- -------------------
2004.05.09 11:05:32 2004.05.09 18:05:32


40.NEXT_DAY(date,'day')
l出日期date和星期x之后计算下一个星期的日期
SQL> select next_day('18-5?2001','星期?) next_day from dual;

NEXT_DAY
----------
25-5?-01

 

41.SYSDATE
用来得到pȝ的当前日?br />SQL> select to_char(sysdate,'dd-mm-yyyy day') from dual;

TO_CHAR(SYSDATE,'
-----------------
09-05-2004 星期?br />trunc(date,fmt)按照l出的要求将日期截断,如果fmt='mi'表示保留?截断U?br />SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,
  2  to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH                  HHMM
------------------- -------------------
2004.05.09 11:00:00 2004.05.09 11:17:00

 

42.CHARTOROWID
字W数据类型{换ؓROWIDcd
SQL> select rowid,rowidtochar(rowid),ename from scott.emp;

ROWID              ROWIDTOCHAR(ROWID) ENAME
------------------ ------------------ ----------
AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH
AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN
AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD
AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES


43.CONVERT(c,dset,sset)
源字符?sset从一个语a字符集{换到另一个目的dset字符?br />SQL> select convert('strutz','we8hp','f7dec') "conversion" from dual;

conver
------
strutz


44.HEXTORAW
一个十六进制构成的字符串{换ؓ二进?/font>


45.RAWTOHEXT
一个二q制构成的字W串转换为十六进?/font>

 

46.ROWIDTOCHAR
ROWID数据cd转换为字W类?/font>

 

47.TO_CHAR(date,'format')
SQL> select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

TO_CHAR(SYSDATE,'YY
-------------------
2004/05/09 21:14:41

 

48.TO_DATE(string,'format')
字W串转化为ORACLE中的一个日?/font>


49.TO_MULTI_BYTE
字W串中的单字节字W{化ؓ多字节字W?br />SQL>  select to_multi_byte('?) from dual;

TO
--
?/font>


50.TO_NUMBER
给出的字符转换为数?br />SQL> select to_number('1999') year from dual;

     YEAR
---------
     1999


51.BFILENAME(dir,file)
指定一个外部二q制文g
SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));


52.CONVERT('x','desc','source')
x字段或变量的源source转换为desc
SQL> select sid,serial#,username,decode(command,
  2  0,'none',
  3  2,'insert',
  4  3,
  5  'select',
  6  6,'update',
  7  7,'delete',
  8  8,'drop',
  9  'other') cmd  from v$session where type!='background';

      SID   SERIAL# USERNAME                       CMD
--------- --------- ------------------------------ ------
        1         1                                none
        2         1                                none
        3         1                                none
        4         1                                none
        5         1                                none
        6         1                                none
        7      1275                                none
        8      1275                                none
        9        20 GAO                            select
       10        40 GAO                            none


53.DUMP(s,fmt,start,length)
DUMP函数以fmt指定的内部数字格式返回一个VARCHAR2cd的?br />SQL> col global_name for a30
SQL> col dump_string for a50
SQL> set lin 200
SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;

GLOBAL_NAME                    DUMP_STRING
------------------------------ --------------------------------------------------
ORACLE.WORLD                   Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D


54.EMPTY_BLOB()和EMPTY_CLOB()
q两个函数都是用来对大数据类型字D进行初始化操作的函?/font>


55.GREATEST
q回一l表辑ּ中的最大?x较字W的~码大小.
SQL> select greatest('AA','AB','AC') from dual;

GR
--
AC
SQL> select greatest('?,'?,'?) from dual;

GR
--
?/font>


56.LEAST
q回一l表辑ּ中的最?
SQL> select least('?,'?,'?) from dual;

LE
--
?/font>


57.UID
q回标识当前用户的唯一整数
SQL> show user
USER ?GAO"
SQL> select username,user_id from dba_users where user_id=uid;

USERNAME                         USER_ID
------------------------------ ---------
GAO                                   25

 

58.USER
q回当前用户的名?br />SQL> select user from  dual;

USER
------------------------------
GAO


59.USEREVN
q回当前用户环境的信?opt可以?
ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE
ISDBA  查看当前用户是否是DBA如果是则q回true
SQL> select userenv('isdba') from dual;

USEREN
------
FALSE
SQL> select userenv('isdba') from dual;

USEREN
------
TRUE
SESSION
q回会话标志
SQL> select userenv('sessionid') from dual;

USERENV('SESSIONID')
--------------------
                 152
ENTRYID
q回会话人口标志
SQL> select userenv('entryid') from dual;

USERENV('ENTRYID')
------------------
                 0
INSTANCE
q回当前INSTANCE的标?br />SQL> select userenv('instance') from dual;

USERENV('INSTANCE')
-------------------
                  1
LANGUAGE
q回当前环境变量
SQL> select userenv('language') from dual;

USERENV('LANGUAGE')
----------------------------------------------------
SIMPLIFIED CHINESE_CHINA.ZHS16GBK
LANG
q回当前环境的语a的羃?br />SQL> select userenv('lang') from dual;

USERENV('LANG')
----------------------------------------------------
ZHS
TERMINAL
q回用户的终端或机器的标?br />SQL> select userenv('terminal') from dual;

USERENV('TERMINA
----------------
GAO
VSIZE(X)
q回X的大?字节)?br />SQL> select vsize(user),user from dual;

VSIZE(USER) USER
----------- ------------------------------
          6 SYSTEM

 

60.AVG(DISTINCT|ALL)
all表示Ҏ有的值求q_?distinct只对不同的值求q_?br />SQLWKS> create table table3(xm varchar(8),sal number(7,2));
语句已处理?br />SQLWKS>  insert into table3 values('gao',1111.11);
SQLWKS>  insert into table3 values('gao',1111.11);
SQLWKS>  insert into table3 values('zhu',5555.55);
SQLWKS> commit;

SQL> select avg(distinct sal) from gao.table3;

AVG(DISTINCTSAL)
----------------
         3333.33

SQL> select avg(all sal) from gao.table3;

AVG(ALLSAL)
-----------
    2592.59


61.MAX(DISTINCT|ALL)
求最大?ALL表示Ҏ有的值求最大?DISTINCT表示对不同的值求最大?相同的只取一?br />SQL> select max(distinct sal) from scott.emp;

MAX(DISTINCTSAL)
----------------
            5000


62.MIN(DISTINCT|ALL)
求最?ALL表示Ҏ有的值求最?DISTINCT表示对不同的值求最?相同的只取一?br />SQL> select min(all sal) from gao.table3;

MIN(ALLSAL)
-----------
    1111.11


63.STDDEV(distinct|all)
求标准差,ALL表示Ҏ有的值求标准?DISTINCT表示只对不同的值求标准?br />SQL> select stddev(sal) from scott.emp;

STDDEV(SAL)
-----------
  1182.5032

SQL> select stddev(distinct sal) from scott.emp;

STDDEV(DISTINCTSAL)
-------------------
           1229.951

 

64.VARIANCE(DISTINCT|ALL)
求协方差

SQL> select variance(sal) from scott.emp;

VARIANCE(SAL)
-------------
    1398313.9


65.GROUP BY
主要用来对一l数q行l计
SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno;

   DEPTNO  COUNT(*)  SUM(SAL)
--------- --------- ---------
       10         3      8750
       20         5     10875
       30         6      9400

 

66.HAVING
对分l统计再加限制条?br />SQL> select deptno,count(*),sum(sal) from scott.emp group by deptno having count(*)>=5;

   DEPTNO  COUNT(*)  SUM(SAL)
--------- --------- ---------
       20         5     10875
       30         6      9400
SQL> select deptno,count(*),sum(sal) from scott.emp having count(*)>=5 group by deptno ;

   DEPTNO  COUNT(*)  SUM(SAL)
--------- --------- ---------
       20         5     10875
       30         6      9400


67.ORDER BY
用于Ҏ询到的结果进行排序输?br />SQL> select deptno,ename,sal from scott.emp order by deptno,sal desc;

   DEPTNO ENAME            SAL
--------- ---------- ---------
       10 KING            5000
       10 CLARK           2450
       10 MILLER          1300
       20 SCOTT           3000
       20 FORD            3000
       20 JONES           2975
       20 ADAMS           1100
       20 SMITH            800
       30 BLAKE           2850
       30 ALLEN           1600
       30 TURNER          1500
       30 WARD            1250
       30 MARTIN          1250
       30 JAMES            950



software5168 2006-06-30 09:01 发表评论
]]>
Java常用軟g下載地址http://www.aygfsteel.com/software5168/archive/2006/04/30/44112.htmlsoftware5168software5168Sun, 30 Apr 2006 00:33:00 GMThttp://www.aygfsteel.com/software5168/archive/2006/04/30/44112.htmlhttp://www.aygfsteel.com/software5168/comments/44112.htmlhttp://www.aygfsteel.com/software5168/archive/2006/04/30/44112.html#Feedback0http://www.aygfsteel.com/software5168/comments/commentRss/44112.htmlhttp://www.aygfsteel.com/software5168/services/trackbacks/44112.htmlhttp://java.sun.com/
Spring   http://www.springframework.org/
Eclipse   http://www.eclipse.org/
Ant,Tomcat   http://projects.apache.org/indexes.html
Log4j   http://logging.apache.org/
Hibernate   http://www.hibernate.org/
MySQL http://www.mysql.com/

software5168 2006-04-30 08:33 发表评论
]]>
վ֩ģ壺 ع| ɽ| ˮ| ͤ| | | Ϫ| Ԫ| | ԰| ʯ| ƽ| | | ɽ| ̨| ĵ| | | º| | | | | | ʲ| | ͭ| | | ǡ| ɽ| | | ĩ| | | Ϫ| α| | ؼ|