??xml version="1.0" encoding="utf-8" standalone="yes"?>国产成人高清亚洲一区久久 ,国产成人高清亚洲一区久久,亚洲AV无码专区在线厂http://www.tkk7.com/rodney/category/2857.htmlzh-cnWed, 28 Feb 2007 18:37:14 GMTWed, 28 Feb 2007 18:37:14 GMT60JBuilder2006中的illegal character \12288错误http://www.tkk7.com/rodney/archive/2006/04/21/42264.htmlrodneyrodneyFri, 21 Apr 2006 01:37:00 GMThttp://www.tkk7.com/rodney/archive/2006/04/21/42264.htmlhttp://www.tkk7.com/rodney/comments/42264.htmlhttp://www.tkk7.com/rodney/archive/2006/04/21/42264.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/42264.htmlhttp://www.tkk7.com/rodney/services/trackbacks/42264.html我用C本打开一个以前的分页E序。把其中的一部䆾代码copy到我的现在的E序中,可是~译器提Cillegal character \12288错误。我按它提示的错误找到发生错误的行。我用别的变量名试了一下是可以的。难道是q个变量名输入时用了中文的输入法。我check一下,可是q是没有解决。我又重新声明了一个与q个变量名一L变量Q把原来的注释v来。后来发现可以了Q我再把现在的注释掉Q用原来的变量,q是不行。我把它删除掉重新写了一遍包括空g删除。OKQ就可以了。我惛_能还是有中文的输入字W或是空根{?br />

以面的问题可真是不是问题的问题,如果遇到同样的问题的朋友看看是否也是犯了同样的错?br />
最后发现是一个中文的I格Q我在删除该变量时发现有一个空格的距离较大?/p>

rodney 2006-04-21 09:37 发表评论
]]>
?lt;form action="">中的action写要执行q个表单的是哪个文g时出的错误?/title><link>http://www.tkk7.com/rodney/archive/2006/04/17/41477.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Mon, 17 Apr 2006 09:01:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2006/04/17/41477.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/41477.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2006/04/17/41477.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/41477.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/41477.html</trackback:ping><description><![CDATA[ <p> <b> <font style="BACKGROUND-COLOR: #525d76" color="#ffffff">type</font> </b> Status report</p> <p> <b> <font style="BACKGROUND-COLOR: #525d76" color="#ffffff">message</font> </b> <u>/zz3in1/SrvTest</u> </p> <p> <b> <font style="BACKGROUND-COLOR: #525d76" color="#ffffff">description</font> </b> <u>The requested resource (/zz3in1/SrvTest) is not available.<br /></u>q是Z呢?<br />用过?./../SrvTest q个是不行的?/./SrvTestq样可以。还?/SrvTest也可以?br /></p> <img src ="http://www.tkk7.com/rodney/aggbug/41477.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2006-04-17 17:01 <a href="http://www.tkk7.com/rodney/archive/2006/04/17/41477.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>取表g的单元格的数?/title><link>http://www.tkk7.com/rodney/archive/2006/04/14/41069.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Fri, 14 Apr 2006 04:49:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2006/04/14/41069.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/41069.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2006/04/14/41069.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/41069.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/41069.html</trackback:ping><description><![CDATA[用document.getElementById("01").innerHTML/innerText都可以。如Q?lt;tr><td id="01">Hello</td></tr>要把Hello取出来就可以用document.getElementById("01").innerHTML/innerText?br />但是用innerHTML与用innerText有什么区别吗Q用innerHTML会把q个标记中的所有HTML标记与值取出来。innerText只会取最后的倹{?img src ="http://www.tkk7.com/rodney/aggbug/41069.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2006-04-14 12:49 <a href="http://www.tkk7.com/rodney/archive/2006/04/14/41069.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JDK1.5的设|?/title><link>http://www.tkk7.com/rodney/archive/2006/04/11/40370.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Tue, 11 Apr 2006 01:10:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2006/04/11/40370.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/40370.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2006/04/11/40370.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/40370.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/40370.html</trackback:ping><description><![CDATA[如果你在安装oracle8iӞpȝ会自q你安装一个JDK1.1的或1.2的。然后你安装JDK1.5后,在系l环境中讄了JAVA_HOME是JDK1.5的,path中也讄了javaroot\JDK1.5\bin可是你怎么样也不能用JDK1.5中的命o。C:\Documents and Settings\Administrator>java<br />Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'<br />has value '1.1', but '1.2' is required.<br />Ҏ册表HKEY_LOCAL_MACHINE   中的SOFTWARE--JavaSoft--Java Runtime Environment--CurrentVersion的值改成了1.5<br />pȝ会提CZQC:\Documents and Settings\Administrator>java<br />Registry key 'Software\JavaSoft\Java Runtime Environment\CurrentVersion'<br />has value '1.5', but '1.2' is required.q是Z么呢Q因你的pȝ中安装了旧的版本JDKQ而且有程序程序有使用到它。这时你只要在当前的用户pȝ环境下设|一个JAVA_HOMEQ可以不要)q且在系l环境的path的最前面加上javaroot\jdk1.5\bin。这样就OK了。你可以把DOSH口关闭再开启。WINDOWS2K不要重启计算机。WINDOWS98的要重启?img src ="http://www.tkk7.com/rodney/aggbug/40370.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2006-04-11 09:10 <a href="http://www.tkk7.com/rodney/archive/2006/04/11/40370.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>document对象详解http://www.tkk7.com/rodney/archive/2006/04/10/40231.htmlrodneyrodneyMon, 10 Apr 2006 06:07:00 GMThttp://www.tkk7.com/rodney/archive/2006/04/10/40231.htmlhttp://www.tkk7.com/rodney/comments/40231.htmlhttp://www.tkk7.com/rodney/archive/2006/04/10/40231.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/40231.htmlhttp://www.tkk7.com/rodney/services/trackbacks/40231.html 以下信息是{?a >http://www.aaunion.net/cn/blog/more.asp?name=magicmao&id=687
document
文挡对象 - JavaScript脚本语言描述

---------------------------------------------------------------------

?span lang="EN-US">:面上元?span lang="EN-US">name属性和JavaScript引用的名U必M致包括大写

   否则会提CZ一个错误信?span lang="EN-US"> "引用的元素ؓI或者不是对?span lang="EN-US">"

---------------------------------------------------------------------

 

对象属?span lang="EN-US">

document.title             // 讄文标题{h?span lang="EN-US">HTML?span lang="EN-US"><title>标签

document.bgColor           // 讄面背景?span lang="EN-US">

document.fgColor           // 讄前景?span lang="EN-US">(文本颜色)

document.linkColor         // 未点击过的链接颜?span lang="EN-US">

document.alinkColor        // Ȁz链?span lang="EN-US">(焦点在此链接?span lang="EN-US">)的颜?span lang="EN-US">

document.vlinkColor        // 已点击过的链接颜?span lang="EN-US">

document.URL               // URL属性从而在同一H口打开另一|页

document.fileCreatedDate   // 文g建立日期Q只d?span lang="EN-US">

document.fileModifiedDate  // 文g修改日期Q只d?span lang="EN-US">

document.fileSize          // 文g大小Q只d?span lang="EN-US">

document.cookie            // 讄和读?span lang="EN-US">cookie

document.charset           // 讄字符?体中?span lang="EN-US">:gb2312

---------------------------------------------------------------------

对象Ҏ

document.write()                  // 动态向面写入内容

document.createElement(Tag)       // 创徏一?span lang="EN-US">html标签对象

document.getElementById(ID)       // 获得指定ID值的对象

document.getElementsByName(Name)  // 获得指定Name值的对象

---------------------------------------------------------------------

 

images 集合(面中的图象)

 

a) 通过集合引用

document.images             // 对应面上的<img>标签

document.images.length      // 对应面?span lang="EN-US"><img>标签的个?span lang="EN-US">

document.images[0]          // W?span lang="EN-US">1?span lang="EN-US"><img>标签

document.images[i]          // W?span lang="EN-US">i-1?span lang="EN-US"><img>标签

 

b) 通过nane属性直接引?span lang="EN-US">

<img name="oImage">

document.images.oImage      //document.images.name 属?span lang="EN-US">

 

c) 引用囄?span lang="EN-US">src属?span lang="EN-US">

document.images.oImage.src  //document.images.name 属?span lang="EN-US">.src

 

d) 创徏一个图?span lang="EN-US">

var oImage

oImage = new Image()

document.images.oImage.src="/1.jpg"

// 同时在页面上建立一?span lang="EN-US"><img>标签与之对应可以显C?span lang="EN-US">

 

<html>

<img name=oImage>

<script language="javascript">

   var oImage

   oImage = new Image()

   document.images.oImage.src="/1.jpg"

</script>

</html>

 

----------------------------------------------------------------------

 

forms 集合(面中的表单)

 

a) 通过集合引用

document.forms                 // 对应面上的<form>标签

document.forms.length          // 对应面?span lang="EN-US"><form>标签的个?span lang="EN-US">

document.forms[0]              // W?span lang="EN-US">1?span lang="EN-US"><form>标签

document.forms[i]              // W?span lang="EN-US">i-1?span lang="EN-US"><form>标签

document.forms[i].length       // W?span lang="EN-US">i-1?span lang="EN-US"><form>中的控g?span lang="EN-US">

document.forms[i].elements[j]  // W?span lang="EN-US">i-1?span lang="EN-US"><form>中第j-1个控?span lang="EN-US">

 

b) 通过标签name属性直接引?span lang="EN-US">

<form name="Myform"><input name="myctrl"></form>

document.Myform.myctrl         //document. 表单?span lang="EN-US">.控g?span lang="EN-US">

 

-----------------------------------------------------------------------

<html>

<!--Text 控g相关Script-->

<form name="Myform">

<input type="text" name="oText">

<input type="password" name="oPswd">

<form>

<script language="javascript">

// 获取文本密码框的?span lang="EN-US">

document.write(document.Myform.oText.value)

document.write(document.Myform.oPswd.value)

</script>

</html>

-----------------------------------------------------------------------

<html>

<!--Select 控g相关Script-->

<form name="Myform">

<select name="oSelect">

<option value="1">1</option>

<option value="2">2</option>

<option value="3">3</option>

</select>

</form>

 

<script language="javascript">

   // 遍历select控g?span lang="EN-US">option?span lang="EN-US">

   var length

   length=document.Myform.oSelect.length

   for(i=0;i<length;i++)

   document.write(document.Myform.oSelect[i].value)

</script>

 

<script language="javascript">

   // 遍历optionƈ且判断某?span lang="EN-US">option是否被选中

   for(i=0;i<document.Myform.oSelect.length;i++){

   if(document.Myform.oSelect[i].selected!=true)

    document.write(document.Myform.oSelect[i].value)

   else

   document.write("<font color=red>"+document.Myform.oSelect[i].value+"</font>")  

   }

</script>

 

<script language="javascript">

   // ҎSelectedIndex打印出选中?span lang="EN-US">option

   //(0 ?span lang="EN-US">document.Myform.oSelect.length-1)

   i=document.Myform.oSelect.selectedIndex

   document.write(document.Myform.oSelect[i].value)

</script>

 

<script language="javascript">

   // 动态增?span lang="EN-US">select控g?span lang="EN-US">option?span lang="EN-US">

   var oOption = document.createElement("OPTION");

   oOption.text="4";

   oOption.value="4";

   document.Myform.oSelect.add(oOption);

</script>

<html>

-----------------------------------------------------------------------

<Div id="oDiv">Text</Div>

document.all.oDiv                       // 引用囑ֱoDiv

document.all.oDiv.style                

document.all.oDiv.style.display=""      // 囑ֱ讄为可?span lang="EN-US">

document.all.oDiv.style.display="none"  // 囑ֱ讄为隐?span lang="EN-US">

/*document.all 表示document中所有对象的集合

只有ie支持此属性,因此也用来判断浏览器的种c?span lang="EN-US">*/

-----------------------------------------------------------------------



rodney 2006-04-10 14:07 发表评论
]]>
java.sql.SQLExcetion 错误的URLhttp://www.tkk7.com/rodney/archive/2006/04/05/39330.htmlrodneyrodneyWed, 05 Apr 2006 04:02:00 GMThttp://www.tkk7.com/rodney/archive/2006/04/05/39330.htmlhttp://www.tkk7.com/rodney/comments/39330.htmlhttp://www.tkk7.com/rodney/archive/2006/04/05/39330.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/39330.htmlhttp://www.tkk7.com/rodney/services/trackbacks/39330.html

