??xml version="1.0" encoding="utf-8" standalone="yes"?>国产亚洲美日韩AV中文字幕无码成人,亚洲日本在线观看,中中文字幕亚洲无线码http://www.tkk7.com/software5168/zh-cnFri, 09 May 2025 18:12:25 GMTFri, 09 May 2025 18:12:25 GMT60iframe高度自动调整(通过IE,firefox,opera试)http://www.tkk7.com/software5168/archive/2009/04/21/266752.htmlsoftware5168software5168Tue, 21 Apr 2009 06:05:00 GMThttp://www.tkk7.com/software5168/archive/2009/04/21/266752.htmlhttp://www.tkk7.com/software5168/comments/266752.htmlhttp://www.tkk7.com/software5168/archive/2009/04/21/266752.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/266752.htmlhttp://www.tkk7.com/software5168/services/trackbacks/266752.html     <iframe id="mainIframe" scrolling="no" frameborder="0" width="100%" src="a.html"></iframe>
    <a href="#" onclick="page('a.html')">a面</a><a href="#" onclick="page('b.html')">b面</a>

2 a.html  //内嵌面
    <script language="javascript">
          changeHight();
    </script>

3. b.html  //内嵌面
     <script language="javascript">
          changeHight();
    </script>

4. page.js
 function changeHight(){
  var iFrm = parent.document.getElementById("mainIframe");
     var subWeb = iFrm.contentDocument;
     if(subWeb){
    if (subWeb.body.scrollHeight>480)
   iFrm.height = subWeb.body.scrollHeight+20;
  else
      iFrm.height=500;
  } 
  if(top.document.frames["mainIframe"].document && window.document.body.scrollHeight!="0"){
   parent.document.getElementById("mainIframe").style.height=window.document.body.scrollHeight;
  }
  if(top.document.frames["mainIframe"].document && window.document.body.scrollHeight=="0"){
   parent.document.getElementById("mainIframe").style.height=500;
  }
}

function page(page){
    document.getElementById("mainIframe").src=page;
}



造成IE,FireFox,Opera中Iframe昄差异原因在于
1.iframe在FireFox中取法ؓ(f)parent.document.getElementById("mainIframe").contentDocument,而在ie,opera中ؓ(f)parent.document.getElementById("mainIframe").document
2.当页面无滚动Ӟwindow.document.body.scrollHeight在IE中能取到QfireFox和Opera中取不到?

software5168 2009-04-21 14:05 发表评论
]]>
文g上传下蝲http://www.tkk7.com/software5168/archive/2009/02/26/256852.htmlsoftware5168software5168Thu, 26 Feb 2009 09:11:00 GMThttp://www.tkk7.com/software5168/archive/2009/02/26/256852.htmlhttp://www.tkk7.com/software5168/comments/256852.htmlhttp://www.tkk7.com/software5168/archive/2009/02/26/256852.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/256852.htmlhttp://www.tkk7.com/software5168/services/trackbacks/256852.html阅读全文