rodney 2006-04-05 12:02 发表评论
]]>
JDBCq接8U数据库的写?/title><link>http://www.tkk7.com/rodney/archive/2006/04/04/39165.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Tue, 04 Apr 2006 06:36:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2006/04/04/39165.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/39165.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2006/04/04/39165.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/39165.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/39165.html</trackback:ping><description><![CDATA[如果下面的连接有出现class没有扑ֈ的异常,有可能是没有加裁到驱动程序,q有一U是驱动不对?br />1、Oracle8/8i/9i数据库(thin模式Q?<br />Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); <br />String url="jdbc:oracle:thin:@localhost:1521:rcl"; //orcl为数据库的SID <br />String user="test"; <br />String password="test"; <br />Connection conn= DriverManager.getConnection(url,user,password);<br /><br />2、DB2数据?<br /><br />Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance(); <br />String url="jdbc:db2://localhost:5000/sample"; //sampleZ的数据库?<br />String user="admin"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password);<br /><br />3、Sql Server7.0/2000数据?<br /><br />Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); <br />String url="jdbc:microsoft:sqlserver://lin56:1433;DatabaseName=pubs"; <br />//mydb为数据库 <br />String user="sa"; <br />String password=""; <br />Connection conn= DriverManager.getConnection(url,user,password);<br /><br />4、Sybase数据?<br /><br />Class.forName("com.sybase.jdbc.SybDriver").newInstance(); <br />String url =" jdbcybase:Tds:localhost:5007/myDB";//myDBZ的数据库?<br />Properties sysProps = System.getProperties(); <br />SysProps.put("user","userid"); <br />SysProps.put("password","user_password"); <br />Connection conn= DriverManager.getConnection(url, SysProps);<br />5、Informix数据?<br /><br /><br />Class.forName("com.informix.jdbc.IfxDriver").newInstance(); <br />String url = "jdbc:informix-sqli://123.45.67.89:1533/myDB:INFORMIXSERVER=myserver; <br />user=testuser;password=testpassword"; //myDB为数据库?<br />Connection conn= DriverManager.getConnection(url);<br /><br />6、MySQL数据?<br /><br />Class.forName("org.gjt.mm.mysql.Driver").newInstance(); <br />String url ="jdbc:mysql://localhost/myDB?user=soft&password=soft1234&useUnicode=true&characterEncoding=8859_1" <br />//myDB为数据库?<br />Connection conn= DriverManager.getConnection(url);<br /><br />7、PostgreSQL数据?<br /><br />Class.forName("org.postgresql.Driver").newInstance(); <br />String url ="jdbcostgresql://localhost/myDB" //myDB为数据库?<br />String user="myuser"; <br />String password="mypassword"; <br />Connection conn= DriverManager.getConnection(url,user,password);<br /><br />8、access数据库直q用ODBC?br />Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;<br />String url="jdbcdbc:Driver={MicroSoft Access Driver (*.mdb)};DBQ="+application.getRealPath("/Data/ReportDemo.mdb");<br />Connection conn = DriverManager.getConnection(url,"","");<br />Statement stmtNew=conn.createStatement() ;<br /><p><b>二、JDBCq接MySql方式</b><br />  下面是用JDBCq接MySql的一个小的教E?br /><br />1、查N动程?<br />  MySQL目前提供的java驱动E序为Connection/JQ可以从MySQL官方|站下蝲Qƈ扑ֈmysql-connector-java-3.0.15-ga-bin.jar文gQ此驱动E序为纯java驱动E序Q不需做其他配|?br /><br />2、动态指定classpath<br />  如果需要执行时动态指定classpathQ就在执行时采用Qcp方式。否则将上面?jar文g加入到classpath环境变量中?br /><br />3、加载驱动程?/p><pre class="code">try{  Class.forName(com.mysql.jdbc.Driver);  System.out.println(Success loading Mysql Driver!); }catch(Exception e) {  System.out.println(Error loading Mysql Driver!);  e.printStackTrace(); } </pre><p><br />4、设|连接的url<br />jdbcQmysqlQ?/localhost/databasename[?pa=va][Qpa=va] <br /></p><p><b>三、以下列Z在用JDBC来连接Oracle数据库时可以使用的一些技?/b><br />1、在客户端Y件开发中使用Thin驱动E序<br />  在开发Java软g斚wQOracle的数据库提供了四U类型的驱动E序Q二U用于应用Y件、applets、servlets{客L软gQ另外二U用于数据库中的Java存储q程{服务器端Y件。在客户机端软g的开发中Q我们可以选择OCI驱动E序或Thin驱动E序。OCI驱动E序利用Java本地化接口(JNIQ,通过Oracle客户端Y件与数据库进行通讯。Thin驱动E序是纯Java驱动E序Q它直接与数据库q行通讯。ؓ了获得最高的性能QOracle在客L软g的开发中使用OCI驱动E序Q这g是正的。但我徏议用Thin驱动E序Q因为通过多次试发现Q在通常情况下, Thin驱动E序的性能都超q了OCI驱动E序?br /><br />2、关闭自动提交功能,提高pȝ性能 <br />   在第一ơ徏立与数据库的q接Ӟ在缺省情况下Q连接是在自动提交模式下的。ؓ了获得更好的性能Q可以通过调用带布值false参数的ConnectioncȝsetAutoCommit()Ҏ关闭自动提交功能Q如下所C:<br /><br />conn.setAutoCommit(false);</p><p>  值得注意的是Q一旦关闭了自动提交功能Q我们就需要通过调用Connectioncȝcommit()和rollback()Ҏ来h工的方式对事务进行管理?br /><br />3、在动态SQL或有旉限制的命令中使用Statement对象 <br />  在执行SQL命oӞ我们有二U选择Q可以用PreparedStatement对象Q也可以使用Statement对象。无论多次C用同一?SQL命oQPreparedStatement都只对它解析和编译一ơ。当使用Statement对象Ӟ每次执行一个SQL命oӞ都会对它q行解析和编译。这可能会你认为,使用PreparedStatement对象比用Statement对象的速度更快。然而,我进行的试表明Q在客户端Y件中Q情况ƈ非如此。因此,在有旉限制的SQL操作中,除非成批地处理SQL命oQ我们应当考虑使用Statement对象?br /><br />   此外Q用Statement对象也得编写动态SQL命o更加单,因ؓ我们可以字W串q接在一P建立一个有效的SQL命o。因此,我认为,Statement对象可以使动态SQL命o的创建和执行变得更加单?br /><br />4、利用helper函数对动态SQL命oq行格式?<br />  在创Z用Statement对象执行的动态SQL命oӞ我们需要处理一些格式化斚w的问题。例如,如果我们惛_Z个将名字O'Reilly插入表中的SQL命oQ则必须使用二个相连的?'”号替换O'Reilly中的?”号。完成这些工作的最好的Ҏ是创Z个完成替换操作的helperҎQ然后在q接字符串心服用公式表达一个SQL命oӞ使用创徏的helperҎ。与此类似的是,我们可以让helperҎ接受一个Date型的|然后让它输出ZOracle的to_date()函数的字W串表达式?br /><br />5、利用PreparedStatement对象提高数据库的M效率 <br />  在用PreparedStatement对象执行SQL命oӞ命o被数据库q行解析和编译,然后被放到命令缓冲区。然后,每当执行同一?PreparedStatement对象Ӟ它就会被再解析一ơ,但不会被再次~译。在~冲Z可以发现预编译的命oQƈ且可以重C用。在有大量用L企业U应用Y件中Q经怼重复执行相同的SQL命oQ用PreparedStatement对象带来的编译次数的减少能够提高数据库的M性能。如果不是在客户端创建、预备、执行PreparedStatementd需要的旉长于StatementdQ我会徏议在除动态SQL命o之外的所有情况下使用PreparedStatement对象?br /><br />6、在成批处理重复的插入或更新操作中用PreparedStatement对象 <br />  如果成批地处理插入和更新操作Q就能够显著地减它们所需要的旉。Oracle提供的Statement?CallableStatementq不真正地支持批处理Q只有PreparedStatement对象才真正地支持批处理。我们可以?addBatch()和executeBatch()Ҏ选择标准的JDBC批处理,或者通过利用PreparedStatement对象?setExecuteBatch()Ҏ和标准的executeUpdate()Ҏ选择速度更快的Oracle专有的方法。要使用Oracle专有的批处理机制Q可以以如下所C的方式调用setExecuteBatch()Q?br /></p><pre class="code">PreparedStatement pstmt3D null; try {  ((OraclePreparedStatement)pstmt).setExecuteBatch(30);  ...  pstmt.executeUpdate(); }</pre>    调用setExecuteBatch()时指定的值是一个上限,当达到该值时Q就会自动地引发SQL命o执行Q标准的executeUpdate()Ҏ׃被作为批处理送到数据库中。我们可以通过调用PreparedStatementcȝsendBatch()Ҏ随时传输批处理Q务?br />  <br />7、用Oracle locatorҎ插入、更新大对象QLOBQ?<br />  Oracle的PreparedStatementcM完全支持BLOB和CLOB{大对象的处理,其是Thin驱动E序不支持利?PreparedStatement对象的setObject()和setBinaryStream()Ҏ讄BLOB的|也不支持利用 setCharacterStream()Ҏ讄CLOB的倹{只有locator本n中的Ҏ才能够从数据库中获取LOBcd的倹{可以?PreparedStatement对象插入或更新LOBQ但需要用locator才能获取LOB的倹{由于存在这二个问题Q因此,我徏议?locator的方法来插入、更新或获取LOB的倹{?br /><br />8、用SQL92语法调用存储q程 <br />  在调用存储过E时Q我们可以用SQL92或Oracle PL/SQLQ由于用Oracle PL/SQLq没有什么实际的好处Q而且会给以后l护你的应用E序的开发h员带来麻烦,因此Q我在调用存储过E时使用SQL92?br /><br />9、用Object SQL对象模式{Ud数据库中 <br />  既然可以Oracle的数据库作ؓ一U面向对象的数据库来使用Q就可以考虑应用程序中的面向对象模式{到数据库中。目前的Ҏ是创建Java bean作ؓ伪装的数据库对象Q将它们的属性映到关系表中Q然后在q些bean中添加方法。尽这样作在Java中没有什么问题,但由于操作都是在数据库之外进行的Q因此其他访问数据库的应用Y件无法利用对象模式。如果利用Oracle的面向对象的技术,可以通过创徏一个新的数据库对象cd在数据库中模仿其数据和操作,然后使用JPublisher{工L成自qJava beancR如果用这U方式,不但Java应用E序可以使用应用软g的对象模式,其他需要共享你的应用中的数据和操作的应用Y件也可以使用应用软g中的对象模式?br /><br />10、利用SQL完成数据库内的操?<br />  我要向大家介l的最重要的经验是充分利用SQL的面向集合的Ҏ来解x据库处理需求,而不是用Java{过E化的编E语a?br /><br />  如果~程人员要在一个表中查找许多行Q结果中的每个行都会查找其他表中的数据,最后,~程人员创徏了独立的UPDATE命o来成批地更新W一个表中的数据。与此类似的d可以通过在set子句中用多列子查询而在一个UPDATE命o中完成。当能够在单一的SQL命o中完成Q务,何必要让数据在网上流来流ȝQ我用户认真学习如何最大限度地发挥SQL的功能? <p></p>    <p><b>ORACLE 数据库备份技?br /></b>  ORACLE数据库是一U大型关pd的数据库Q可以存贮达到存贮TB的数据,那么如何保证q些数据的安全尤其至关重要,我们?991q开始?ORACLE数据库,通过q些q的使用Q我们制定了一整套的ORACLE数据库的备䆾制度。现在把我们的备份制度介l给大家Q供大家参考?/p><p><b>Q?Ҏ实际需要决定数据库的运行方?/b><br />ORACLE数据库有两种q行方式Q一是归方式(ARCHIVELOGQ,归方式的目的是当数据库发生故障时最大限度恢复所有已提交的事物;二是不归方?NOARCHIVELOG)Q恢复数据库到最q的回收炏V我们根据数据库的高可用性和用户可承受丢q工作量的多少Q把我们正式q行的数据库采用为归档方式;那些正在开发和调试的数据库采用不归档方式?/p><p><b>Q如何改变数据库的运行方?/b><br /><b>Q?1在创建数据库时设|数据库的运行的方式</b><br />  在创建数据库Ӟ作ؓ创徏数据库的一部分Q就军_了数据库初始的存方式。一般情况下为NOARCHIVELOG方式。当数据库创建好以后Q根据我们的需要把需要运行在归方式的数据库ҎARCHIVELOG方式?br />  <br /><b>Q?2改变不归方式ؓ为归方?/b><br />  关闭数据库,备䆾已有的数?br />  改变数据库的q行方式是对数据库的重要改动Q所以要Ҏ据库做备份,对可能出现的问题作出保护?br />  启动Instance ,Mount数据库但不打开数据库,来改变归方?br /><br />  sqldba lmode=yQsvrmgrlQ?br />  sqldba>connect internal <br />  sqldba>startup mount <br />  sqldba>alter database archivelog; <br /><br />  使能自动存档<br />  在初始化文ginit*.ora(一般放ORACLE根目录的下层目录dbs?加参敎ͼ<br />  log_archive_start=true <br />  指定存档的重做登录文件名和存攄位置<br />  同样是在初始化文件init*.ora中加入下面的参数Q?br />  log_archive_format=%S.arc <br />  log_archive_dest=/arch12/arch (arch12 是日志文件存攄目录) <br />  关闭数据库,重新启动数据库,归档方式转换完成?/p><p><b>Q回收制?/b><br /><b>Q?1</b>Ҏ数据库的q行方式和可承受丢失的工作量来决定数据库的回收制度对于不归方式Q我们用的是ORACLE数据库的逻辑备䆾Export Q回收的制度是:一个月作一ơ全备䆾(x01.dmp)Q一周作一ơ篏U备?c*.dmp)Q一天一ơ增量备?I*.dmp)Q具体的是星期一到星期五作增量备份,星期六做累积备䆾或全备䆾Q每ơ做完备份后自动传到其它的机器上存储。这些备份都是自动执行的,后面l出E序文本?br /><br />  对于归方式Q我们用的是ORCALE的物理备份:当数据库创徏好以后,做一ơ物理上的全备䆾Q^时在不关闭数据库的前提下Q一个星期对l常改变的数据文件做联机的数据库数据文g的物理备份;当数据库的结构发生改变,如:增加表空_加数据文件等Q如允许xQ正常关闭数据库Q重新做数据库全备䆾Q否则,备䆾控制文gQ备份数据文件照常。联机的日志文g我们是写在阵列上的,不用镜象和备份?/p><p><b>Q?2回收的方?/b><br /><b>Q?2.1不归方?/b><br />   我们拿曙光AIX操作pȝZ,来讲解以下如何做自动备䆾Q?br />---- a.首先建UNIX用户 demo/demo <br />---- b.拯oracle用户下的 .profile ?demo 用户下,以保?demo 用户可以?Export命o<br />---- c.用root用户dQ编?/var/adm/cron/cron.allow 加入用户名demo,q样demo用户有权自动执行数据库备䆾的shellE序Q?br />---- d.创徏数据库备份程序,攑ֈ本用L下层目录bin下,q且q些文g要有可执行权文gzlbf1:(增量备䆾1Q星期一执行的程? <br /></p><pre class="code">. /u11/demo/.profile exp system/manager inctype=INCREMENTAL file=i01.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put i01.dmp close bye ! 文gzlbf2:(增量备䆾2, 星期二执行的E序) . /u11/demo/.profile exp system/manager inctype=INCREMENTAL file=i02.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put i02.dmp close bye ! 文gzlbf3:(增量备䆾3, 星期三执行的E序) . /u11/demo/.profile exp system/manager inctype=INCREMENTAL file=i03.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put i03.dmp close bye ! 文gzlbf4:(增量备䆾4, 星期四执行的E序) . /u11/demo/.profile exp system/manager inctype=INCREMENTAL file=i04.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put i04.dmp close bye ! 文gzlbf5:(增量备䆾5, 星期五执行的E序) . /u11/demo/.profile exp system/manager inctype=INCREMENTAL file=i05.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put i05.dmp close bye ! 文gzlbf6:(增量备䆾6, 星期六执行的E序) . /u11/demo/.profile js=`ls c*.dmp|wc -l` if test = 0 then exp system/manager inctype=CUMULATIVE file=c01.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put c01.dmp close bye ! fi if test = 1 then exp system/manger inctype=CUMULATIVE file=c02.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put c02.dmp close bye ! fi if test = 2 then exp system/maneger inctype=CUMULATIVE file=c03.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put c03.dmp close bye ! fi if test = 3 then exp system/manager inctype=COMPLETE file=x01.dmp ftp -n< < ! open 10.10.10.40 user demo demo binary prompt cd backup40 put x01.dmp close bye ! rm c*.dmp fi ---- e.在demo 用户下徏一个文Ӟ假如?cron.demo,文g内容如下 59 22 * * 1 bin/zlbf1 59 22 * * 2 bin/zlbf2 59 22 * * 3 bin/zlbf3 59 22 * * 4 bin/zlbf4 59 22 * * 5 bin/zlbf5 59 22 * * 6 bin/zlbf6 </pre><p>---- f.在demo用户下执行下面的命oQ?br />crontab cron.demo 执行的结果放?br />/var/spool/cron/crontabs/demo文g?/p><p>---- g.重新启动cron q程Q命令:kill -1 q程?br />---- h.执行l果攑֜本用L邮g?br />---- i.查看l果是否执行Q请?/var/adm/cron/log文g<br /><br /><b>Q?2.2归档方式</b><br />---- a. 扑ֈ要回收的数据文g、联机重做登录文件、控制文件和参数文g<br />---- b. 正常关闭数据库,作一ơ全回收(用操作系l的TAR命oQ可以写成shellE序)Q然后打开数据库供正常使用,shellE序如下Q?br />tar cvf /dev/rmt/ctape2 /u1/oracle/dbs/ctrl1ora7.ctl <br />/u1/oracle/dbs/ctrl2ora7.ctl <br />/u1/oracle/dbs/ctrl3ora7.ctl <br />/u1/oracle/dbs/systora7.dbf <br />/u1/oracle/dbs/rbsora7.dbf <br />/u1/oracle/dbs/tempora7.dbf <br />/u1/oracle/dbs/toolora7.dbf <br />/u1/oracle/dbs/usrora7.dbf <br />/ls1/ls1.dbf <br />/u1/oracle/dbs/log1ora7.dbf <br />/u1/oracle/dbs/log2ora7.dbf <br />/u1/oracle/dbs/log3ora7.dbf <br />---- ? l常作联机的表空间和数据文g的部分回?br />首先标记联机表空间回收的开?br />alter tablespace 表空间名 begin backup; <br />用操作系l命令备份数据文?br />最后标记联机的表空间回收结?br />alter tablespace 表空间名 end backup <br />---- 多个表空间可以一起做标记Q备份做标记的所有数据文件后Q一h记结束?br />---- d. 当数据库l构发生改变后,要对它的控制文g做回?br />sqldba >alter database backup <br />controlfile to ’文件名?reuse;   </p><p><b>数据库设计中?4个技?br /></b><b>1. 原始单据与实体之间的关系</b><br />  可以是一对一、一对多、多对多的关pR在一般情况下Q它们是一对一的关p:即一张原始单据对应且只对应一个实体。在Ҏ情况下,它们可能是一对多或多对一的关p,即一张原始单证对应多个实体,或多张原始单证对应一个实体。这里的实体可以理解为基本表。明这U对应关pdQ对我们设计录入界面大有好处?br />  〖例1〗:一份员工历资料,在h力资源信息系l中Q就对应三个基本表:员工基本情况表、社会关p表、工作简历表。这是“一张原始单证对应多个实体”的典型例子?br /><br /><b>2. 主键与外?/b><br />  一般而言Q一个实体不能既无主键又无外键。在E—R 图中, 处于叶子部位的实? 可以定义主键Q也可以不定义主?因ؓ它无子孙), 但必要有外?因ؓ它有父亲)?br />  主键与外键的设计Q在全局数据库的设计中,占有重要C。当全局数据库的设计完成以后Q有个美国数据库设计专家_“键Q到处都是键Q除了键之外Q什么也没有”,q就是他的数据库设计l验之谈Q也反映了他对信息系l核?数据模型)的高度抽象思想。因为:主键是实体的高度抽象Q主键与外键的配对,表示实体之间的连接?br /><br /><b>3. 基本表的性质</b><br />  基本表与中间表、时表不同Q因为它h如下四个Ҏ:<br />  (1) 原子性。基本表中的字段是不可再分解的?br />  (2) 原始性。基本表中的记录是原始数据(基础数据Q的记录?br />  (3) 演绎性。由基本表与代码表中的数据,可以z出所有的输出数据?br />  (4) E_性。基本表的结构是相对E_的,表中的记录是要长期保存的?br />   理解基本表的性质后,在设计数据库Ӟp基本表与中间表、时表区分开来?br /><br /><b>4. 范式标准</b><br />  基本表及其字D之间的关系, 应尽量满第三范式。但是,满W三范式的数据库设计Q往往不是最好的设计。ؓ了提高数据库的运行效率,常常需要降低范式标准:适当增加冗余Q达CI间换时间的目的?br />  〖例2〗:有一张存攑֕品的基本表,如表1所C。“金额”这个字D늚存在Q表明该表的设计不满第三范式,因ؓ“金额”可以由“单价”乘以“数量”得刎ͼ说明“金额”是冗余字段。但是,增加“金额”这个冗余字D,可以提高查询l计的速度Q这是以空间换旉的作法?br />  在Rose 2002中,规定列有两种cdQ数据列和计列。“金额”这L列被UCؓ“计列”,而“单价”和“数量”这L列被UCؓ“数据列”?br />  ? 商品表的表结?br />  商品名称商品型号单h数量金额<br />  电视?29?2,500 40 100,000<br /><br /><b>5. 通俗地理解三个范?/b><br />  通俗地理解三个范式,对于数据库设计大有好处。在数据库设计中Qؓ了更好地应用三个范式Q就必须通俗地理解三个范?通俗地理解是够用的理解,q不是最U学最准确的理?Q?br />  W一范式Q?NF是对属性的原子性约束,要求属性具有原子性,不可再分解;<br />  W二范式Q?NF是对记录的惟一性约束,要求记录有惟一标识Q即实体的惟一性;<br />  W三范式Q?NF是对字段冗余性的U束Q即M字段不能由其他字D|生出来,它要求字D|有冗余?br />  没有冗余的数据库设计可以做到。但是,没有冗余的数据库未必是最好的数据库,有时Z提高q行效率Q就必须降低范式标准Q适当保留冗余数据。具体做法是Q在概念数据模型设计旉守第三范式,降低范式标准的工作放到物理数据模型设计时考虑。降低范式就是增加字D,允许冗余?br /><br /><b>6. 要善于识别与正确处理多对多的关系</b><br />  若两个实体之间存在多对多的关p,则应消除q种关系。消除的办法是,在两者之间增加第三个实体。这P原来一个多对多的关p,现在变ؓ两个一对多的关pR要原来两个实体的属性合理地分配C个实体中厅R这里的W三个实体,实质上是一个较复杂的关p,它对应一张基本表。一般来Ԍ数据库设计工具不能识别多对多的关p,但能处理多对多的关系?br />  〖例3〗:在“图书馆信息pȝ”中Q“图书”是一个实体,“读者”也是一个实体。这两个实体之间的关p,是一个典型的多对多关p:一本图书在不同旉可以被多个读者借阅Q一个读者又可以借多本图书。ؓ此,要在二者之间增加第三个实体Q该实体取名为“借还书”,它的属性ؓQ借还旉、借还标志(0表示借书Q?表示q书)Q另外,它还应该有两个外?“图书”的主键Q“读者”的主键)Q它能与“图书”和 “读者”连接?br /><br /><b>7. 主键PK的取值方?/b><br />  PK是供E序员用的表间q接工具Q可以是一无物理意义的数字? q序自动加1来实现。也可以是有物理意义的字D名或字D名的组合。不q前者比后者好。当PK是字D名的组合时Q徏议字D늚个数不要太多Q多了不但烦引占用空间大Q而且速度也慢?br /><br /><b>8. 正确认识数据冗余</b><br />  主键与外键在多表中的重复出现, 不属于数据冗余,q个概念必须清楚Q事实上有许多hq不清楚。非键字D늚重复出现, 才是数据冗余Q而且是一U低U冗余,即重复性的冗余。高U冗余不是字D늚重复出现Q而是字段的派生出现?br />  〖例4〗:商品中的“单仗数量、金额”三个字D,“金额”就是由“单价”乘以“数量”派生出来的Q它是冗余Q而且是一U高U冗余。冗余的目的是ؓ了提高处理速度。只有低U冗余才会增加数据的不一致性,因ؓ同一数据Q可能从不同旉、地炏V角色上多次录入。因此,我们提倡高U冗?z性冗?Q反对低U冗?重复性冗??br /><br /><b>9. E--R图没有标准答?/b><br />  信息pȝ的E--R图没有标准答案,因ؓ它的设计与画法不是惟一的,只要它覆盖了pȝ需求的业务范围和功能内容,是可行的。反之要修改E--R图。尽它没有惟一的标准答案,q不意味着可以随意设计。好的E—R囄标准是:l构清晰、关联简z、实体个数适中、属性分配合理、没有低U冗余?br /><br /><b>10. 视图技术在数据库设计中很有?/b><br />  与基本表、代码表、中间表不同Q视图是一U虚表,它依赖数据源的实表而存在。视图是供程序员使用数据库的一个窗口,是基表数据综合的一UŞ? 是数据处理的一U方法,是用h据保密的一U手Dcؓ了进行复杂处理、提高运速度和节省存储空? 视图的定义深度一般不得超q三层。若三层视图仍不够用, 则应在视图上定义临时? 在时表上再定义视图。这样反复交q定? 视图的深度就不受限制了?br />  对于某些与国家政沅R经、技术、军事和安全利益有关的信息系l,视图的作用更加重要。这些系l的基本表完成物理设计之后,立即在基本表上徏立第一层视图,q层视图的个数和l构Q与基本表的个数和结构是完全相同。ƈ且规定,所有的E序员,一律只准在视图上操作。只有数据库理员,带着多个人员共同掌握的“安全钥匙”,才能直接在基本表上操作。请读者想惻Iq是Z么?<br /><br /><b>11. 中间表、报表和临时?/b><br />  中间表是存放l计数据的表Q它是ؓ数据仓库、输出报表或查询l果而设计的Q有时它没有主键与外?数据仓库除外)。时表是程序员个h设计的,存放临时记录Qؓ个h所用。基表和中间表由DBAl护Q时表q序员自己用程序自动维护?br /><br /><b>12. 完整性约束表现在三个斚w</b><br />  域的完整性:用Check来实现约束,在数据库设计工具中,对字D늚取D围进行定义时Q有一个Check按钮Q通过它定义字D늚值城?br />  参照完整性:用PK、FK、表U触发器来实现?br />  用户定义完整性:它是一些业务规则,用存储过E和触发器来实现?br /><br /><b>13. 防止数据库设计打补丁的方法是“三原则?/b><br />  (1) 一个数据库中表的个数越越好。只有表的个数少了,才能说明pȝ的E--R囑ְ而精Q去掉了重复的多余的实体QŞ成了对客观世界的高度抽象Q进行了pȝ的数据集成,防止了打补丁式的设计Q?br />  (2) 一个表中组合主键的字段个数少好。因Z键的作用Q一是徏主键索引Q二是做为子表的外键Q所以组合主键的字段个数了Q不仅节省了q行旉Q而且节省了烦引存储空_<br />  (3) 一个表中的字段个数少好。只有字D늚个数了Q才能说明在pȝ中不存在数据重复Q且很少有数据冗余,更重要的是督促读者学会“列变行”,q样防止了子表中的字D|入到主表中去Q在主表中留下许多空余的字段。所谓“列变行”,是主表中的一部分内容拉出去,另外单独Z个子表。这个方法很单,有的人就是不习惯、不采纳、不执行?br />  数据库设计的实用原则是:在数据冗余和处理速度之间扑ֈ合适的q炏V“三”是一个整体概念,l合观点Q不能孤立某一个原则。该原则是相对的Q不是绝对的。“三多”原则肯定是错误的。试惻I若覆盖系l同L功能Q一百个实体(׃千个属? 的E--R图,肯定比二百个实体(׃千个属? 的E--R图,要好得多?br />  提倡“三”原则,是叫读者学会利用数据库设计技术进行系l的数据集成。数据集成的步骤是将文gpȝ集成为应用数据库Q将应用数据库集成ؓ主题数据库,主题数据库集成为全局l合数据库。集成的E度高Q数据共享性就强Q信息孤岛现象就少Q整个企业信息系l的全局E—R图中实体的个数、主键的个数、属性的个数׃少?br />  提倡“三”原则的目的Q是防止读者利用打补丁技术,不断地对数据库进行增删改Q企业数据库变成了随意设计数据库表的“垃圑֠”,或数据库表的“大杂院”,最后造成数据库中的基本表、代码表、中间表、时表杂ؕ无章Q不计其敎ͼD企事业单位的信息pȝ无法l护而瘫痪?br />  “三多”原则Q何h都可以做刎ͼ该原则是“打补丁Ҏ”设计数据库的歪理学说。“三”原则是而精的原则,它要求有较高的数据库设计技巧与艺术Q不是Q何h都能做到的,因ؓ该原则是杜绝用“打补丁Ҏ”设计数据库的理Z据?br /><br /><b>14. 提高数据库运行效率的办法</b><br />  在给定的pȝg和系lY件条件下Q提高数据库pȝ的运行效率的办法是:<br />  (1) 在数据库物理设计Ӟ降低范式Q增加冗? 用触发? 多用存储q程?br />  (2) 当计非常复杂、而且记录条数非常巨大?例如一千万?Q复杂计要先在数据库外面,以文件系l方式用C++语言计算处理完成之后Q最后才入库q加到表中去。这是电信计费系l设计的l验?br />  (3) 发现某个表的记录太多Q例如超q一千万条,则要对该表进行水q_剌Ӏ水q_割的做法是,以该表主键PK的某个gؓ界线Q将该表的记录水q_割ؓ两个表。若发现某个表的字段太多Q例如超q八十个Q则垂直分割该表Q将原来的一个表分解Z个表?br />  (4) Ҏ据库理pȝDBMSq行pȝ优化Q即优化各种pȝ参数Q如~冲Z数?br />  (5) 在用面向数据的SQL语言q行E序设计Ӟ量采取优化法?br />   MQ要提高数据库的q行效率Q必M数据库系l优化、数据库设计U优化、程序实现优化Q这三个层次上同时下功夫?br />  上述十四个技巧,是许多h在大量的数据库分析与设计实践中,逐步ȝ出来的。对于这些经验的q用Q读者不能生帮硬套,死记背Q而要消化理解Q实事求是,灉|掌握。ƈ逐步做到Q在应用中发展,在发展中应用?br />特别声明以上内容是{?a >http://dev2dev.bea.com.cn/bbsdoc/20060112181.html</a>Q如果您认ؓ该文档的内容늊了您的权益,请与整理?excelarthur.com.cn)联系Q与Dev2Dev|站无关?/p><img src ="http://www.tkk7.com/rodney/aggbug/39165.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2006-04-04 14:36 <a href="http://www.tkk7.com/rodney/archive/2006/04/04/39165.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBuilder9的破解方?/title><link>http://www.tkk7.com/rodney/archive/2006/04/03/38976.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Mon, 03 Apr 2006 09:27:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2006/04/03/38976.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/38976.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2006/04/03/38976.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/38976.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/38976.html</trackback:ping><description><![CDATA[在安装完了JBuilder9Ӟ打开JB9会弹Z个对话框讲你要注册。这时你没有注册hQ有一个叫JB9_Ent_KeyGen.exe的文Ӟq时你只要将q个文gcopy to 你安装的目录下。double click this fileQ这时你只要点击"Generate"Q再点击"Save"OK了。例如:E:\JBuilder9\jdk1.4\bin下放入copy的文件。这个文件一定要攑օjdk1.4\bin下面?img src ="http://www.tkk7.com/rodney/aggbug/38976.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2006-04-03 17:27 <a href="http://www.tkk7.com/rodney/archive/2006/04/03/38976.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>操纵java数组http://www.tkk7.com/rodney/archive/2006/03/06/33797.htmlrodneyrodneyMon, 06 Mar 2006 02:16:00 GMThttp://www.tkk7.com/rodney/archive/2006/03/06/33797.htmlhttp://www.tkk7.com/rodney/comments/33797.htmlhttp://www.tkk7.com/rodney/archive/2006/03/06/33797.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/33797.htmlhttp://www.tkk7.com/rodney/services/trackbacks/33797.html
  1.     List lst = new ArrayList();
  2.     lst.add(new Integer(37));

在这个特D的范例中,一个整型?7用于构造一个Integer装cd象,然后那个对象被加入到列表?BR>
q个单的范例展示集合的一个基Q他们用于操U一列对象,其中的每个对象是一个类或者接口类型。因此,一个ArrayList可以包含Object,String,Float以及Runnablecd的对象。集合类不能用于原始数据cd的列表,例如整型数组?BR>
如果你在你的E序中用原始类型的数组Q你如何操纵它们呢?q个技巧就l你展示几个你可以用的技术?BR>
W一个技术是排序。java.util.Arrayscd含一套排序和查找数组的类ҎQ例如:
  1.     import java.util.Arrays;
  2.     public class ArrayDemo1 {
  3.         public static void main(String args[]) {
  4.             int vec[] = {37, 47, 23, -5, 19, 56};
  5.             Arrays.sort(vec);
  6.             for (int i = 0; i < vec.length; i++) {
  7.                 System.out.println(vec[i]);
  8.             }
  9.         }
  10.     }

q个演示E序初始化一个整数数l然后调用Arrays.sort升序排序那个数组?BR>
cM的,你可以在排完序的数组上进行二分法查找Q?BR>
  1.     import java.util.Arrays;
  2.     public class ArrayDemo2 {
  3.         public static void main(String args[]) {
  4.             int vec[] = {-5, 19, 23, 37, 47, 56};
  5.             int slot = Arrays.binarySearch(vec, 35);
  6.             slot = -(slot + 1);
  7.             System.out.println("insertion point = " + slot);
  8.         }
  9.     }