software5168 2009-02-26 17:11 发表评论
]]>
如何控制单选、复选、列表框http://www.tkk7.com/software5168/archive/2007/08/09/135402.htmlsoftware5168software5168Thu, 09 Aug 2007 01:17:00 GMThttp://www.tkk7.com/software5168/archive/2007/08/09/135402.htmlhttp://www.tkk7.com/software5168/comments/135402.htmlhttp://www.tkk7.com/software5168/archive/2007/08/09/135402.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/135402.htmlhttp://www.tkk7.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("选择号ؓ(f):"+window.document.getElementById("lbka").selectedIndex + "    gؓ(f):" +window.document.getElementById("lbka")[window.document.getElementById("lbka").selectedIndex].value+"    文本gؓ(f):" + 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ؓ(f):"+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ؓ(f):"+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.tkk7.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.tkk7.com/software5168/archive/2007/08/08/135271.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/135271.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2007/08/08/135271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/135271.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/135271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2007-08-08 16:11 <a href="http://www.tkk7.com/software5168/archive/2007/08/08/135271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>如何实现面打印http://www.tkk7.com/software5168/archive/2007/08/08/135193.htmlsoftware5168software5168Wed, 08 Aug 2007 03:27:00 GMThttp://www.tkk7.com/software5168/archive/2007/08/08/135193.htmlhttp://www.tkk7.com/software5168/comments/135193.htmlhttp://www.tkk7.com/software5168/archive/2007/08/08/135193.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/135193.htmlhttp://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2007/08/08/135184.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/135184.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2007/08/08/135184.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/135184.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/135184.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2007-08-08 10:52 <a href="http://www.tkk7.com/software5168/archive/2007/08/08/135184.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>最单的视频面http://www.tkk7.com/software5168/archive/2007/01/12/93506.htmlsoftware5168software5168Fri, 12 Jan 2007 10:34:00 GMThttp://www.tkk7.com/software5168/archive/2007/01/12/93506.htmlhttp://www.tkk7.com/software5168/comments/93506.htmlhttp://www.tkk7.com/software5168/archive/2007/01/12/93506.html#Feedback2http://www.tkk7.com/software5168/comments/commentRss/93506.htmlhttp://www.tkk7.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.tkk7.com/software5168/archive/2006/12/14/87658.htmlsoftware5168software5168Thu, 14 Dec 2006 03:03:00 GMThttp://www.tkk7.com/software5168/archive/2006/12/14/87658.htmlhttp://www.tkk7.com/software5168/comments/87658.htmlhttp://www.tkk7.com/software5168/archive/2006/12/14/87658.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/87658.htmlhttp://www.tkk7.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 发表评论
]]>
?sh)子书下载连?/title><link>http://www.tkk7.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.tkk7.com/software5168/archive/2006/12/13/87382.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/87382.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/12/13/87382.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/87382.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/87382.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-12-13 09:18 <a href="http://www.tkk7.com/software5168/archive/2006/12/13/87382.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>springMVC结_1http://www.tkk7.com/software5168/archive/2006/10/09/74084.htmlsoftware5168software5168Mon, 09 Oct 2006 07:14:00 GMThttp://www.tkk7.com/software5168/archive/2006/10/09/74084.htmlhttp://www.tkk7.com/software5168/comments/74084.htmlhttp://www.tkk7.com/software5168/archive/2006/10/09/74084.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/74084.htmlhttp://www.tkk7.com/software5168/services/trackbacks/74084.html1.web.xml中配|Spring的servlet和servlet-mapping
   <servlet>
        <servlet-name>example</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param> 
            <param-name>contextConfigLocation</param-name> 
            <param-value>/WEB-INF/application-servlet.xml</param-value> 
        </init-param> 
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>example</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
2.配置spring配置文gapplication-servlet.xml
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
     <property name="prefix">
         <value>/page/</value>
     </property>
     <property name="suffix">
         <value>.jsp</value>
     </property>
   </bean>
   <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/login.do">loginAction</prop>
            </props>
        </property>
   </bean>
   <bean id="loginAction" class="loginAction">
        <property name="commandClass">
            <value> LoginActionVo  </value>
        </property>
        <property name="formView">
            <value>login</value>
        </property>
        <property name="sessionForm">
            <value>true</value>
        </property>
        <property name="serviceLocator">
            <ref bean="servicelocator" />
        </property>
 </bean>
3.新徏繼承SimpleFormControllerH並複寫protected Object formBackingObject(HttpServletRequest request) 和 protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
 Object cmd, BindException ex)。常用結構為
   protected Object formBackingObject(HttpServletRequest request){
      LoginActionVo  loginActionVo   = new LoginActionVo ();
      request.setAttribute(" loginActionVo", loginActionVo);
      return loginActionVo;
   }
   protected ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response,
       Object cmd, BindException ex){
      LoginActionVo  loginActionVo =(LoginActionVo)cmd;
      Map map = new HashMap();
     map.put(" loginActionVo", loginActionVo);
     request.getSession().setAttribute(this.getFormSessionAttributeName(), loginActionVo);
     return new ModelAndView("login",map);
  }

4.jsp頁面參數和VO進行E定。綁定的Ҏ(gu)為頁面元素name和VO象應H當進行深層ơ的E定時﹐要注意﹐在變量的getҎ(gu)中進行初始化。在servlet2.4容器中可以不用c:out標籤
輸入框綁定﹕<input name="user.name"  value = "<c:out value="${loginActionVo.user.name}"/>" type="text" disabled="disabled"  size="14" maxlength="14" /></td>
VO為﹕
 public class loginActionVo{
    private User user;
    public User getUser(User user){
      if( user == null){
         user = new User();
      }
      return user;
   }
 }

   