q个E序有个微妙的概念,如果二分法查扑֤败它返回:

    -(insertion point) - 1

q个演示E序以参?5调用查找ҎQ而那个参数在数组中不存在Q方法返回|4Q如果这个值加一再取其负数就得到3Q这是35应该被插入到数组中的位置Q换a之,?5, 19?3在数l中占据的位|是0Q??。因此?5应该在烦?的位|,?7, 47以及56g。搜索方法ƈ不进行实际的插入操作而只是指出应该在何处插入?BR>
除了排序和查找,我们q可以对原始cd数组做什么?另一个有用的技术是一个原始数l{换ؓ{h的对象类型数l。每个对应元素用它们的装器类Q例如在装数组中,37成ؓInteger(37)?BR>
  1.     import java.util.Arrays;
  2.     import java.lang.reflect.Array;
  3.     
  4.     public class ArrayDemo3 {
  5.     
  6.         // if input is a single-dimension primitive array,
  7.         // return a new array consisting of wrapped elements,
  8.         // else just return input argument
  9.     
  10.         public static Object toArray(Object vec) {
  11.     
  12.             // if null, return
  13.     
  14.             if (vec == null) {
  15.                 return vec;
  16.             }
  17.     
  18.             // if not an array or elements not primitive, return
  19.     
  20.             Class cls = vec.getClass();
  21.             if (!cls.isArray()) {
  22.                 return vec;
  23.             }
  24.             if (!cls.getComponentType().isPrimitive()) {
  25.                 return vec;
  26.             }
  27.     
  28.             // get array length and create Object output array
  29.     
  30.             int length = Array.getLength(vec);
  31.             Object newvec[] = new Object[length];
  32.     
  33.             // wrap and copy elements
  34.     
  35.             for (int i = 0; i < length; i++) {
  36.                 newvec[i] = Array.get(vec, i);
  37.             }
  38.     
  39.             return newvec;
  40.         }
  41.     
  42.         public static void main(String args[]) {
  43.     
  44.             // create a primitive array
  45.     
  46.             int vec[] = new int[]{1, 2, 3};
  47.     
  48.             // wrap it
  49.     
  50.             Object wrappedvec[] = (Object[])toArray(vec);
  51.     
  52.             // display result
  53.     
  54.             for (int i = 0; i < wrappedvec.length; i++) {
  55.                 System.out.println(wrappedvec[i]);
  56.             }
  57.         }
  58.     }

Ҏ"toArray"的参数是一个Object对象(数组可以被赋值给一个Object引用)。如果参数是null或者代表的不是原始cd数组那么q个Ҏ单的q回参数倹{java.lang.Class工具cȝ于判断参数是否是一个数lƈ获取数组的底层元素的cd?BR>
一旦做完这些检查,使用java.lang.reflect.Array工具cȝ反射工具Ҏ可以获取原始数l的长度q获得数l的单个元素。Array.get获得的每个元素被q回到封装器cMQ例如Integer或者Double?BR>
最l的范例Z前面的那个ƈ向你展示如何在数l上使用集合Ҏ。这假设你已l有一个对象数l?BR>
  1.     import java.util.Arrays;
  2.     import java.util.List;
  3.     public class ArrayDemo4 {
  4.         public static void main(String args[]) {
  5.             Object vec[] = {new Integer(37), new Integer(47)};
  6.             List lst = Arrays.asList(vec);
  7.             lst.set(1, new Integer(57));
  8.             for (int i = 0; i < vec.length; i++) {
  9.                 System.out.println(vec[i]);
  10.             }
  11.         }
  12.     }

在这个程序中Qvec是一个对象数l,包含Integer(37)和Integer(47)Q然后Arrays.asList被调用。它q回一个集?List接口cd)Q用数l作为集合的后台存储。换a之,ArrayListq样的集合类型在它内部有某种存储cdd储集合元素。在q个例子中,使用的存储类型是作ؓ参数传递到Arrays.asList的数l。这意味着集合Ҏ所做的改变会被反射到底层的数组?BR>
修改集合中的元素1D底层的数l也改变Q程序的输出是:

    37
    57

因此如果你有一个对象数l,你可以在它上面用集合特性,数组自n作ؓ底层存储?BR>
我们也可以将集合转换Z个对象数l,例如Q?BR>
    Object vec[] = lst.toArray();

package com.cucu.test;

/**
* @author http://www.linewell.com <a href=mailto:cg@linewell.com>cg@linewell.com</a>
* @version 1.0
*/
public class Sort {

public void swap(int a[], int i, int j) {
int tmp = a;
a = a[j];
a[j] = tmp;
}

public int partition(int a[], int low, int high) {
int pivot, p_pos, i;
p_pos = low;
pivot = a[p_pos];
for (i = low + 1; i <= high; i++) {
if (a > pivot) {
p_pos++;
swap(a, p_pos, i);
}
}
swap(a, low, p_pos);
return p_pos;
}

public void quicksort(int a[], int low, int high) {
int pivot;
if (low < high) {
pivot = partition(a, low, high);
quicksort(a, low, pivot - 1);
quicksort(a, pivot + 1, high);
}

}

public static void main(String args[]) {
int vec[] = new int[] { 37, 47, 23, -5, 19, 56 };
int temp;
//选择排序?Selection Sort)
long begin = System.currentTimeMillis();
for (int k = 0; k < 1000000; k++) {
for (int i = 0; i < vec.length; i++) {
for (int j = i; j < vec.length; j++) {
if (vec[j] > vec) {
temp = vec;
vec = vec[j];
vec[j] = temp;
}
}

}
}
long end = System.currentTimeMillis();
System.out.println("选择法用时ؓQ? + (end - begin));
//打印排序好的l果
for (int i = 0; i < vec.length; i++) {
System.out.println(vec);
}
// 冒排序?Bubble Sort)
begin = System.currentTimeMillis();
for (int k = 0; k < 1000000; k++) {
for (int i = 0; i < vec.length; i++) {
for (int j = i; j < vec.length - 1; j++) {
if (vec[j + 1] > vec[j]) {
temp = vec[j + 1];
vec[j + 1] = vec[j];
vec[j] = temp;
}
}

}
}
end = System.currentTimeMillis();
System.out.println("冒法用时ؓQ? + (end - begin));
//打印排序好的l果
for (int i = 0; i < vec.length; i++) {
System.out.println(vec);
}

//插入排序?Insertion Sort)
begin = System.currentTimeMillis();
for (int k = 0; k < 1000000; k++) {
for (int i = 1; i < vec.length; i++) {
int j = i;
while (vec[j - 1] < vec) {
vec[j] = vec[j - 1];
j--;
if (j <= 0) {
break;
}
}
vec[j] = vec;
}
}
end = System.currentTimeMillis();
System.out.println("插入法用时ؓQ? + (end - begin));
//打印排序好的l果
for (int i = 0; i < vec.length; i++) {
System.out.println(vec);
}

//快速排序法(Quick Sort)

Sort s = new Sort();
begin = System.currentTimeMillis();
for (int k = 0; k < 1000000; k++) {
s.quicksort(vec, 0, 5);
}
end = System.currentTimeMillis();
System.out.println("快速法用时为:" + (end - begin));
//打印排序好的l果
for (int i = 0; i < vec.length; i++) {
System.out.println(vec);
}
}

}
以下是运行结果:
选择法用时ؓQ?34
56
47
37
23
19
-5
冒法用时ؓQ?72
56
47
37
23
19
-5
插入法用时ؓQ?8
56
47
37
23
19
-5
快速法用时为:297
56
47
37
23
19
-5*


rodney 2006-03-06 10:16 发表评论
]]>
javax.naming.NameNotFoundException: Unable to resolve 'TestEJB'. Resolved ''; remaining name 'TestEJB'异常http://www.tkk7.com/rodney/archive/2006/02/20/31674.htmlrodneyrodneyMon, 20 Feb 2006 09:24:00 GMThttp://www.tkk7.com/rodney/archive/2006/02/20/31674.htmlhttp://www.tkk7.com/rodney/comments/31674.htmlhttp://www.tkk7.com/rodney/archive/2006/02/20/31674.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/31674.htmlhttp://www.tkk7.com/rodney/services/trackbacks/31674.htmlq个异常是在试EJB的时候,E序执行到ctx.lookup("testEJB")时抛出的。由NamingException捕捉到。打印出栈轨qҎ
javax.naming.NameNotFoundException: Unable to resolve 'TestEJB'. Resolved ''; remaining name 'TestEJB'
 at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1123)
 at weblogic.jndi.internal.BasicNamingNode.lookupHere(BasicNamingNode.java:250)
 at weblogic.jndi.internal.ServerNamingNode.lookupHere(ServerNamingNode.java:171)
 at weblogic.jndi.internal.BasicNamingNode.lookup(BasicNamingNode.java:204)
 at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:267)
 at weblogic.jndi.internal.WLContextImpl.lookup(WLContextImpl.java:362)
 at javax.naming.InitialContext.lookup(InitialContext.java:351)
 at testejb.servlet.SrvEJB.init(SrvEJB.java:26)
 at javax.servlet.GenericServlet.init(GenericServlet.java:256)
 at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:265)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
 at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:61)
 at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
 at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
 at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:502)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:224)
 at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:165)
 at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3022)
 at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
 at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
 at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:1925)
 at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1848)
 at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1288)
 at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
 at weblogic.work.ExecuteThread.run(ExecuteThread.java:179)
我的ejb-jar.xml文g描述如下Q?BR><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "

<ejb-jar>
  <display-name>EJB</display-name>
  <enterprise-beans>
    <session>
      <ejb-name>TestEJB</ejb-name>
      <home>testejb.ejb.TestEJBHome</home>
      <remote>testejb.ejb.TestEJBRemote</remote>
      <ejb-class>testejb.ejb.TestEJBBean</ejb-class>
      <session-type>Stateless</session-type>
      <transaction-type>Container</transaction-type>
    </session>
  </enterprise-beans>
  <assembly-descriptor>
    <container-transaction>
      <method>
        <ejb-name>TestEJB</ejb-name>
        <method-name>*</method-name>
      </method>
      <trans-attribute>Required</trans-attribute>
    </container-transaction>
  </assembly-descriptor>
</ejb-jar>

weblogic-ejb-jar.xml文g描述如下Q?BR><?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "

<weblogic-ejb-jar>
  <weblogic-enterprise-bean>
    <ejb-name>TestEJB</ejb-name>
    <jndi-name>TestEJB</jndi-name>
  </weblogic-enterprise-bean>
</weblogic-ejb-jar>
q些配置我都写了Z么还有名字没有找到的异常呢?
请大家帮忙看看。谢谢! QQQ?6322591。MSNQrodney_luo@163.com



rodney 2006-02-20 17:24 发表评论
]]>
DB2 V7.2的JDBCE序http://www.tkk7.com/rodney/archive/2006/02/17/31188.htmlrodneyrodneyFri, 17 Feb 2006 05:17:00 GMThttp://www.tkk7.com/rodney/archive/2006/02/17/31188.htmlhttp://www.tkk7.com/rodney/comments/31188.htmlhttp://www.tkk7.com/rodney/archive/2006/02/17/31188.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/31188.htmlhttp://www.tkk7.com/rodney/services/trackbacks/31188.htmlOS: Windows Server 2000 SP4
开发工PJBuilder 2006?BR>WEB服务器:Weblogic9.0
数据库:DB2 V7.2
使用Type2的JDBCq接方式。因为DB2 V7.2只支持Type2与Type3的连接?BR>我新Z一个TestDBc,在这个类中我可以q接到DB2中,q且取出数据。可是我把这个连接的Ҏ写到Servlet中就不能q接到该数据库中了。抛出ClassNotFoundException的异常?nbsp; 请大家帮忙看Q我在系l环境有讄Classpath的DB2驱动E序包。ƈ在WEB-INF\lib目录下也有这个驱E驱动程序包。它是在Sevelt中要抛出ClassNotFoundException的异常。。。。?BR>QQQ?6322591
MSN: rodney_luo@163.com
Email: rodney_luo@163.com

谢谢大家?img src ="http://www.tkk7.com/rodney/aggbug/31188.html" width = "1" height = "1" />

rodney 2006-02-17 13:17 发表评论
]]>
JAVAQWebsphere,DB2,Oracle, JBuilder2006,开发工P|络工具Q教学工P商务软g想下׃http://www.tkk7.com/rodney/archive/2006/02/15/30744.htmlrodneyrodneyWed, 15 Feb 2006 01:46:00 GMThttp://www.tkk7.com/rodney/archive/2006/02/15/30744.htmlhttp://www.tkk7.com/rodney/comments/30744.htmlhttp://www.tkk7.com/rodney/archive/2006/02/15/30744.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/30744.htmlhttp://www.tkk7.com/rodney/services/trackbacks/30744.htmlhttp://www.9iv.com/down/index.htm?eid=236712q里有你惌的一切工兯YӞ开发工P商务软g。一切的软g在http://www.9iv.com/down/index.htm?eid=236712中?img src ="http://www.tkk7.com/rodney/aggbug/30744.html" width = "1" height = "1" />

rodney 2006-02-15 09:46 发表评论
]]>
Weblogic q接池抛出的错误http://www.tkk7.com/rodney/archive/2005/12/23/25205.htmlrodneyrodneyFri, 23 Dec 2005 06:51:00 GMThttp://www.tkk7.com/rodney/archive/2005/12/23/25205.htmlhttp://www.tkk7.com/rodney/comments/25205.htmlhttp://www.tkk7.com/rodney/archive/2005/12/23/25205.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/25205.htmlhttp://www.tkk7.com/rodney/services/trackbacks/25205.htmljava.rmi.RemoteException: Transaction Rolledback.; nested exception is: weblogic.transaction.internal.TimedOutException: Transaction timed out after 32 seconds Name=[EJB testpool.EJBPoolBean.isLogin(java.lang.String,java.lang.String)],Xid=BEA1-0001D529A50E7F28EDB9(10061327),Status=Active,numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since begin=32,seconds left=30,activeThread=Thread[ExecuteThread: '13' for queue: 'weblogic.kernel.Default',5,Thread Group for Queue: 'weblogic.kernel.Default'],XAServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(ServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(state=started,assigned=none),xar=weblogic.jdbc.wrapper.JTSXAResourceImpl@1304e60),SCInfo[mydomain+myserver]=(state=active),properties=({weblogic.transaction.name=[EJB testpool.EJBPoolBean.isLogin(java.lang.String,java.lang.String)], weblogic.jdbc=t3://192.168.1.98:7001}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=myserver+192.168.1.98:7001+mydomain+t3+, XAResources={},NonXAResources={})],CoordinatorURL=myserver+192.168.1.98:7001+mydomain+t3+) at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:186) at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:284) at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:244) at testpool.EJBPool_isb7ao_EOImpl_811_WLStub.isLogin(Unknown Source) at testpool.SrvLogin.doPost(SrvLogin.java:62) at javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387) at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:305) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6310) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622) at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170) Caused by: weblogic.transaction.internal.TimedOutException: Transaction timed out after 32 seconds Name=[EJB testpool.EJBPoolBean.isLogin(java.lang.String,java.lang.String)],Xid=BEA1-0001D529A50E7F28EDB9(10061327),Status=Active,numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since begin=32,seconds left=30,activeThread=Thread[ExecuteThread: '13' for queue: 'weblogic.kernel.Default',5,Thread Group for Queue: 'weblogic.kernel.Default'],XAServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(ServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(state=started,assigned=none),xar=weblogic.jdbc.wrapper.JTSXAResourceImpl@1304e60),SCInfo[mydomain+myserver]=(state=active),properties=({weblogic.transaction.name=[EJB testpool.EJBPoolBean.isLogin(java.lang.String,java.lang.String)], weblogic.jdbc=t3://192.168.1.98:7001}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=myserver+192.168.1.98:7001+mydomain+t3+, XAResources={},NonXAResources={})],CoordinatorURL=myserver+192.168.1.98:7001+mydomain+t3+) at weblogic.transaction.internal.ServerTransactionImpl.wakeUp(ServerTransactionImpl.java:1492) at weblogic.transaction.internal.ServerTransactionManagerImpl.processTimedOutTransactions(ServerTransactionManagerImpl.java:1071) at weblogic.transaction.internal.TransactionManagerImpl.wakeUp(TransactionManagerImpl.java:1805) at weblogic.transaction.internal.ServerTransactionManagerImpl.wakeUp(ServerTransactionManagerImpl.java:988) at weblogic.transaction.internal.WLSTimer.trigger(WLSTimer.java:31) at weblogic.time.common.internal.ScheduledTrigger.run(ScheduledTrigger.java:243) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118) at weblogic.time.common.internal.ScheduledTrigger.executeLocally(ScheduledTrigger.java:229) at weblogic.time.common.internal.ScheduledTrigger.execute(ScheduledTrigger.java:223) ... 2 more 在程序中q行都没有出错。这个TimedOutException:是执行时间超时的原理。要在哪里设|这个|
问题的解x在配|连接池的地Ҏ一个高U设|:Click Hide展开后把q接持箋旉N一此。就可以了?/PRE>