software5168 2006-10-09 15:14 发表评论
]]>
springMVC心得http://www.tkk7.com/software5168/archive/2006/09/17/70138.htmlsoftware5168software5168Sun, 17 Sep 2006 06:11:00 GMThttp://www.tkk7.com/software5168/archive/2006/09/17/70138.htmlhttp://www.tkk7.com/software5168/comments/70138.htmlhttp://www.tkk7.com/software5168/archive/2006/09/17/70138.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/70138.htmlhttp://www.tkk7.com/software5168/services/trackbacks/70138.html以SimpleFormControllerZ
1。spring 接收一個請求後首先會判?get"還是"post"Ҏ(gu)

2? "get"Ҏ(gu)?br />         2?? 首先創徏一個command象H通過調用AbstractFormController的formBackingObjectҎ(gu)得到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Ҏ(gu)。這個方法默認為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.tkk7.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.tkk7.com/software5168/archive/2006/09/06/68084.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/68084.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/09/06/68084.html#Feedback</comments><slash:comments>4</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/68084.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/68084.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-09-06 18:03 <a href="http://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/09/05/67752.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/67752.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/09/05/67752.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/67752.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/software5168/services/trackbacks/67752.html</trackback:ping><description><![CDATA[ HttpServletRequest,HttpServletResponse:q两个属性的作用范围最?br />    旉上:(x)只是本nh和应{完成就失效Q当然{发是把当前的request对象取出来传l另一<br />          个资源,其实本n的request对象q是只生存到本次hl束Qresponse也同栗?br />    I间上:(x)只能发送请求的客户端有效?br /><br />    HttpSession:一ơ连l到客户端关闭,旉作用范围比上面两个大Q空间Q用范围相同?br /><br />    ServletConfig:从一个servlet被实例化后,对Q何客L(fng)在Q何时候访问有效,但仅Ҏ(gu)servlet<br />    有效Q一个servlet的ServletConfig对象不能被另一个servlet讉K?br /><br />    ServletContext:对Q何servletQQ何h在Q何时间都有效Q这才是真正全局的对象?br /><br />    那么QServletConfig参数和ServletContext参数到底应该如何使用Q如何取得?<br /><br />    一般来_(d)Ҏ(gu)个应用的配置Qؓ(f)了不使用“硬~码”,应该配置为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应该配|ؓ(f)ServletConfig<br />    参数Q如一个读取附件的servlet要用到绝对目录,而别的servlet不会(x)用到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 />    不用_(d)因ؓ(f)?lt;servlet>标签中已l指定了name和class,也就是说只有mail.GetAttServletq个<br />    servlet中才能取到path,而别的Servlet是不能取到的?br /><br />    那么如何讉Kq两个对象的参数呢?<br />    讉KServletConfig参数Q?br />        首先要取得ServletConfig对象Q然后调用它的getInitParameter();Ҏ(gu)。要讉K<br />    ServletConfig对象Qjsp中直接用config内置对象Q但因ؓ(f)你的JSP~译后的servlet一般不?x)?br />    加到web.xml中的Q所以一般不?x)通过jsp来取Ҏ(gu)JSP~译后的servlet的配|参敎ͼ那么在servlet<br />    中要得到ServletConfig对象有两U方法:(x)<br /><br />    在inii()Ҏ(gu)中取刎ͼ(x)通过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 />    然后在下面的Ҏ(gu)中就可以讉Kconfig对象。但要注意,Z保能从构造方法中到到当前servlet?br />    config对象Q应该调用父cȝ构造方法:(x)<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()Ҏ(gu)直接到时Q这样做的好处是不必调手工传递属性,惛_M时候都?br />    以得到?br /><br />    q有W三U方法,要自己实C些接口,q里作ؓ(f)一般讨论就不介l了?br /><br />    要访问ServletContext对象Q只要从现有的ServletConfig对象getServletContextQ)可以了Q然?br />    调用它的getInitParameter()Ҏ(gu)可以获取它的参数?br /><br />    按说QServletContext对象的作用域比ServletConfig作用域大Qؓ(f)什么要从ServletConfig中到?br />    ServletContext对象呢?我个为:(x)容器保存了很多个ServletContext对象Q请求时容器到底取哪一?br />    l你呢?那就取其中包含ServletConfig信息的那个给你,是说取ServletConfig对象的父U对象。就?br />    象HttpSession要从requset中取得一P是取那个包含当前requese对象的session对象l你Q这只是?br />    的个人想法,q没有来得及(qing)看具体实现。反正就q么用吧?<img src ="http://www.tkk7.com/software5168/aggbug/67752.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-09-05 10:26 <a href="http://www.tkk7.com/software5168/archive/2006/09/05/67752.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring + jsfhttp://www.tkk7.com/software5168/archive/2006/08/25/65776.htmlsoftware5168software5168Fri, 25 Aug 2006 06:06:00 GMThttp://www.tkk7.com/software5168/archive/2006/08/25/65776.htmlhttp://www.tkk7.com/software5168/comments/65776.htmlhttp://www.tkk7.com/software5168/archive/2006/08/25/65776.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/65776.htmlhttp://www.tkk7.com/software5168/services/trackbacks/65776.htmlJSF和Spring集成的资料比较少,原理是获得彼此的上下文引?以此q一步获得各自管理的bean,q是可能?因ؓ(f)两者是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,其它涉及(qing)的类和接口略?
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? 让它成ؓ(f)遵@"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.
因ؓ(f)在FacesWebApplicationContext和ApplicationContext之间有层ơ关p?所以你的JSF可管理支持beans能容易的实现ApplicationContextAware接口,q能通过getBeanҎ(gu)讉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(h)器用于向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里只ؓ(f)演示上面的说明的功能.
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相关目官方站点,提供本文介绍的框架下载以?qing)实例下?