rodney 2005-12-23 14:51 发表评论
]]>
学习JAVAQWeblogic,IBM Webspherepd产品的好dhttp://www.tkk7.com/rodney/archive/2005/12/21/24900.htmlrodneyrodneyWed, 21 Dec 2005 01:09:00 GMThttp://www.tkk7.com/rodney/archive/2005/12/21/24900.htmlhttp://www.tkk7.com/rodney/comments/24900.htmlhttp://www.tkk7.com/rodney/archive/2005/12/21/24900.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/24900.htmlhttp://www.tkk7.com/rodney/services/trackbacks/24900.html

rodney 2005-12-21 09:09 发表评论
]]>
java中replaceAll()http://www.tkk7.com/rodney/archive/2005/11/29/21797.htmlrodneyrodneyTue, 29 Nov 2005 03:10:00 GMThttp://www.tkk7.com/rodney/archive/2005/11/29/21797.htmlhttp://www.tkk7.com/rodney/comments/21797.htmlhttp://www.tkk7.com/rodney/archive/2005/11/29/21797.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/21797.htmlhttp://www.tkk7.com/rodney/services/trackbacks/21797.htmlString tmp = "-$125402.00";
tmp.replaceAll("$","");
可是执行L的结果ƈ没有?去除。后来找资料才发现要q样?BR>tmp.replaceAll("\\$","")才可以?img src ="http://www.tkk7.com/rodney/aggbug/21797.html" width = "1" height = "1" />

rodney 2005-11-29 11:10 发表评论
]]>
JAVA中的VECTOR转换成javaScript的数l?/title><link>http://www.tkk7.com/rodney/archive/2005/11/22/20909.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Tue, 22 Nov 2005 03:11:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2005/11/22/20909.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/20909.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2005/11/22/20909.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/20909.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/20909.html</trackback:ping><description><![CDATA[把java中的Vector,Hashtable,List{数cd转换成javaScript的数l。在q里用到的是一个StringBuffer.具体的实现看下面的代码:<BR>public String getArray(Vector v){<BR>  if (v == null || v.size()==0){<BR>   return "";<BR>  }<BR>  int i=0;<BR>  Hashtable hash = null;<BR>  StringBuffer sb = new StringBuffer("var arrmake = new Array(");<BR>  try{<BR>   for(i=0; i<v.size(); i++){<BR>    hash = (Hashtable)v.elementAt(i);<BR>    String tmp_make = hash.get("code").toString();    <BR>    if(i=1){<BR>     sb.append("'"+tmp_make+"'");     <BR>    }else if(i>1){<BR>     sb.append("'"+tmp_make+"',");<BR>    }    <BR>   }<BR>   String test = sb.toString(); <BR>   if (i>1){<BR>    test = test.substring(0,test.length()-1);<BR>   }<BR>   sb.append(test+");");<BR>  }catch(Exception e){<BR>   e.printStackTrace();<BR>  }  <BR>  return sb.toString();<BR> }<BR>要注意这里一定要用try{}catch(){}因ؓ在{换过E中可能会出错,所以用try{}catch(){}把异常抛出?BR>在javascript中怎么用这个数l呢Q?BR>String arrMake = getArray(vecMake);<BR><script language="javaScript"><BR> <%=arrMake%><BR></script><BR>OK.<img src ="http://www.tkk7.com/rodney/aggbug/20909.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2005-11-22 11:11 <a href="http://www.tkk7.com/rodney/archive/2005/11/22/20909.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据cd转换错误http://www.tkk7.com/rodney/archive/2005/11/11/19254.htmlrodneyrodneyFri, 11 Nov 2005 01:42:00 GMThttp://www.tkk7.com/rodney/archive/2005/11/11/19254.htmlhttp://www.tkk7.com/rodney/comments/19254.htmlhttp://www.tkk7.com/rodney/archive/2005/11/11/19254.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/19254.htmlhttp://www.tkk7.com/rodney/services/trackbacks/19254.htmljava.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
java.lang.Integer.parseInt(Integer.java:489)
以上的错误是因ؓ一个空D强制转换成int型。ؓ什么会是一个空值呢Q是因ؓ在JSP中form的TEXT没有输入g到servlet中。servlet是用Integer.parseInt(request.getParameter("vehFrom"))来取JSP中的?的。要解决q个问题很简单,可是初学者常会遇到这L问题。废话少说还是说怎么解决了的吧?BR>只要在servlet中将q个值做一个空值处理?BR>if((jcf.retuPara(request,"vehFrom")).length()<=0){
      vehFromNo = 0;
     }else{
      vehFromNo = Integer.parseInt(jcf.retuPara(request,"vehFrom"));
     }
要注意一ҎJSP传到servlet中如果没有输入值是NULL倹{我q里用了一个自己写的retuParaQ)Ҏ是处理NULL的。把NULL处理成“”?BR>好了Q搞定?BR>

rodney 2005-11-11 09:42 发表评论
]]>
挣钱挣QB挣Q币技?/title><link>http://www.tkk7.com/rodney/archive/2005/11/04/18194.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Fri, 04 Nov 2005 13:15:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2005/11/04/18194.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/18194.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2005/11/04/18194.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/18194.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/18194.html</trackback:ping><description><![CDATA[&lt;P&gt;&lt;A href=&quot;http://www.8qu.net/register.asp?net=rodneyluo&quot;&gt;http://www.8qu.net/register.asp?net=rodneyluo&lt;/A&gt;&lt;BR&gt;我也是在论坛上看了别人的帖子才注册的Q我已经实践q了Q换?0个Q币,真的很好用,向大家推荐!Q!Q?&lt;/P&gt; &lt;P&gt;以前你也可能看过q样的广告,q次你真的不要再错过了!Q?&lt;BR&gt;其实和很多h一P我对|络赚钱由最初的抵触Q因为大安说那是骗人的Q到半信半疑Q因为有朋友说网?amp;lt;/P&gt; &lt;P&gt;行的Q但要看是什么样的网赚)再到信Q因为此时自׃w赚CQ其他的不知道,但通宝实是真的)?&lt;/P&gt; &lt;P&gt;下面介绍一下方法:只要?&lt;A href=&quot;http://www.8qu.net/register.asp?net=rodneyluo&quot;&gt;http://www.8qu.net/register.asp?net=rodneyluo&lt;/A&gt;Q那里有更加详细的介l)?amp;lt;/P&gt; &lt;P&gt;册后,免费下蝲一个YӞ“通宝 ”(tongbao.exeQ?。下载后打开Q点几Z登录?-“开始分”,q样?amp;lt;/P&gt; &lt;P&gt;开始赚Q币了 Q挂机就可以赚Q币了,跟挂QQ差不多?&lt;BR&gt;?分钟自动增加一U分 ?&lt;/P&gt; &lt;P&gt;别看到要写银行帐号就吓到了,其实你可以不填(填一下,因ؓ当你辑ֈ支付的条件时可以确时时的&lt;/P&gt; &lt;P&gt;收到人民币)Q选择要Q币(只需要输入QQLQ?&lt;/P&gt; &lt;P&gt;注册地址Q?amp;lt;A href=&quot;http://www.8qu.net/register.asp?net=rodneyluo&quot;&gt;http://www.8qu.net/register.asp?net=rodneyluo&lt;/A&gt;&lt;/P&gt; &lt;P&gt;推荐使用八趣TongBao的理? &lt;/P&gt; &lt;P&gt;一. 无需M点击.泡时间积?像|易POPO一?对工作没有Q何媄?不象NewsbarQ新L报)或SABar{?amp;lt;/P&gt; &lt;P&gt;要及时保存积? &lt;BR&gt;二.真正的无q扰.隐藏时只在Q务栏中有一个小“铜钱”,只占1M内存,对于动辄256Q?12甚至上G内存的机?amp;lt;/P&gt; &lt;P&gt;说根本就九牛一毛,对你上网q其他事没有q扰?&lt;BR&gt;? l色Y件无需安装. &lt;BR&gt;? 无需一分钱投入.免费注册使用,因而没有Q何风险(要自己投资钱的话我是肯定不会d的)Q?而且信誉&lt;/P&gt; &lt;P&gt;l对没问题,要有问题也不可能存在q么多年。我的亲w经历就?&lt;BR&gt;五.下线CU分兑现?TongBao支持五下线Q?0%Q?%Q?%Q?%Q?%?&lt;BR&gt;按每月推?0名下U,你的下线每月又推?0名下U,以公司承诺每1000个积分最低付?元计(实际会超q?amp;lt;/P&gt; &lt;P&gt;5元)Q你的月收入分别为(按每人每?000个积分计)Q?&lt;BR&gt;W?个月收入Q?5元; &lt;BR&gt;W?个月收入Q?5 +5 =10?&lt;BR&gt;W?个月收入Q?5 +5 +25 =35元; &lt;BR&gt;W?个月收入Q?5 +5 +25 +150 =185元; &lt;BR&gt;W?个月收入Q?5 +5 +25 +150 +1500 =1685元; &lt;BR&gt;W?个月收入Q? +5 +25 +150 +1500 +15000 =16685元; &lt;BR&gt;说实话,其实q是理想的算法,实际上是很难辑ֈ的,因ؓ不能保证每个人都认真L分和发展下线 Q但是你&lt;/P&gt; &lt;P&gt;认真点去做的话,几个月以后每个月赚几癄Ҏ问题Q而且q将E_增长的,q已l相当不错了Q至我?amp;lt;/P&gt; &lt;P&gt;得是q样Q!Q?&lt;/P&gt; &lt;P&gt;当然,如果单独一个h只是挂机Q一天只l挂四小ӞQ一个月也就7元,但这?元比Newsbar和SABar一个月?amp;lt;/P&gt; &lt;P&gt;7元容易赚多了,不需M点击。如果有下线Q收入见上面式。要是三个一h更加不用说了?&lt;/P&gt; &lt;P&gt;八趣TongBao免费注册Q?&lt;A href=&quot;http://www.8qu.net/register.asp?net=rodneyluo&quot;&gt;http://www.8qu.net/register.asp?net=rodneyluo&lt;/A&gt;强烈推荐) &lt;BR&gt;  &lt;BR&gt;我的使用心得。如果不是网虫,一定得惛_法发展十来个下线Q最单的Ҏ是到论坛发_关键是这东西&lt;/P&gt; &lt;P&gt;可以赚QBQ有很多人愿意挂的。我现在已经发展?31个下U了。还有一点,我们从下UK里提成,但下U自?amp;lt;/P&gt; &lt;P&gt;的点数是不会变的。所以越多h加进来,你会多的收益,q不会媄响他们。到以后Q自׃|时记得挂Q?amp;lt;/P&gt; &lt;P&gt;不记得就了。如果下U多Q有一天可能收?00元或1000元,也可以补贴一下上|费Q不能太费宽带吧,?amp;lt;/P&gt; &lt;P&gt;收获当做一U意外不是很好吗Q! &lt;/P&gt; &lt;P&gt;关键的关键,没事多来发发_多拉点h成你的下U,靠自己泡效果不明显Q一个月?0来个QB。如果下U?amp;lt;/P&gt; &lt;P&gt;多了Q自己都不用挂,吃提成都够了。大家一h挂吧Q就跟挂QQ似的Q全民一hQ我靠,最后加入的也有1&lt;/P&gt; &lt;P&gt;0块一个月Q那些下U多的真得会发死哎~~呵呵。注册八?amp;lt;A href=&quot;http://www.8qu.net/register.asp?net=iamcacy&quot;&gt;http://www.8qu.net/register.asp?net=iamcacy&lt;/A&gt;?amp;lt;/P&gt; &lt;P&gt;赚钱Q我受益Q挂在网上不费事Q月入一千也是你Q还{什么快快成为第一Ҏ册者,让更多的人成Z的下&lt;/P&gt; &lt;P&gt;U!具体介绍误?amp;lt;A href=&quot;http://www.8qu.net/register.asp?net=iamcacy&quot;&gt;http://www.8qu.net/register.asp?net=iamcacy&lt;/A&gt;如有疑问请加379588056听我在线询问Q?amp;lt;/P&gt; &lt;P&gt;决不骗你Q?&lt;/P&gt; &lt;P&gt;q有是量dBTU子发展下线Q象我一PZ人服务的同时q行宣传Q效果很好!Q! &lt;BR&gt;双管齐下q愁发展不了下线Q哈哈,到时坐着{钱拉, &lt;/P&gt; &lt;P&gt;持之以恒Q相信收L一天很快到来!Q(Ҏ有恒心,急功q利的不推荐使用Q因要几个月才能看?amp;lt;/P&gt; &lt;P&gt;非常明显的效果) &lt;BR&gt;我徏有一个群Q交用心得和解答疑难Q?653115Q想加的在验证的时候写上:通宝用户 &lt;BR&gt;有疑惑的也可以加q来再详l咨询?amp;lt;/P&gt;<img src ="http://www.tkk7.com/rodney/aggbug/18194.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2005-11-04 21:15 <a href="http://www.tkk7.com/rodney/archive/2005/11/04/18194.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>HTML中checkbox http://www.tkk7.com/rodney/archive/2005/11/03/17986.htmlrodneyrodneyThu, 03 Nov 2005 09:10:00 GMThttp://www.tkk7.com/rodney/archive/2005/11/03/17986.htmlhttp://www.tkk7.com/rodney/comments/17986.htmlhttp://www.tkk7.com/rodney/archive/2005/11/03/17986.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/17986.htmlhttp://www.tkk7.com/rodney/services/trackbacks/17986.htmlq因该注意一点如果有value是NULL时做String.equalsIgnoreCase("") or String.equals("")都会抛出I指异常。页面上昄500号错误。请心使用?img src ="http://www.tkk7.com/rodney/aggbug/17986.html" width = "1" height = "1" />

rodney 2005-11-03 17:10 发表评论
]]>
java中用Calendar计算某个月的最后一?/title><link>http://www.tkk7.com/rodney/archive/2005/10/14/15519.html</link><dc:creator>rodney</dc:creator><author>rodney</author><pubDate>Fri, 14 Oct 2005 06:56:00 GMT</pubDate><guid>http://www.tkk7.com/rodney/archive/2005/10/14/15519.html</guid><wfw:comment>http://www.tkk7.com/rodney/comments/15519.html</wfw:comment><comments>http://www.tkk7.com/rodney/archive/2005/10/14/15519.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/rodney/comments/commentRss/15519.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/rodney/services/trackbacks/15519.html</trackback:ping><description><![CDATA[Calendar lCal = Calendar.getInstance(); <BR>String year = tod.substring(6);  //tod 是DD/MM/YYYY的格式的日期?BR>String month = tod.substring(3,5);<BR> lCal.set(FormatFunctions.s2i(year), FormatFunctions.s2i(month), 1); 调用一个共用方法将字符串{换成整型?BR>     lCal.add(Calendar.MONTH, 0);<BR>     lCal.add(Calendar.DATE, -1);<BR>      SimpleDateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");<BR>      tod = formatter.format(lCal.getTime();<img src ="http://www.tkk7.com/rodney/aggbug/15519.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/rodney/" target="_blank">rodney</a> 2005-10-14 14:56 <a href="http://www.tkk7.com/rodney/archive/2005/10/14/15519.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat配置http://www.tkk7.com/rodney/archive/2005/10/10/15128.htmlrodneyrodneyMon, 10 Oct 2005 04:19:00 GMThttp://www.tkk7.com/rodney/archive/2005/10/10/15128.htmlhttp://www.tkk7.com/rodney/comments/15128.htmlhttp://www.tkk7.com/rodney/archive/2005/10/10/15128.html#Feedback0http://www.tkk7.com/rodney/comments/commentRss/15128.htmlhttp://www.tkk7.com/rodney/services/trackbacks/15128.html大多数商业化的J2EE服务器都提供一个功能强大的理界面Q且大都采用易于理解的Web应用界面。Tomcat按照自己的方式,同样提供一个成熟的理工具Qƈ且丝毫不逊于那些商业化的竞争Ҏ。Tomcat的Admin Web Application最初在4.1版本时出玎ͼ当时的功能包括管理context、data source、user和group{。当然也可以理像初始化参数Quser、group、role的多U数据库理{。在后箋的版本中Q这些功能将得到很大的扩展,但现有的功能已经非常实用了?BR>
Admin Web Application被定义在自动部v文gQCATALINA_BASE/webapps/admin.xml ?BR>Q译者注QCATALINA_BASE即tomcat安装目录下的server目录Q?BR>
你必ȝ辑这个文Ӟ以确定Context中的docBase参数是绝对\径。也是_CATALINA_BASE/webapps/admin.xml 的\径是l对路径。作为另外一U选择Q你也可以删除这个自动部|文Ӟ而在server.xml文g中徏立一个Admin Web Application的contextQ效果是一L。你不能理Admin Web Applicationq个应用Q换而言之,除了删除CATALINA_BASE/webapps/admin.xml Q你可能什么都做不了?BR>
如果你用UserDatabaseRealmQ默认)Q你需要添加一个user以及一个role到CATALINA_BASE/conf/tomcat-users.xml 文g中。你~辑q个文gQ添加一个名叫“admin”的role 到该文g中,如下Q?BR>
<role name="admin"/>

你同样需要有一个用Pq且q个用户的角色是“admin”。象存在的用户那Pd一个用P改变密码使其更加安全Q:

<user name="admin" password="deep_dark_secret" roles="admin"/>

当你完成q些步骤后,请重新启动TomcatQ访问http://localhost:8080/adminQ你看C个登录界面。Admin Web Application采用Z容器理的安全机Ӟq用了Jakarta Struts框架。一旦你作ؓ“admin”角色的用户d理界面Q你能够用这个管理界面配|Tomcat?BR>
2Q配|应用管理(Manager Web ApplicationQ?BR>Manager Web Application让你通过一个比Admin Web Application更ؓ单的用户界面Q执行一些简单的Web应用d?BR>
Manager Web Application被被定义在一个自动部|文件中Q?BR>
CATALINA_BASE/webapps/manager.xml ?BR>
你必ȝ辑这个文Ӟ以确保context的docBase参数是绝对\径,也就是说CATALINA_HOME/server/webapps/manager的绝对\径?BR>Q译者注QCATALINA_HOME即tomcat安装目录Q?BR>
如果你用的是UserDatabaseRealmQ那么你需要添加一个角色和一个用户到CATALINA_BASE/conf/tomcat-users.xml文g中。接下来Q编辑这个文Ӟd一个名为“manager”的角色到该文g中:

<role name=”manager?gt;

你同样需要有一个角色ؓ“manager”的用户。像已经存在的用户那Pd一个新用户Q改变密码其更加安全)Q?BR>
<user name="manager" password="deep_dark_secret" roles="manager"/>