software5168 2006-08-25 14:06 发表评论
]]>springMVC W三個例?/title><link>http://www.tkk7.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.tkk7.com/software5168/archive/2006/08/24/65526.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/65526.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/24/65526.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/65526.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/65526.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-24 15:18 <a href="http://www.tkk7.com/software5168/archive/2006/08/24/65526.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDOMhttp://www.tkk7.com/software5168/archive/2006/08/24/65491.htmlsoftware5168software5168Thu, 24 Aug 2006 04:50:00 GMThttp://www.tkk7.com/software5168/archive/2006/08/24/65491.htmlhttp://www.tkk7.com/software5168/comments/65491.htmlhttp://www.tkk7.com/software5168/archive/2006/08/24/65491.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/65491.htmlhttp://www.tkk7.com/software5168/services/trackbacks/65491.html 1.         Abstract

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

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

 

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

1 展示如何建立、新增、刪除及(qing)輸出一?/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如果沒有加這行指o(h)Q預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 不熟(zhn),?/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(h)列的用法在一般的運用裡是很方便,但是我們有興趣的是在程式裡怎麼用。範?/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.tkk7.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.tkk7.com/software5168/archive/2006/08/23/65304.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/65304.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/23/65304.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/65304.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/65304.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-23 16:29 <a href="http://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/08/23/65289.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/65289.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/23/65289.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/65289.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/65289.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-23 15:52 <a href="http://www.tkk7.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.tkk7.com/software5168/archive/2006/08/14/63390.htmlsoftware5168software5168Mon, 14 Aug 2006 00:50:00 GMThttp://www.tkk7.com/software5168/archive/2006/08/14/63390.htmlhttp://www.tkk7.com/software5168/comments/63390.htmlhttp://www.tkk7.com/software5168/archive/2006/08/14/63390.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/63390.htmlhttp://www.tkk7.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.tkk7.com/software5168/archive/2006/08/11/63028.htmlsoftware5168software5168Fri, 11 Aug 2006 08:12:00 GMThttp://www.tkk7.com/software5168/archive/2006/08/11/63028.htmlhttp://www.tkk7.com/software5168/comments/63028.htmlhttp://www.tkk7.com/software5168/archive/2006/08/11/63028.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/63028.htmlhttp://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/08/11/63003.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/63003.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/11/63003.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/63003.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/63003.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-11 14:46 <a href="http://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/08/11/62998.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/62998.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/11/62998.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/62998.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/62998.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-11 14:35 <a href="http://www.tkk7.com/software5168/archive/2006/08/11/62998.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax http://www.tkk7.com/software5168/archive/2006/08/11/62945.htmlsoftware5168software5168Fri, 11 Aug 2006 03:34:00 GMThttp://www.tkk7.com/software5168/archive/2006/08/11/62945.htmlhttp://www.tkk7.com/software5168/comments/62945.htmlhttp://www.tkk7.com/software5168/archive/2006/08/11/62945.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/62945.htmlhttp://www.tkk7.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.tkk7.com/software5168/archive/2006/08/10/62822.htmlsoftware5168software5168Thu, 10 Aug 2006 09:03:00 GMThttp://www.tkk7.com/software5168/archive/2006/08/10/62822.htmlhttp://www.tkk7.com/software5168/comments/62822.htmlhttp://www.tkk7.com/software5168/archive/2006/08/10/62822.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/62822.htmlhttp://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/08/09/62569.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/62569.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/09/62569.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/62569.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/62569.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-09 15:15 <a href="http://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/08/03/61516.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/61516.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/08/03/61516.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/61516.html</wfw:commentRss><trackback:ping>http://www.tkk7.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.tkk7.com/software5168/aggbug/61516.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-08-03 15:26 <a href="http://www.tkk7.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.tkk7.com/software5168/archive/2006/07/25/60028.htmlsoftware5168software5168Tue, 25 Jul 2006 09:12:00 GMThttp://www.tkk7.com/software5168/archive/2006/07/25/60028.htmlhttp://www.tkk7.com/software5168/comments/60028.htmlhttp://www.tkk7.com/software5168/archive/2006/07/25/60028.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/60028.htmlhttp://www.tkk7.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這幾個概c(din)char 指的是一個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有兩個作用:(x)
JSP文g的編方式:(x)在讀取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也可以在獲取參怹前執行如下代|(x)
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?;
讀出:(x)String newStr = new String(oldStr.getByte(“ISO8859_1?,”GB2312?;
五、源文g的編?br />5Q? 資源文g
資源文g的編方式和R輯q盔R。在WINDOWSq_下編寫的資源文gQ以GB2312方式R碼。在R譯時需要轉|以確保在各個^Z的正性:(x)
native2ascii –encoding GB2312 source.properties
這樣從資源文件中讀出的是正確的UNICODE字符丌Ӏ?br />5Q? 源文?br />源文件的R碼方式和編輯^臺相關。在WINDOWSq_下開發的源文Ӟ以GB2312方式R碼。在R譯的時候,需要指定源文g的編方式:(x)
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.tkk7.com/software5168/archive/2006/07/12/57768.htmlsoftware5168software5168Wed, 12 Jul 2006 03:36:00 GMThttp://www.tkk7.com/software5168/archive/2006/07/12/57768.htmlhttp://www.tkk7.com/software5168/comments/57768.htmlhttp://www.tkk7.com/software5168/archive/2006/07/12/57768.html#Feedback0http://www.tkk7.com/software5168/comments/commentRss/57768.htmlhttp://www.tkk7.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.tkk7.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.tkk7.com/software5168/archive/2006/06/30/55989.html</guid><wfw:comment>http://www.tkk7.com/software5168/comments/55989.html</wfw:comment><comments>http://www.tkk7.com/software5168/archive/2006/06/30/55989.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/software5168/comments/commentRss/55989.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/software5168/services/trackbacks/55989.html</trackback:ping><description><![CDATA[Java操作Excel的一U方法?br /><br /> bromon原创 版权所?br /><br />  MS的电(sh)子表|ExcelQ是Office的重要成员,是保存统计数据的一U常用格式。作为办公文档,势必要涉?qing)到的?sh)子文档的交换QExcel是一U在企业中非帔R用的文件格式,打印和管理也比较方便。在一个Java应用中,一部分数据生成Excel格式Q是与其他系l无~连接的重要手段?br /><br />  在开源世界中Q有两套比较有媄响的API可供使用Q一个是POIQ一个是jExcelAPI。其中jExcelAPI是一个韩国程序员的作品,虽然没有POI那样血l高贵,但是在笔者的使用q程中,感觉单方便,对中文支持非常好Q功能也比较强大。可以在sourceforge.net下蝲。作者的|站上对它的特征有如下描qͼ(x)<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其中第一个工作表被命名ؓ(f)“第一”,大致效果如下Q?br /><br /> <br /><br /> 代码QCreateXLS.javaQ:(x)<br />  <br />  <div id="6611116" 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">//生成名ؓ(f)“第一”的工作表,参数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">//以及(qing)单元格内容ؓ(f)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ؓ(f)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 /> ~译执行后,?x)在当前位置产生一个Excel文g?br /><br /> 三、读取文?br /><br /> 以刚才我们创建的Excel文gZQ做一个简单的d操作Q程序代码如下:(x)<br />  <br />  <div id="1661111" 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 /> 四、修Ҏ(gu)?br /><br /> 利用jExcelAPI可以修改已有的Excel文gQ修改Excel文g的时候,除了打开文g的方式不同之外,其他操作和创建Excel是一L(fng)。下面的例子是在我们已经生成的Excel文g中添加一个工作表Q?br /><br />  <div id="1166111" 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中不涉及(qing)复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满一般的应用?br /><br /> 1、 字串格式化<br /><br /> 字符串的格式化涉?qing)到的是字体、粗l、字L(fng)元素Q这些功能主要由WritableFont和W(xu)ritableCellFormatcL负责。假设我们在生成一个含有字串的单元格时Q用如下语句,为方便叙qͼ我们为每一行命令加了编P(x)<br /><br /><br />  <div id="1116611" 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字体ؓ(f)TIMESQ字?6Q加_显C。WritableFont有非怸富的构造子Q供不同情况下用,jExcelAPI的java-doc中有详细列表Q这里不再列出?br /><br /> ②处代码使用了WritableCellFormatc,q个c非帔R要,通过它可以指定单元格的各U属性,后面的单元格格式化中?x)有更多描述?br /><br /> ③处使用了Labelcȝ构造子Q指定了字串被赋予那U格式?br /><br /> 在WritableCellFormatcMQ还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定Q?br /><br />  <div id="6666166" class="codeStyle"><ol><li><i><font color="#339900">//把水q_齐方式指定ؓ(f)居中</font></i></li><li> format1.setAlignment(jxl.format.Alignment.CENTRE); </li></ol></div><br /><br />  <div id="6611111" class="codeStyle"><ol><li><i><font color="#339900">//把垂直对齐方式指定ؓ(f)居中</font></i></li><li> format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); </li></ol></div><br /><br /> 二、单元格操作<br /><br /> Excel中很重要的一部分是对单元格的操作Q比如行高、列宽、单元格合ƈ{,所qjExcelAPI提供了这些支持。这些操作相Ҏ(gu)较简单,下面只介l一下相关的API?br /><br /> 1、 合q单元格<br /><br />  <div id="1611166" 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比如:(x)<br />  <div id="6616611" class="codeStyle"><ol><li>WritableSheet sheet=book.createSheet(“第一?0); </li></ol></div><br /><br /> //合ƈW一列第一行到W六列第一行的所有单元格<br />  <div id="6116111" class="codeStyle"><ol><li>sheet.mergeCells(0,0,5,0); </li></ol></div><br /><br /> 合ƈ既可以是横向的,也可以是U向的。合q后的单元格不能再次q行合ƈQ否则会(x)触发异常?br /><br /> 2、 行高和列宽<br /><br />  <div id="6661666" 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比如:(x)<br /><br /> //第一行的高度设ؓ(f)200<br />  <div id="1161666" 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比如:(x)<br /><br /> //第一列的宽度设ؓ(f)30<br />  <div id="1666161" 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.tkk7.com/software5168/aggbug/55989.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/software5168/" target="_blank">software5168</a> 2006-06-30 16:54 <a href="http://www.tkk7.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.tkk7.com/software5168/archive/2006/06/30/55986.htmlsoftware5168software5168Fri, 30 Jun 2006 08:51:00 GMThttp://www.tkk7.com/software5168/archive/2006/06/30/55986.htmlhttp://www.tkk7.com/software5168/comments/55986.htmlhttp://www.tkk7.com/software5168/archive/2006/06/30/55986.html#Feedback4http://www.tkk7.com/software5168/comments/commentRss/55986.htmlhttp://www.tkk7.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如下:(x)


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



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


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



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

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

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

下面是例子程序:(x)
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的记录ؓ(f):" );
            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 发表评论
]]>
վ֩ģ壺 Ʒһ| Ƶһ߲| | wwwѸƵ| Ƭ߹ۿ| ѹվ߹ۿ15| ޾Ʒھþ| ëƬ߹ۿ| ޹Ʒ߹ۿ| ҹƷ߹ۿ| ޻ɫַȫ| Ұѹۿ| avպavۺ| ѹۿɫƬ| AVպۺһ| ѹۿҹŷëƬ| Ůɫվ| ޳avѿ| һƵѸ| AVպAVþ| 999ھƷƵ| ɫרһ| ӰԺ| ƷžƷƵ| ޾ƷƷɫ | ޾ƷӰ߲Ʒ| ɫҹƵ| þavרavһ| ܻƺܻƵվѵ| ޹Ʒþþϼ1| av2018| ɫˬƵ| ޹Ƭ߹ۿ| 弶ëƬѲ| ĻƵ| ޹Ʒþþѿ| 100018ѷ˸ | һ| ޾Ʒ˾þ| AV| APPѹۿƵ|