然后重新启动TomcatQ访问http://localhost/manager/listQ将看到一个很朴素的文本型理界面Q或者访问http://localhost/manager/html/listQ将看到一个HMTL的管理界面。不是哪种方式都说明你的Manager Web Application现在已经启动了?BR>
Manager application让你可以在没有系l管理特权的基础上,安装新的Web应用Q以用于试。如果我们有一个新的web应用位于/home/user/hello下在Qƈ且想把它安装?/hello下,Z试q个应用Q我们可以这么做Q在W一个文件框中输入?hello”(作ؓ讉K时的pathQ,在第二个文本框中输入“file:/home/user/hello”(作ؓConfig URLQ?BR>
Manager applicationq允怽停止、重新启动、移除以及重新部|一个web应用。停止一个应用其无法被讉KQ当有用户尝试访问这个被停止的应用时Q将看到一?03的错误——?03 - This application is not currently available”?BR>
U除一个web应用Q只是指从Tomcat的运行拷贝中删除了该应用Q如果你重新启动TomcatQ被删除的应用将再次出现Q也是_U除q不是指从硬盘上删除Q?BR>
3Q部|一个web应用
有两个办法可以在pȝ中部|web服务?BR>1> 拯你的WAR文g或者你的web应用文g夹(包括该web的所有内容)?CATALINA_BASE/webapps目录下?BR>2> Z的web服务建立一个只包括context内容的XML片断文gQƈ把该文g攑ֈ$CATALINA_BASE/webapps目录下。这个web应用本n可以存储在硬盘上的Q何地斏V?BR>
如果你有一个WAR文gQ你若想部v它,则只需要把该文件简单的拯到CATALINA_BASE/webapps目录下即可,文g必须以?war”作为扩展名。一旦Tomcat监听到这个文Ӟ它将Q缺省的Q解开该文件包作ؓ一个子目录Qƈ以WAR文g的文件名作ؓ子目录的名字。接下来QTomcat在内存中徏立一个contextQ就好象你在server.xml文g里徏立一栗当Ӟ其他必需的内容,从server.xml中的DefaultContext获得?BR>
部vweb应用的另一U方式是写一个Context XML片断文gQ然后把该文件拷贝到CATALINA_BASE/webapps目录下。一个Context片断q一个完整的XML文gQ而只是一个context元素Q以及对该应用的相应描述。这U片断文件就像是从server.xml中切取出来的context元素一P所以这U片断被命名为“context片断”?BR>
举个例子Q如果我们想部v一个名叫MyWebApp.war的应用,该应用用realm作ؓ讉K控制方式Q我们可以用下面这个片断:

<!--  
 Context fragment for deploying MyWebApp.war  
-->
<Context path="/demo" docBase="webapps/MyWebApp.war"
        debug="0" privileged="true">
 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"                
        resourceName="UserDatabase"/>
</Context>

把该片断命名为“MyWebApp.xml”,然后拯到CATALINA_BASE/webapps目录下?BR>
q种context片断提供了一U便利的Ҏ来部|web应用Q你不需要编辑server.xmlQ除非你x变缺省的部vҎ,安装一个新的web应用时不需要重启动Tomcat?BR>

4Q配|虚拟主机(Virtual HostsQ?BR>关于server.xml中“Host”这个元素,只有在你讄虚拟L的才需要修攏V虚拟主机是一U在一个web服务器上服务多个域名的机ӞҎ个域名而言Q都好象独n了整个主机。实际上Q大多数的小型商务网站都是采用虚拟主机实现的Q这主要是因拟主直接q接到Internetq提供相应的带宽Q以保障合理的访问响应速度Q另外虚拟主能提供一个稳定的固定IP?BR>
Z名字的虚拟主机可以被建立在Q何web服务器上Q徏立的Ҏ是通过在域名服务器QDNSQ上建立IP地址的别名,q且告诉web服务器把d不同域名的请求分发到相应的网늛录。因文章主要是讲TomcatQ我们不准备介绍在各U操作系l上讄DNS的方法,如果你在q方面需要帮助,请参考《DNS and Bind》一书,作者是Paul Albitz and Cricket Liu (O'Reilly)。ؓ了示范方便,我将使用一个静态的L文gQ因是测试别名最单的Ҏ?BR>在Tomcat中用虚拟主机,你需要设|DNS或主机数据。ؓ了测试,为本地IP讄一个IP别名p够了Q接下来Q你需要在server.xml中添加几行内容,如下Q?BR>
<Server port="8005" shutdown="SHUTDOWN" debug="0">
 <Service name="Tomcat-Standalone">
   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8080" minProcessors="5" maxProcessors="75"
enableLookups="true" redirectPort="8443"/>
   <Connector className="org.apache.coyote.tomcat4.CoyoteConnector"
port="8443" minProcessors="5" maxProcessors="75"
acceptCount="10" debug="0" scheme="https" secure="true"/>
     <Factory className="org.apache.coyote.tomcat4.CoyoteServerSocketFactory"
clientAuth="false" protocol="TLS" />
   </Connector>
   <Engine name="Standalone" defaultHost="localhost" debug="0">
     <!-- This Host is the default Host -->
     <Host name="localhost" debug="0" appBase="webapps"
     unpackWARs="true" autoDeploy="true">
       <Context path="" docBase="ROOT" debug="0"/>
       <Context path="/orders" docBase="/home/ian/orders" debug="0"
                      reloadable="true" crossContext="true">
       </Context>
     </Host>

     <!-- This Host is the first "Virtual Host": www.example.com -->
     <Host name="www.example.com" appBase="/home/example/webapp">
       <Context path="" docBase="."/>
     </Host>

   </Engine>
 </Service>
</Server>

Tomcat的server.xml文gQ在初始状态下Q只包括一个虚拟主机,但是它容易被扩充到支持多个虚拟主机。在前面的例子中展示的是一个简单的server.xml版本Q其中粗体部分就是用于添加一个虚拟主机。每一个Host元素必须包括一个或多个context元素Q所包含的context元素中必L一个是默认的contextQ这个默认的context的显C\径应该ؓI(例如Qpath=””)?BR>
5Q配|基验证QBasic AuthenticationQ?BR>容器理验证Ҏ控制着当用戯问受保护的web应用资源Ӟ如何q行用户的n份鉴别。当一个web应用使用了Basic AuthenticationQBASIC参数在web.xml文g中auto-method元素中设|)Q而有用户讉K受保护的web应用ӞTomcat通过HTTP Basic Authentication方式Q弹Z个对话框Q要求用戯入用户名和密码。在q种验证Ҏ中,所有密码将被以64位的~码方式在网l上传输?BR>
注意Q用Basic Authentication通过被认为是不安全的Q因为它没有强健的加密方法,除非在客L和服务器端都使用HTTPS或者其他密码加密码方式Q比如,在一个虚拟私人网l中Q。若没有额外的加密方法,|络理员将能够截获Q或滥用Q用L密码。但是,如果你是刚开始用TomcatQ或者你惛_你的web应用中测试一下基于容器的安全理QBasic Authenticationq是非常易于讄和用的。只需要添?lt;security-constraint>?lt;login-config>两个元素C的web应用的web.xml文g中,q且在CATALINA_BASE/conf/tomcat-users.xml 文g中添加适当?lt;role>?lt;user>卛_Q然后重新启动Tomcat?BR>
下面例子中的web.xml摘自一个俱乐部会员|站pȝQ该pȝ中只有member目录被保护v来,q用Basic Authenticationq行w䆾验证。请注意Q这U方式将有效的代替Apache web服务器中?htaccess文g?BR>
<!--
 Define the Members-only area, by defining
 a "Security Constraint" on this Application, and
 mapping it to the subdirectory (URL) that we want
 to restrict.
-->
<security-constraint>
 <web-resource-collection>
   <web-resource-name>
     Entire Application
   </web-resource-name>
   <url-pattern>/members/*</url-pattern>
 </web-resource-collection>
 <auth-constraint>
     <role-name>member</role-name>
 </auth-constraint>
</security-constraint>
<!-- Define the Login Configuration for this Application -->
<login-config>
 <auth-method>BASIC</auth-method>
 <realm-name>My Club Members-only Area</realm-name>
</login-config>

6Q配|单点登录(Single Sign-OnQ?BR>一旦你讄了realm和验证的ҎQ你需要进行实际的用户d处理。一般说来,对用戯言dpȝ是一件很ȝ的事情,你必d量减用L录验证的ơ数。作为缺省的情况Q当用户W一ơ请求受保护的资源时Q每一个web应用都会要求用户d。如果你q行了多个web应用Qƈ且每个应用都需要进行单独的用户验证Q那q看h有点像你在与你的用h斗。用户们不知道怎样才能把多个分ȝ应用整合成一个单独的pȝQ所有他们也׃知道他们需要访问多个不同的应用,只是很迷惑,Z么总要不停的登录?BR>
Tomcat 4的“single sign-on”特性允许用户在讉K同一虚拟L下所有web应用Ӟ只需d一ơ。ؓ了用这个功能,你只需要在Host上添加一个SingleSignOn Valve元素卛_Q如下所C:

<Valve className="org.apache.catalina.authenticator.SingleSignOn"
      debug="0"/>

在Tomcat初始安装后,server.xml的注释里面包括SingleSignOn Valve配置的例子,你只需要去掉注释,卛_使用。那么,M用户只要dq一个应用,则对于同一虚拟L下的所有应用同h效?BR>
使用single sign-on valve有一些重要的限制Q?BR>1> value必须被配|和嵌套在相同的Host元素里,q且所有需要进行单炚w证的web应用Q必通过context元素定义Q都位于该Host下?BR>2> 包括׃n用户信息的realm必须被设|在同一UHost中或者嵌套之外?BR>3> 不能被context中的realm覆盖?BR>4> 使用单点d的web应用最好用一个Tomcat的内|的验证方式Q被定义在web.xml中的<auth-method>中)Q这比自定义的验证方式强QTomcat内置的的验证方式包括basic、digest、form和client-cert?BR>5> 如果你用单点登录,q希望集成一个第三方的web应用C的网站中来,q且q个新的web应用使用它自q验证方式Q而不使用容器理安全Q那你基本上没招了。你的用hơ登录原来所有应用时需要登录一ơ,q且在请求新的第三方应用时还得再d一ơ。当Ӟ如果你拥有这个第三方web应用的源码,而你又是一个程序员Q你可以修改它,但那恐怕也不容易做?BR>6> 单点d需要用cookies?BR>
7Q配|用户定制目录(Customized User DirectoresQ?BR>一些站点允怸别用户在服务器上发布|页。例如,一所大学的学院可能想l每一位学生一个公共区域,或者是一个ISP希望l一些webI间l他的客P但这又不是虚拟主机。在q种情况下,一个典型的Ҏ是在用户名前面加一个特D字W(~Q,作ؓ每位用户的网站,比如Q?BR>
http://www.cs.myuniversity.edu/~username
http://members.mybigisp.com/~username

Tomcat提供两种Ҏ在主Z映射q些个h|站Q主要用一对特D的Listener元素。Listener的className属性应该是org.apache.catalina.startup.UserConfigQuserClass属性应该是几个映射cM一。如果你的系l是UnixQ它有一个标准的/etc/passwd文gQ该文g中的帐号能够被运行中的Tomcat很容易的dQ该文g指定了用Lȝ录,使用PasswdUserDatabase 映射cR?BR>
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html"
userClass="org.apache.catalina.startup.PasswdUserDatabase"/>

web文g需要放|在?home/users/ian/public_html 或?/users/jbrittain/public_html一L目录下面。当然你也可以改变public_html 到其他Q何子目录下?BR>
实际上,q个用户目录Ҏ不一定需要位于用户主目录下里面。如果你没有一个密码文Ӟ但你又想把一个用户名映射到公q?home一L录的子目录里面,则可以用HomesUserDatabasecR?BR>
<Listener className="org.apache.catalina.startup.UserConfig"
directoryName="public_html" homeBase="/home"
userClass="org.apache.catalina.startup.HomesUserDatabase"/>

q样一来,web文g可以位于像/home/ian/public_html 或?/home/jasonb/public_html一L目录下。这UŞ式对Windows而言更加有利Q你可以使用一个像c:\homeq样的目录?BR>
q些Listener元素Q如果出玎ͼ则必dHost元素里面Q而不能在context元素里面Q因为它们都用应用于Host本n?BR>

8Q在Tomcat中用CGI脚本
Tomcat主要是作为Servlet/JSP容器Q但它也有许多传lweb服务器的性能。支持通用|关接口QCommon Gateway InterfaceQ即CGIQ就是其中之一QCGI提供一l方法在响应览器请求时q行一些扩展程序。CGI之所以被UCؓ通用Q是因ؓ它能在大多数E序或脚本中被调用,包括QPerlQPythonQawkQUnix shell scripting{,甚至包括Java。当Ӟ你大概不会把一个Java应用E序当作CGI来运行,毕竟q样太过原始。一般而言Q开发Servlet总要比CGIh更好的效率,因ؓ当用LM个链接或一个按钮时Q你不需要从操作pȝ层开始进行处理?BR>
Tomcat包括一个可选的CGI ServletQ允怽q行遗留下来的CGI脚本?BR>
Z使Tomcat能够q行CGIQ你必须做如下几件事Q?BR>1. 把servlets-cgi.renametojar Q在CATALINA_HOME/server/lib/目录下)改名为servlets-cgi.jar。处理CGI的servlet应该位于Tomcat的CLASSPATH下?BR>2. 在Tomcat的CATALINA_BASE/conf/web.xml 文g中,把关?lt;servlet-name> CGI的那D늚注释LQ默认情况下Q该D位于第241行)?BR>3. 同样Q在Tomcat的CATALINA_BASE/conf/web.xml文g中,把关于对CGIq行映射的那D늚注释LQ默认情况下Q该D位于第299行)。注意,q段内容指定了HTML链接到CGI脚本的访问方式?BR>4. 你可以把CGI脚本攄在WEB-INF/cgi 目录下(注意QWEB-INF是一个安全的地方Q你可以把一些不惌用户看见或基于安全考虑不想暴露的文件放在此处)Q或者你也可以把CGI脚本攄在context下的其他目录下,qؓCGI Servlet调整cgiPathPrefix初始化参数。这指定的CGI Servlet的实际位|,且不能与上一步指定的URL重名?BR>5. 重新启动TomcatQ你的CGI可以运行了?BR>
在Tomcat中,CGIE序~省攄在WEB-INF/cgi目录下,正如前面所提示的那PWEB-INF目录受保护的Q通过客户端的览器无法窥探到其中内容Q所以对于放|含有密码或其他敏感信息的CGI脚本而言Q这是一个非常好的地斏Vؓ了兼容其他服务器Q尽你也可以把CGI脚本保存在传l的/cgi-bin目录Q但要知道,在这些目录中的文件有可能被网上好奇的冲浪者看到。另外,在Unix中,L定运行Tomcat的用h执行CGI脚本的权限?BR>
9Q改变Tomcat中的JSP~译器(JSP CompilerQ?BR>在Tomcat 4.1Q或更高版本Q大概)QJSP的编译由包含在Tomcat里面的AntE序控制器直接执行。这听v来有一点点奇怪,但这正是Ant有意Z的一部分Q有一个API文指导开发者在没有启动一个新的JVM的情况下Q用Ant。这是用Antq行Java开发的一大优ѝ另外,q也意味着你现在能够在Ant中用Q何javac支持的编译方式,q里有一个关于Apache Ant使用手册的javac page列表。用v来是Ҏ的,因ؓ你只需要在<init-param> 元素中定义一个名字叫“compiler”,q且在value中有一个支持编译的~译器名字,CZ如下Q?BR>
<servlet>
   <servlet-name>jsp</servlet-name>
   <servlet-class>
     org.apache.jasper.servlet.JspServlet
   </servlet-class>
   <init-param>
     <param-name>logVerbosityLevel</param-name>
     <param-value>WARNING</param-value>
   </init-param>
   <init-param>
     <param-name>compiler</param-name>
     <param-value>jikes</param-value>
   </init-param>
   <load-on-startup>3</load-on-startup>
</servlet>

当然Q给出的~译器必dl安装在你的pȝ中,q且CLASSPATH可能需要设|,那处决于你选择的是何种~译器?BR>
10Q限制特定主问(Restricting Access to Specific HostsQ?BR>有时Q你可能想限制对Tomcat web应用的访问,比如Q你希望只有你指定的L或IP地址可以讉K你的应用。这样一来,只有那些指定的的客L可以讉K服务的内容了。ؓ了实现这U效果,Tomcat提供了两个参C你配|:RemoteHostValve 和RemoteAddrValve?BR>
通过配置q两个参敎ͼ可以让你qo来自h的主机或IP地址Qƈ允许或拒l哪些主?IP。与之类似的Q在Apache的httpd文g里有Ҏ个目录的允许/拒绝指定?BR>例如你可以把Admin Web application讄成只允许本地讉KQ设|如下:

<Context path="/path/to/secret_files" ...>
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
        allow="127.0.0.1" deny=""/>
</Context>

如果没有l出允许L的指定,那么与拒l主机匹配的L׃被拒l,除此之外的都是允许的。与之类|如果没有l出拒绝L的指定,那么与允怸机匹配的L׃被允许,除此之外的都是拒l的?img src ="http://www.tkk7.com/rodney/aggbug/15128.html" width = "1" height = "1" />

rodney 2005-10-10 12:19 发表评论
]]>
վ֩ģ壺 þþþAVۺϲҰ| avվ| ޵һseվ| ˳Ļ| 911Ʒձ| hƵѹۿ| ҳվ߹ۿ| ޸mv| ޹Ʒxo߹ۿ| Ƶַ| kkk4444߹ۿ| ޾Ʒþþþ | Ƭѿڵ| Ů׽Ƶ| Ұ߹ۿ3| avվëƬ| ɫavһ| Ů˱Ū߳Ƶ| Ůڵվ| ѹʵj߹ۿ| ۺ| Դ̼ƬƵ | ˳Ƶ߹ۿ| ձһƵۿ| һëƬaѲɫӰ | avһۿ | պƷһҳһ| AVպAV| ɫͼۺվ| ۺϳַ| ڵһ| Ʒһ24Ƶ| aѹۿ| ձɫڹۿ| ޹ۺ| ޾Ʒa߹ۿapp| պþþþþ| ɫĻ߹ۿ| žžþùƷ6| ͵Ƶѹۿ| պѸƵ|