﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>语源科技BlogJava-No pains, No gain</title><link>http://www.blogjava.net/honolulu14/</link><description>走过、路过、千万别错过</description><language>zh-cn</language><lastBuildDate>Wed, 15 Apr 2026 13:45:14 GMT</lastBuildDate><pubDate>Wed, 15 Apr 2026 13:45:14 GMT</pubDate><ttl>60</ttl><item><title>javascript 增加一行 ，并且背景要一致</title><link>http://www.blogjava.net/honolulu14/archive/2007/01/18/94636.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Thu, 18 Jan 2007 06:39:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2007/01/18/94636.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/94636.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2007/01/18/94636.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/94636.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/94636.html</trackback:ping><description><![CDATA[
		<div id="world">
				<p>
						<font face="Times New Roman">表格部分代码如下：</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;table id="testTbl" border=1&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;tr id="tr1"&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;td width=6%&gt;&lt;input type=checkbox id="box1"&gt;&lt;/td&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;td id="b"&gt;第一行&lt;/td&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;/tr&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;tr id="tr2"&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;td width=6%&gt;&lt;input type=checkbox id="box2"&gt;&lt;/td&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;td id="b"&gt;第二行&lt;/td&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;/tr&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;tr&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;td width=6%&gt;&lt;input type=checkbox id="box3"&gt;&lt;/td&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;td&gt;第三行&lt;/td&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;/tr&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;/table&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">动态添加表行的javascript函数如下：</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;script language="javascript"&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">function addRow(){</font>
				</p>
				<p>
						<font face="Times New Roman">//添加一行</font>
				</p>
				<p>
						<font face="Times New Roman">var newTr = testTbl.insertRow();</font>
				</p>
				<p>
						<font face="Times New Roman">//设置行背景</font>
				</p>
				<p>
						<font face="Times New Roman">newTr.bgColor = '#008040';</font>
				</p>
				<p>
						<font face="Times New Roman">//添加两列</font>
				</p>
				<p>
						<font face="Times New Roman">var newTd0 = newTr.insertCell();</font>
				</p>
				<p>
						<font face="Times New Roman">var newTd1 = newTr.insertCell();</font>
				</p>
				<p>
						<font face="Times New Roman">//设置列内容和属性</font>
				</p>
				<p>
						<font face="Times New Roman">newTd0.innerHTML = '&lt;input type=checkbox id="box4"&gt;'; </font>
				</p>
				<p>
						<font face="Times New Roman">newTd1.innerText= '新增加的行';<br />}<br />&lt;/script&gt;</font>
				</p>
				<p>
						<font face="Times New Roman">&lt;BR&gt;<br />&lt;a href="#" onclick="addRow();"&gt;增加一行&lt;/a&gt;</font>
				</p>
				<font face="Times New Roman">
						<p>
								<br />就这么简单，做点详细的说明：</p>
						<p>1、inserRow()和insertCell()函数</p>
						<p>insertRow()函数可以带参数，形式如下：</p>
						<p>insertRow(index)</p>
						<p>这个函数将新行添加到index的那一行前，比如insertRow(0),是将新行添加到第一行之前。默认的insertRow()函数相当于insertRow(-1),将新行添加到表的最后。</p>
						<p>insertCell()和insertRow的用法相同。</p>
						<p>2、动态设置属性和事件</p>
						<p>上面行数中的innerHTML和innerText都是列的属性。</p>
						<p>这个inner，就是“inner”到&lt;tb&gt;&lt;/tb&gt;之间，innerText是添加到&lt;tb&gt;&lt;/tb&gt;之间的文本，innerHTML是添加到&lt;tb&gt;&lt;/tb&gt;之间的HTML代码(这个so简单，这个解释挺多余的)</p>
						<p>设置其他属性也是用同样的方式，比如，设置行背景色</p>
						<p>newTr.bgColor = 'red';</p>
						<p> </p>
						<p>设置事件也一样，需要简单说明一点。</p>
						<p>比如，我要让点击新加行的时候执行一个自己定义的函数 newClick,newClick行数如下：</p>
						<p>function newClick(){</p>
						<p>alert("这是新添加的行");</p>
						<p>｝</p>
						<p>对onclick事件设置这个函数的代码如下：</p>
						<p>newTr.onclick = newClick;</p>
						<p>这里需要主义的是，＝后面的部分必须是函数名,而且不能带引号，</p>
						<p>newTr.onclick = newClick();</p>
						<p>newTr.onclick = 'newClick';</p>
						<p>newTr.onclick = "newClick"; </p>
						<p>
						</p>
						<p>上面的写法都是错误的。</p>
						<p>为什么，其实知道为什么没有什么意思，知道怎么用就OK了，如果不想知道，可以跳过下面这一段。</p>
						<p> </p>
						<p>实际上这个=后面的newClick是指向自己定义的newClick函数的指针，javascript里面函数名就是指向函数的指针，加了引号括号什么的浏览器就找不到那个函数了。</p>
						<p>下面的写法，也是正确的</p>
						<p>newTr.onclick = function newClick(){</p>
						<p>alert("这是新添加的行");</p>
						<p>｝</p>
						<p>这个使用函数名实际上是一样的</p>
						<p>设置其他的事件用法相同。</p>
				</font>
		</div>
<img src ="http://www.blogjava.net/honolulu14/aggbug/94636.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2007-01-18 14:39 <a href="http://www.blogjava.net/honolulu14/archive/2007/01/18/94636.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE程序中使用oracle数据库LOB字段的总结(elathen)</title><link>http://www.blogjava.net/honolulu14/archive/2007/01/16/94225.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Tue, 16 Jan 2007 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2007/01/16/94225.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/94225.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2007/01/16/94225.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/94225.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/94225.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td align="middle" colspan="2" height="30">
										<span style="FONT-SIZE: 12pt">
												<b>J2EE程序中使用oracle数据库LOB字段的总结(elathen)</b>
										</span>
								</td>
						</tr>
						<tr>
								<td align="middle" colspan="2" height="30">   http://www.souzz.net 2005-10-23 文章出处：博客园</td>
						</tr>
						<tr>
								<td valign="top" width="2%"> </td>
								<td valign="top" width="98%">
										<table style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<table cellspacing="0" cellpadding="0" align="left" border="0">
																				<tbody>
																						<tr>
																								<td>
																										<!-- 广告开始 -->
																										<script src="/ad/oa.js">
																										</script>
																										<table cellspacing="0" cellpadding="0" width="250" border="0">
																												<tbody>
																														<tr align="left">
																																<td height="250">
																																		<iframe marginwidth="0" marginheight="0" src="/ad/oa.htm" frameborder="0" width="300" scrolling="no" height="250">
																																		</iframe>
																																</td>
																														</tr>
																												</tbody>
																										</table>
																										<!-- 广告结束 -->
																								</td>
																						</tr>
																				</tbody>
																		</table>     
<p>posted on 2005-05-27 09:36 <a href="http://xnxqs.cnblogs.com/">轻松逍遥子</a></p><p>最近在J2EE的项目中需要使用LOB字段保存文本信息以及图片和文件,到网上搜拉一下,还不少,仔细看拉一下,但都不是很全有的还有错误,经过几天的实践,把问题都解决拉,顺便总结一下,希望对需要的朋友有点参考 <br /><br />LOB中我们用的比较多的主要有两种CLOB和BLOB,我们对两种类型分别讨论 <br /><br />1.CLOB是字符型LOB,主要存储文本信息,,最长为4G.,在J2EE程序中,比如网页的textarea中的字符信息比较长,Varchar2字段类型不能满足时,我们就得用CLOB数据类型,我们这次项目中就碰到这种情况.现在我们先说说如何存取CLOB字段 <br /><br />现在我要把网页中的textarea元素的信息保存到数据库的CLOB字段中, 我们都知道textarea中的信息当然不能直接保存成CLOB,我们在后台得到的是String类型的,不多说拉,我们还是以一个实例讲吧! <br /><br />先建一个test表,表有2个字段:ID,CONTENTS,其中CONTENTS保存CLOB类型的文本数据 <br /><br />create table TEST <br />( <br />ID VARCHAR2(18) not null, <br />CONTENTS CLOB, <br />) <br /><br />接着我们编写一个测试用的jsp文件ClobTest.jsp,代码如下 <br /><br /><br /><br />&lt;%@ page language="java" contentType="text/html; charset=gb2312" %&gt; <br /><br />&lt;html&gt; <br /><br />&lt;head&gt; <br /><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br /><br />&lt;title&gt;Clob对象的存取测试&lt;/title&gt; <br /><br />&lt;/head&gt; <br /><br /><br /><br />&lt;body&gt; <br /><br />&lt;form name="test" method="post" action="clobTest.action"&gt; <br /><br />&lt;table width="80%" height="88" border="0" align="center" cellpadding="0" cellspacing="0"&gt; <br /><br />&lt;tr&gt; <br /><br />&lt;td height="30" align="center"&gt;输入ID号&lt;input type="text" name="ID"&gt; <br /><br />&lt;/tr&gt; <br /><br />&lt;tr&gt; <br /><br />&lt;td align="center"&gt; <br /><br />&lt;textarea rows="28" cols="68" name="CONTENTS"&gt; <br /><br />注册用户需遵守: <br /><br />尊重会员个人隐私、保障会员隐私安全是CSDN的一项基本政策，CSDN不会公开、编辑或透露会员的注册资料，除非符合以下情况： <br />(1) 根据中华人民共和国国家安全机构、公安部门的要求及根据相应的法律程序要求。 <br />(2) 维护CSDN的商标所有权及其它权益。 <br />(3) 在紧急情况下竭力维护会员个人、其它社会个体和社会大众的安全。 <br />(4) 严重违反CSDN有关规定。 <br />CSDN保留结束会员使用网络服务资格的权利，并保证结束会员资格后仍为会员保密所有个人隐私。 <br /><br />&lt;/textarea&gt; <br /><br />&lt;/td&gt; <br /><br />&lt;/tr&gt; <br /><br />&lt;tr&gt; <br /><br />&lt;td align="center"&gt; <br /><br />&lt;input type="submit" name="Submit" value="提交"&gt; <br /><br />&lt;/td&gt; <br /><br />&lt;/tr&gt; <br /><br />&lt;/table&gt; <br /><br />&lt;/form&gt; <br /><br />&lt;/body&gt; <br /><br />&lt;/html&gt; <br /><br />点击”提交”按钮,我们在后台的到的是2个String类型的对象 <br /><br />String strID = request.getParameter(“ID”); <br /><br />String strCONTENTS = request.getParameter(“CONTENTS”); <br /><br />接着我们要做的任务就是如何把String类型CONTENTS存到数据库中的CLOB类型字段中! <br /><br />注意:LOB数据不能象其它类型数据一样直接插入（INSERT）。插入前必须先插入一个空的LOB对象，CLOB类型的空对象为EMPTY_CLOB()，BLOB类型的空对象为EMPTY_BLOB()。之后通过SELECT命令查询得到先前插入的记录并锁定，继而将空对象修改为所要插入的LOB对象。 <br /><br />//我们先插入一个空的CLOB对象 <br /><br />public int insertEmptyClob() throws Exception { <br /><br />Statement statement = null; <br /><br />int intResult = -1; <br /><br />try { <br /><br />//创建数据库操作语句 <br /><br />statement = connection.createStatement(); <br /><br />//定义SQL语句 <br /><br />String strSQL = “INSET INTO TEST (ID,CONTENTS) VALUES(strID, EMPTY_CLOB())”; <br /><br />//执行SQL语句 <br /><br />intResult = statement.executeUpdate(strSQL); <br /><br />System.out.println(" intResult valus is"+intResult); <br /><br />return intResult; <br /><br />} catch(Exception e) { <br /><br />e.printStackTrace(); <br /><br />return -1; <br /><br />} finally { <br /><br />if (statement != null) { <br /><br />statement.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br />//把strCONTENT插入CLOB字段 <br /><br />public void insertClob() throws Exception { <br /><br />Statement statement = null; <br /><br />ResultSet resultset = null; <br /><br />try { <br /><br />//设置不自动提交 <br /><br />connection.setAutoCommit(false); <br /><br />//创建数据库操作语句 <br /><br />statement = connection.createStatement(); <br /><br />//定义SQL语句 <br /><br />String strSQL = “SELECT CONTENTS FROM TEST WHERE ID=strID"” <br /><br />resultset = statement.executeQuery(strSQL); <br /><br />oracle.sql.CLOB contents = null; <br /><br />while(resultset.next()) { <br /><br />//取出CLOB对象 <br /><br />contents = (oracle.sql.CLOB)resultset.getClob("CONTENTS"); <br /><br />} <br /><br />Writer out = contents.getCharacterOutputStream(); <br /><br />out.write(strContents); <br /><br />out.flush(); <br /><br />out.close(); <br /><br />//数据库提交 <br /><br />connection.commit(); <br /><br />} catch(Exception e) { <br /><br />e.printStackTrace(); <br /><br />}finally{ <br /><br />if(resultset != null) { <br /><br />resultset.close(); <br /><br />} <br /><br />if(statement != null) { <br /><br />statement.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br />OK,我们已经把这段文本以CLOB字段的形式保存到数据库中了，在实际应用中，如果要保存或修改一条记录，我们要分2步做，先保存或修改非LOB字段类型的字段，再保存或修改LOB字段！接下来我们来把刚才保存到数据库中的CLOB字段读到jsp页面中去。 <br /><br />我们在保存的时候，CLOB字段会把上面textarea中的文本按原来的格式一行一行（包括空格）都保存到CLOB字段中，读取的时候我们只要按照原来格式读起出来就行了（我这里自己用了一个小处理方法，但如果你有更好的方法请告诉我）。在这里我们把CLOB读到StringBuffer中,为了保存不同行我在行之间加了个“&amp;”字符来区分。最后转化成String <br /><br />放到VO中，这样就保证从前台到后台，从后台到前台的数据传递的一致性！代码如下： <br /><br /><br /><br /><br /><br /><br /><br />/** <br /><br />* 获取CLOB文本对象 <br /><br />* @param sbSQL <br /><br />* @return <br /><br />* @throws java.lang.Exception <br /><br />*/ <br /><br />public String selectIncludeClob(StringBuffer sbSQL) throws Exception { <br /><br />Statement stmt = null; <br /><br />ResultSet rs = null; <br /><br />StringBuffer sbResult = new StringBuffer(); <br /><br />try { <br /><br />//设定数据库不自动提交 <br /><br />//connection.setAutoCommit(false); <br /><br />//创建数据库操作语句 <br /><br />stmt = connection.createStatement(); <br /><br />//获取结果集 <br /><br />rs = stmt.executeQuery(sbSQL.toString()); <br /><br /><br /><br />while(rs.next()) { <br /><br />CLOB clob = (CLOB)rs.getClob("CONTENTS"); <br /><br />Reader isClob = clob.getCharacterStream(); <br /><br />BufferedReader bfClob = new BufferedReader(isClob); <br /><br />String strClob = bfClob.readLine(); <br /><br />while(strClob != null) { <br /><br />sbResult.append(strClob); <br /><br />sbResult.append("&amp;"); <br /><br />strClob = bfClob.readLine(); <br /><br />} <br /><br />} <br /><br />//提交事务 <br /><br />// connection.commit(); <br /><br />} catch(Exception e) { <br /><br />e.printStackTrace(); <br /><br />throw e; <br /><br />} finally { <br /><br />if(rs != null) { <br /><br />rs.close(); <br /><br />} <br /><br />if(stmt != null) { <br /><br />stmt.close(); <br /><br />} <br /><br />} <br /><br />return sbResult.toString(); <br /><br />} <br /><br />到jsp页面中，我们从VO中获取改文本信息。 <br /><br />&lt;textarea rows="42" cols="68" name="CONTENTS" style="border-style: solid; border-color: #FFFFFF; font-family:仿宋_GB2312; font-size:14pt; line-height:200%; margin-top:8; margin-bottom:6" &gt; <br /><br />&lt;% <br /><br />String content = vo.getContent(); <br /><br />String[] contentArray = content.split("&amp;"); <br /><br />for(int i=0;i&lt;contentArray.length;i++) { <br /><br />String s= contentArray[i]; <br /><br />out.println(s); <br /><br />} <br /><br />%&gt; <br /><br />&lt;/textarea&gt; <br /><br />这样我们就保证什么格式保存就以什么格式显示。 <br /><br />2．BLOB字段,二进制LOB，主要存储二进制数据，最长为4G，在J2EE程序中，一般类似于图片和文件的保存。当然也有另一种方法，就把图片和文件保存在硬盘上，数据库中只保存图片的链接地址和文件在服务器上的路径。如果遇到文件和图片比较重要的还是需要保存到数据库中（例如：我们做国土资源项目的时候，好多图片、文件就很重要，需要保存到数据库中）,下面我写一个保存文件到数据库的Blob字段和从数据库的Blob字段中获取文件的方法（当然完全应用还要做其他工作，这里就不多说了，如果你不清楚的可以问我）： <br /><br />/** <br /><br />* 把上传的文件保存到数据库的Blob字段中 <br /><br />* @param strTableName 对应的表名称 <br /><br />* @param strColumnName 表中保存文件的Blob字段名称 <br /><br />* @param inputStream 输入的文件流 <br /><br />* @param sbSQLWhere where条件 <br /><br />* @throws java.lang.Exception <br /><br />*/ <br /><br />public static void fileUpload(String strTableName, <br /><br />String strColumnName, <br /><br />InputStream inputStream, <br /><br />StringBuffer sbSQLWhere) <br /><br />throws Exception { <br /><br />Connection con = null; <br /><br />ResultSet resultset = null; <br /><br />Statement stmt = null; <br /><br />try { <br /><br />//得到数据库连接 <br /><br />con = DBConnector.getConnection(); <br /><br />//构建查询语句 <br /><br />StringBuffer sbSQL = new StringBuffer(); <br /><br />sbSQL.append(" UPDATE "); <br /><br />sbSQL.append(strTableName); <br /><br />sbSQL.append(" SET "); <br /><br />sbSQL.append(strColumnName); <br /><br />sbSQL.append("=EMPTY_BLOB() "); <br /><br />sbSQL.append(sbSQLWhere); <br /><br />System.out.println(" update sql value is*******"+sbSQL.toString()); <br /><br />//获取数据库操作语句 <br /><br />stmt=con.createStatement(); <br /><br />//插入空的blob对象 <br /><br />stmt.executeUpdate(sbSQL.toString()); <br /><br />con.setAutoCommit(false); <br /><br />StringBuffer sbSQLBlob = new StringBuffer(); <br /><br />sbSQLBlob.append(" SELECT "); <br /><br />sbSQLBlob.append(strColumnName); <br /><br />sbSQLBlob.append(" FROM "); <br /><br />sbSQLBlob.append(strTableName); <br /><br />sbSQLBlob.append(sbSQLWhere); <br /><br />sbSQLBlob.append(" FOR UPDATE"); <br /><br />System.out.println(" select sql value is*********"+sbSQL.toString()); <br /><br />resultset =stmt.executeQuery(sbSQLBlob.toString()); <br /><br />while (resultset.next()) { <br /><br />/* 取出此BLOB对象 */ <br /><br />oracle.sql.BLOB blob = (oracle.sql.BLOB)resultset.getBlob("BODY"); <br /><br />/* 向BLOB对象中写入数据 */ <br /><br />BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream()); <br /><br />BufferedInputStream in = new BufferedInputStream(inputStream); <br /><br />int c; <br /><br />while ((c=in.read())!=-1) { <br /><br />out.write(c); <br /><br />} <br /><br />in.close(); <br /><br />out.close(); <br /><br />} <br /><br />con.setAutoCommit(false); <br /><br />con.commit(); <br /><br />} catch (Exception ex) { <br /><br />ex.printStackTrace(); <br /><br />throw ex; <br /><br />} finally { <br /><br />if (stmt != null) { <br /><br />stmt.close(); <br /><br />} <br /><br />if (resultset != null) { <br /><br />resultset.close(); <br /><br />} <br /><br />if (con!=null) { <br /><br />con.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br /><br /><br />下面的方法是从数据库中得到上传的文件的输入流，把输入流写到servlet流中，再从页面中获取，servlet就不写了。 <br /><br />/** <br /><br />* 方法描述：得到数据库上传的文件数据 <br /><br />* <br /><br />* 输入参数： 1：表名(String) <br /><br />* 2：字段名(String) <br /><br />* 3: Where条件(StringBuffer) <br /><br />* 5: 输出流(ServletOutputStream) <br /><br />* <br /><br />* 输出参数：void <br /><br />* 编写人: */ <br /><br />public static void getdownFile(String strTableName, <br /><br />String strColumnName, <br /><br />StringBuffer sbSQLWhere, <br /><br />ServletOutputStream sos) throws Exception { <br /><br />Connection con = null; <br /><br />PreparedStatement ps = null; <br /><br />ResultSet resultset = null; <br /><br />try { <br /><br />//得到数据库连接 <br /><br />con = DBConnector.getConnection(); <br /><br />StringBuffer sbSQL = new StringBuffer(); <br /><br />//构建查询语句 <br /><br />sbSQL.append(" SELECT " + strColumnName + " FROM " + strTableName); <br /><br />sbSQL.append(sbSQLWhere); <br /><br /><br /><br />System.out.println(" sql value is:"+sbSQLWhere.toString()); <br /><br /><br /><br />ps = con.prepareStatement(sbSQL.toString()); <br /><br />//执行查询 <br /><br />resultset = ps.executeQuery(); <br /><br />while (resultset.next()) { <br /><br />//读取数据流 <br /><br />InputStream is = resultset.getBinaryStream(strColumnName); <br /><br /><br /><br />byte[] buf = new byte[2048]; <br /><br />while(is.read(buf)!=-1) { <br /><br />//把数据流按块写到servlet的输出流中 <br /><br />sos.write(buf); <br /><br />} <br /><br /><br /><br />} <br /><br />} catch (Exception ex) { <br /><br />ex.printStackTrace(); <br /><br />throw ex; <br /><br />} finally { <br /><br />if (ps != null) { <br /><br />ps.close(); <br /><br />} <br /><br />if (resultset != null) { <br /><br />resultset.close(); <br /><br />} <br /><br />if (con!=null) { <br /><br />con.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br />图片的保存和文件的保存一样，如果不清楚的可以和我联系 <br /><br /><br /><br />后记： <br /><br />平时总忙着做项目，闲的时候也很懒，总想把自己实际中的一些问题和解决方法小结一下，但总没完成，这是第一次写，写的不好或不清楚的地方请包涵，下次改进，也希望大家多提意见，大家一起进步！！！！！！！！！！！</p></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/honolulu14/aggbug/94225.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2007-01-16 16:14 <a href="http://www.blogjava.net/honolulu14/archive/2007/01/16/94225.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>J2EE程序中使用oracle数据库LOB字段的总结(elathen)</title><link>http://www.blogjava.net/honolulu14/archive/2007/01/16/94224.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Tue, 16 Jan 2007 08:14:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2007/01/16/94224.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/94224.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2007/01/16/94224.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/94224.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/94224.html</trackback:ping><description><![CDATA[
		<table cellspacing="0" cellpadding="0" width="100%" border="0">
				<tbody>
						<tr>
								<td align="middle" colspan="2" height="30">
										<span style="FONT-SIZE: 12pt">
												<b>J2EE程序中使用oracle数据库LOB字段的总结(elathen)</b>
										</span>
								</td>
						</tr>
						<tr>
								<td align="middle" colspan="2" height="30">   http://www.souzz.net 2005-10-23 文章出处：博客园</td>
						</tr>
						<tr>
								<td valign="top" width="2%"> </td>
								<td valign="top" width="98%">
										<table style="TABLE-LAYOUT: fixed" cellspacing="0" cellpadding="0" width="100%" border="0">
												<tbody>
														<tr>
																<td>
																		<table cellspacing="0" cellpadding="0" align="left" border="0">
																				<tbody>
																						<tr>
																								<td>
																										<!-- 广告开始 -->
																										<script src="/ad/oa.js">
																										</script>
																										<table cellspacing="0" cellpadding="0" width="250" border="0">
																												<tbody>
																														<tr align="left">
																																<td height="250">
																																		<iframe marginwidth="0" marginheight="0" src="/ad/oa.htm" frameborder="0" width="300" scrolling="no" height="250">
																																		</iframe>
																																</td>
																														</tr>
																												</tbody>
																										</table>
																										<!-- 广告结束 -->
																								</td>
																						</tr>
																				</tbody>
																		</table>     
<p>posted on 2005-05-27 09:36 <a href="http://xnxqs.cnblogs.com/">轻松逍遥子</a></p><p>最近在J2EE的项目中需要使用LOB字段保存文本信息以及图片和文件,到网上搜拉一下,还不少,仔细看拉一下,但都不是很全有的还有错误,经过几天的实践,把问题都解决拉,顺便总结一下,希望对需要的朋友有点参考 <br /><br />LOB中我们用的比较多的主要有两种CLOB和BLOB,我们对两种类型分别讨论 <br /><br />1.CLOB是字符型LOB,主要存储文本信息,,最长为4G.,在J2EE程序中,比如网页的textarea中的字符信息比较长,Varchar2字段类型不能满足时,我们就得用CLOB数据类型,我们这次项目中就碰到这种情况.现在我们先说说如何存取CLOB字段 <br /><br />现在我要把网页中的textarea元素的信息保存到数据库的CLOB字段中, 我们都知道textarea中的信息当然不能直接保存成CLOB,我们在后台得到的是String类型的,不多说拉,我们还是以一个实例讲吧! <br /><br />先建一个test表,表有2个字段:ID,CONTENTS,其中CONTENTS保存CLOB类型的文本数据 <br /><br />create table TEST <br />( <br />ID VARCHAR2(18) not null, <br />CONTENTS CLOB, <br />) <br /><br />接着我们编写一个测试用的jsp文件ClobTest.jsp,代码如下 <br /><br /><br /><br />&lt;%@ page language="java" contentType="text/html; charset=gb2312" %&gt; <br /><br />&lt;html&gt; <br /><br />&lt;head&gt; <br /><br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br /><br />&lt;title&gt;Clob对象的存取测试&lt;/title&gt; <br /><br />&lt;/head&gt; <br /><br /><br /><br />&lt;body&gt; <br /><br />&lt;form name="test" method="post" action="clobTest.action"&gt; <br /><br />&lt;table width="80%" height="88" border="0" align="center" cellpadding="0" cellspacing="0"&gt; <br /><br />&lt;tr&gt; <br /><br />&lt;td height="30" align="center"&gt;输入ID号&lt;input type="text" name="ID"&gt; <br /><br />&lt;/tr&gt; <br /><br />&lt;tr&gt; <br /><br />&lt;td align="center"&gt; <br /><br />&lt;textarea rows="28" cols="68" name="CONTENTS"&gt; <br /><br />注册用户需遵守: <br /><br />尊重会员个人隐私、保障会员隐私安全是CSDN的一项基本政策，CSDN不会公开、编辑或透露会员的注册资料，除非符合以下情况： <br />(1) 根据中华人民共和国国家安全机构、公安部门的要求及根据相应的法律程序要求。 <br />(2) 维护CSDN的商标所有权及其它权益。 <br />(3) 在紧急情况下竭力维护会员个人、其它社会个体和社会大众的安全。 <br />(4) 严重违反CSDN有关规定。 <br />CSDN保留结束会员使用网络服务资格的权利，并保证结束会员资格后仍为会员保密所有个人隐私。 <br /><br />&lt;/textarea&gt; <br /><br />&lt;/td&gt; <br /><br />&lt;/tr&gt; <br /><br />&lt;tr&gt; <br /><br />&lt;td align="center"&gt; <br /><br />&lt;input type="submit" name="Submit" value="提交"&gt; <br /><br />&lt;/td&gt; <br /><br />&lt;/tr&gt; <br /><br />&lt;/table&gt; <br /><br />&lt;/form&gt; <br /><br />&lt;/body&gt; <br /><br />&lt;/html&gt; <br /><br />点击”提交”按钮,我们在后台的到的是2个String类型的对象 <br /><br />String strID = request.getParameter(“ID”); <br /><br />String strCONTENTS = request.getParameter(“CONTENTS”); <br /><br />接着我们要做的任务就是如何把String类型CONTENTS存到数据库中的CLOB类型字段中! <br /><br />注意:LOB数据不能象其它类型数据一样直接插入（INSERT）。插入前必须先插入一个空的LOB对象，CLOB类型的空对象为EMPTY_CLOB()，BLOB类型的空对象为EMPTY_BLOB()。之后通过SELECT命令查询得到先前插入的记录并锁定，继而将空对象修改为所要插入的LOB对象。 <br /><br />//我们先插入一个空的CLOB对象 <br /><br />public int insertEmptyClob() throws Exception { <br /><br />Statement statement = null; <br /><br />int intResult = -1; <br /><br />try { <br /><br />//创建数据库操作语句 <br /><br />statement = connection.createStatement(); <br /><br />//定义SQL语句 <br /><br />String strSQL = “INSET INTO TEST (ID,CONTENTS) VALUES(strID, EMPTY_CLOB())”; <br /><br />//执行SQL语句 <br /><br />intResult = statement.executeUpdate(strSQL); <br /><br />System.out.println(" intResult valus is"+intResult); <br /><br />return intResult; <br /><br />} catch(Exception e) { <br /><br />e.printStackTrace(); <br /><br />return -1; <br /><br />} finally { <br /><br />if (statement != null) { <br /><br />statement.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br />//把strCONTENT插入CLOB字段 <br /><br />public void insertClob() throws Exception { <br /><br />Statement statement = null; <br /><br />ResultSet resultset = null; <br /><br />try { <br /><br />//设置不自动提交 <br /><br />connection.setAutoCommit(false); <br /><br />//创建数据库操作语句 <br /><br />statement = connection.createStatement(); <br /><br />//定义SQL语句 <br /><br />String strSQL = “SELECT CONTENTS FROM TEST WHERE ID=strID"” <br /><br />resultset = statement.executeQuery(strSQL); <br /><br />oracle.sql.CLOB contents = null; <br /><br />while(resultset.next()) { <br /><br />//取出CLOB对象 <br /><br />contents = (oracle.sql.CLOB)resultset.getClob("CONTENTS"); <br /><br />} <br /><br />Writer out = contents.getCharacterOutputStream(); <br /><br />out.write(strContents); <br /><br />out.flush(); <br /><br />out.close(); <br /><br />//数据库提交 <br /><br />connection.commit(); <br /><br />} catch(Exception e) { <br /><br />e.printStackTrace(); <br /><br />}finally{ <br /><br />if(resultset != null) { <br /><br />resultset.close(); <br /><br />} <br /><br />if(statement != null) { <br /><br />statement.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br />OK,我们已经把这段文本以CLOB字段的形式保存到数据库中了，在实际应用中，如果要保存或修改一条记录，我们要分2步做，先保存或修改非LOB字段类型的字段，再保存或修改LOB字段！接下来我们来把刚才保存到数据库中的CLOB字段读到jsp页面中去。 <br /><br />我们在保存的时候，CLOB字段会把上面textarea中的文本按原来的格式一行一行（包括空格）都保存到CLOB字段中，读取的时候我们只要按照原来格式读起出来就行了（我这里自己用了一个小处理方法，但如果你有更好的方法请告诉我）。在这里我们把CLOB读到StringBuffer中,为了保存不同行我在行之间加了个“&amp;”字符来区分。最后转化成String <br /><br />放到VO中，这样就保证从前台到后台，从后台到前台的数据传递的一致性！代码如下： <br /><br /><br /><br /><br /><br /><br /><br />/** <br /><br />* 获取CLOB文本对象 <br /><br />* @param sbSQL <br /><br />* @return <br /><br />* @throws java.lang.Exception <br /><br />*/ <br /><br />public String selectIncludeClob(StringBuffer sbSQL) throws Exception { <br /><br />Statement stmt = null; <br /><br />ResultSet rs = null; <br /><br />StringBuffer sbResult = new StringBuffer(); <br /><br />try { <br /><br />//设定数据库不自动提交 <br /><br />//connection.setAutoCommit(false); <br /><br />//创建数据库操作语句 <br /><br />stmt = connection.createStatement(); <br /><br />//获取结果集 <br /><br />rs = stmt.executeQuery(sbSQL.toString()); <br /><br /><br /><br />while(rs.next()) { <br /><br />CLOB clob = (CLOB)rs.getClob("CONTENTS"); <br /><br />Reader isClob = clob.getCharacterStream(); <br /><br />BufferedReader bfClob = new BufferedReader(isClob); <br /><br />String strClob = bfClob.readLine(); <br /><br />while(strClob != null) { <br /><br />sbResult.append(strClob); <br /><br />sbResult.append("&amp;"); <br /><br />strClob = bfClob.readLine(); <br /><br />} <br /><br />} <br /><br />//提交事务 <br /><br />// connection.commit(); <br /><br />} catch(Exception e) { <br /><br />e.printStackTrace(); <br /><br />throw e; <br /><br />} finally { <br /><br />if(rs != null) { <br /><br />rs.close(); <br /><br />} <br /><br />if(stmt != null) { <br /><br />stmt.close(); <br /><br />} <br /><br />} <br /><br />return sbResult.toString(); <br /><br />} <br /><br />到jsp页面中，我们从VO中获取改文本信息。 <br /><br />&lt;textarea rows="42" cols="68" name="CONTENTS" style="border-style: solid; border-color: #FFFFFF; font-family:仿宋_GB2312; font-size:14pt; line-height:200%; margin-top:8; margin-bottom:6" &gt; <br /><br />&lt;% <br /><br />String content = vo.getContent(); <br /><br />String[] contentArray = content.split("&amp;"); <br /><br />for(int i=0;i&lt;contentArray.length;i++) { <br /><br />String s= contentArray[i]; <br /><br />out.println(s); <br /><br />} <br /><br />%&gt; <br /><br />&lt;/textarea&gt; <br /><br />这样我们就保证什么格式保存就以什么格式显示。 <br /><br />2．BLOB字段,二进制LOB，主要存储二进制数据，最长为4G，在J2EE程序中，一般类似于图片和文件的保存。当然也有另一种方法，就把图片和文件保存在硬盘上，数据库中只保存图片的链接地址和文件在服务器上的路径。如果遇到文件和图片比较重要的还是需要保存到数据库中（例如：我们做国土资源项目的时候，好多图片、文件就很重要，需要保存到数据库中）,下面我写一个保存文件到数据库的Blob字段和从数据库的Blob字段中获取文件的方法（当然完全应用还要做其他工作，这里就不多说了，如果你不清楚的可以问我）： <br /><br />/** <br /><br />* 把上传的文件保存到数据库的Blob字段中 <br /><br />* @param strTableName 对应的表名称 <br /><br />* @param strColumnName 表中保存文件的Blob字段名称 <br /><br />* @param inputStream 输入的文件流 <br /><br />* @param sbSQLWhere where条件 <br /><br />* @throws java.lang.Exception <br /><br />*/ <br /><br />public static void fileUpload(String strTableName, <br /><br />String strColumnName, <br /><br />InputStream inputStream, <br /><br />StringBuffer sbSQLWhere) <br /><br />throws Exception { <br /><br />Connection con = null; <br /><br />ResultSet resultset = null; <br /><br />Statement stmt = null; <br /><br />try { <br /><br />//得到数据库连接 <br /><br />con = DBConnector.getConnection(); <br /><br />//构建查询语句 <br /><br />StringBuffer sbSQL = new StringBuffer(); <br /><br />sbSQL.append(" UPDATE "); <br /><br />sbSQL.append(strTableName); <br /><br />sbSQL.append(" SET "); <br /><br />sbSQL.append(strColumnName); <br /><br />sbSQL.append("=EMPTY_BLOB() "); <br /><br />sbSQL.append(sbSQLWhere); <br /><br />System.out.println(" update sql value is*******"+sbSQL.toString()); <br /><br />//获取数据库操作语句 <br /><br />stmt=con.createStatement(); <br /><br />//插入空的blob对象 <br /><br />stmt.executeUpdate(sbSQL.toString()); <br /><br />con.setAutoCommit(false); <br /><br />StringBuffer sbSQLBlob = new StringBuffer(); <br /><br />sbSQLBlob.append(" SELECT "); <br /><br />sbSQLBlob.append(strColumnName); <br /><br />sbSQLBlob.append(" FROM "); <br /><br />sbSQLBlob.append(strTableName); <br /><br />sbSQLBlob.append(sbSQLWhere); <br /><br />sbSQLBlob.append(" FOR UPDATE"); <br /><br />System.out.println(" select sql value is*********"+sbSQL.toString()); <br /><br />resultset =stmt.executeQuery(sbSQLBlob.toString()); <br /><br />while (resultset.next()) { <br /><br />/* 取出此BLOB对象 */ <br /><br />oracle.sql.BLOB blob = (oracle.sql.BLOB)resultset.getBlob("BODY"); <br /><br />/* 向BLOB对象中写入数据 */ <br /><br />BufferedOutputStream out = new BufferedOutputStream(blob.getBinaryOutputStream()); <br /><br />BufferedInputStream in = new BufferedInputStream(inputStream); <br /><br />int c; <br /><br />while ((c=in.read())!=-1) { <br /><br />out.write(c); <br /><br />} <br /><br />in.close(); <br /><br />out.close(); <br /><br />} <br /><br />con.setAutoCommit(false); <br /><br />con.commit(); <br /><br />} catch (Exception ex) { <br /><br />ex.printStackTrace(); <br /><br />throw ex; <br /><br />} finally { <br /><br />if (stmt != null) { <br /><br />stmt.close(); <br /><br />} <br /><br />if (resultset != null) { <br /><br />resultset.close(); <br /><br />} <br /><br />if (con!=null) { <br /><br />con.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br /><br /><br />下面的方法是从数据库中得到上传的文件的输入流，把输入流写到servlet流中，再从页面中获取，servlet就不写了。 <br /><br />/** <br /><br />* 方法描述：得到数据库上传的文件数据 <br /><br />* <br /><br />* 输入参数： 1：表名(String) <br /><br />* 2：字段名(String) <br /><br />* 3: Where条件(StringBuffer) <br /><br />* 5: 输出流(ServletOutputStream) <br /><br />* <br /><br />* 输出参数：void <br /><br />* 编写人: */ <br /><br />public static void getdownFile(String strTableName, <br /><br />String strColumnName, <br /><br />StringBuffer sbSQLWhere, <br /><br />ServletOutputStream sos) throws Exception { <br /><br />Connection con = null; <br /><br />PreparedStatement ps = null; <br /><br />ResultSet resultset = null; <br /><br />try { <br /><br />//得到数据库连接 <br /><br />con = DBConnector.getConnection(); <br /><br />StringBuffer sbSQL = new StringBuffer(); <br /><br />//构建查询语句 <br /><br />sbSQL.append(" SELECT " + strColumnName + " FROM " + strTableName); <br /><br />sbSQL.append(sbSQLWhere); <br /><br /><br /><br />System.out.println(" sql value is:"+sbSQLWhere.toString()); <br /><br /><br /><br />ps = con.prepareStatement(sbSQL.toString()); <br /><br />//执行查询 <br /><br />resultset = ps.executeQuery(); <br /><br />while (resultset.next()) { <br /><br />//读取数据流 <br /><br />InputStream is = resultset.getBinaryStream(strColumnName); <br /><br /><br /><br />byte[] buf = new byte[2048]; <br /><br />while(is.read(buf)!=-1) { <br /><br />//把数据流按块写到servlet的输出流中 <br /><br />sos.write(buf); <br /><br />} <br /><br /><br /><br />} <br /><br />} catch (Exception ex) { <br /><br />ex.printStackTrace(); <br /><br />throw ex; <br /><br />} finally { <br /><br />if (ps != null) { <br /><br />ps.close(); <br /><br />} <br /><br />if (resultset != null) { <br /><br />resultset.close(); <br /><br />} <br /><br />if (con!=null) { <br /><br />con.close(); <br /><br />} <br /><br />} <br /><br />} <br /><br />图片的保存和文件的保存一样，如果不清楚的可以和我联系 <br /><br /><br /><br />后记： <br /><br />平时总忙着做项目，闲的时候也很懒，总想把自己实际中的一些问题和解决方法小结一下，但总没完成，这是第一次写，写的不好或不清楚的地方请包涵，下次改进，也希望大家多提意见，大家一起进步！！！！！！！！！！！</p></td>
														</tr>
												</tbody>
										</table>
								</td>
						</tr>
				</tbody>
		</table>
<img src ="http://www.blogjava.net/honolulu14/aggbug/94224.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2007-01-16 16:14 <a href="http://www.blogjava.net/honolulu14/archive/2007/01/16/94224.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>ajax缓存解决</title><link>http://www.blogjava.net/honolulu14/archive/2007/01/11/93169.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Thu, 11 Jan 2007 06:56:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2007/01/11/93169.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/93169.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2007/01/11/93169.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/93169.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/93169.html</trackback:ping><description><![CDATA[
		<div>方法1：</div>
		<ol>
				<li>xmlhttp.setRequestHeader("Cache-Control","no-cache"); 
</li>
				<li>url += "&amp;random="+Math.random(); 
</li>
				<li>url += "&amp;timestamp="+new Date().getTime(); </li>
		</ol>
		<p>方法二：</p>//处理页面缓存<br />  response.setHeader("Pragma","No-cache");<br />  response.setHeader("Cache-Control","no-cache");<br />  response.setDateHeader("Expires", 0); <img src ="http://www.blogjava.net/honolulu14/aggbug/93169.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2007-01-11 14:56 <a href="http://www.blogjava.net/honolulu14/archive/2007/01/11/93169.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 正则表达式经典 (转) </title><link>http://www.blogjava.net/honolulu14/archive/2006/12/04/85271.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Mon, 04 Dec 2006 01:36:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2006/12/04/85271.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/85271.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2006/12/04/85271.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/85271.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/85271.html</trackback:ping><description><![CDATA[
		<p>正则表达式经典 (转)<br />"^\d+$"　　//非负整数（正整数 + 0）</p>
		<p>"^[0-9]*[1-9][0-9]*$"　　//正整数</p>
		<p>"^((-\d+)|(0+))$"　　//非正整数（负整数 + 0）</p>
		<p>"^-[0-9]*[1-9][0-9]*$"　　//负整数</p>
		<p>"^-?\d+$"　　　　//整数</p>
		<p>"^\d+(\.\d+)?$"　　//非负浮点数（正浮点数 + 0）</p>
		<p>"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$"　　//正浮点数</p>
		<p>"^((-\d+(\.\d+)?)|(0+(\.0+)?))$"　　//非正浮点数（负浮点数 + 0）</p>
		<p>"^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$"　　//负浮点数</p>
		<p>"^(-?\d+)(\.\d+)?$"　　//浮点数</p>
		<p>"^[A-Za-z]+$"　　//由26个英文字母组成的字符串</p>
		<p>"^[A-Z]+$"　　//由26个英文字母的大写组成的字符串</p>
		<p>"^[a-z]+$"　　//由26个英文字母的小写组成的字符串</p>
		<p>"^[A-Za-z0-9]+$"　　//由数字和26个英文字母组成的字符串</p>
		<p>"^\w+$"　　//由数字、26个英文字母或者下划线组成的字符串</p>
		<p>"^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$"　　　　//email地址</p>
		<p>"^[a-zA-z]+://(\w+(-\w+)*)(\.(\w+(-\w+)*))*(\?\S*)?$" </p>
		<p>----------------------------------------------------------------------------------------------------------------------</p>
		<p>字符描述： \：将下一个字符标记为特殊字符或字面值。例如"n"与字符"n"匹配。"\n"与换行符匹配。序列"\\"与"\"匹配，"\("与"("匹配。</p>
		<p>^ ：匹配输入的开始位置。</p>
		<p>$ ：匹配输入的结尾。</p>
		<p>* ：匹配前一个字符零次或几次。例如，"zo*"可以匹配"z"、"zoo"。</p>
		<p>+ ：匹配前一个字符一次或多次。例如，"zo+"可以匹配"zoo",但不匹配"z"。</p>
		<p>? ：匹配前一个字符零次或一次。例如，"a?ve?"可以匹配"never"中的"ve"。</p>
		<p>.：匹配换行符以外的任何字符。</p>
		<p>(pattern) 与模式匹配并记住匹配。匹配的子字符串可以从作为结果的 Matches 集合中使用 Item [0]...[n]取得。如果要匹配括号字符(和 )，可使用"\(" 或 "\)"。</p>
		<p>x|y：匹配 x 或 y。例如 "z|food" 可匹配 "z" 或 "food"。"(z|f)ood" 匹配 "zoo" 或 "food"。</p>
		<p>{n}：n 为非负的整数。匹配恰好n次。例如，"o{2}" 不能与 "Bob 中的 "o" 匹配，但是可以与"foooood"中的前两个o匹配。</p>
		<p>{n,} ：n 为非负的整数。匹配至少n次。例如，"o{2,}"不匹配"Bob"中的"o"，但是匹配"foooood"中所有的o。"o{1,}"等价于"o+"。"o{0,}"等价于"o*"。</p>
		<p>{n,m} ：m 和 n 为非负的整数。匹配至少 n 次，至多 m 次。例如，"o{1,3}" 匹配 "fooooood"中前三个o。"o{0,1}"等价于"o?"。</p>
		<p>[xyz] ：一个字符集。与括号中字符的其中之一匹配。例如，"[abc]" 匹配"plain"中的"a"。</p>
		<p>[^xyz] ：一个否定的字符集。匹配不在此括号中的任何字符。例如，"[^abc]" 可以匹配"plain"中的"p".</p>
		<p>[a-z] ：表示某个范围内的字符。与指定区间内的任何字符匹配。例如，"[a-z]"匹配"a"与"z"之间的任何一个小写字母字符。</p>
		<p>[^m-z] ：否定的字符区间。与不在指定区间内的字符匹配。例如，"[m-z]"与不在"m"到"z"之间的任何字符匹配。</p>
		<p>\b ：与单词的边界匹配，即单词与空格之间的位置。例如，"er\b" 与"never"中的"er"匹配，但是不匹配"verb"中的"er"。</p>
		<p>\B ：与非单词边界匹配。"ea*r\B"与"never early"中的"ear"匹配。</p>
		<p>\d ：与一个数字字符匹配。等价于[0-9]。</p>
		<p>\D ：与非数字的字符匹配。等价于[^0-9]。</p>
		<p>\f ：与分页符匹配。</p>
		<p>\n ：与换行符字符匹配。</p>
		<p>\r ：与回车字符匹配。</p>
		<p>\s ：与任何白字符匹配，包括空格、制表符、分页符等。等价于"[ \f\n\r\t\v]"。</p>
		<p>\S ：与任何非空白的字符匹配。等价于"[^ \f\n\r\t\v]"。</p>
		<p>\t ：与制表符匹配。</p>
		<p>\v ：与垂直制表符匹配。</p>
		<p>\w ：与任何单词字符匹配，包括下划线。等价于"[A-Za-z0-9_]"。</p>
		<p>\W ：与任何非单词字符匹配。等价于"[^A-Za-z0-9_]"。</p>
		<p>\num ：匹配 num个，其中 num 为一个正整数。引用回到记住的匹配。例如，"(.)\1"匹配两个连续的相同的字符。</p>
		<p>\n：匹配 n，其中n 是一个八进制换码值。八进制换码值必须是 1, 2 或 3 个数字长。</p>
		<p>例如，"\11" 和 "\011" 都与一个制表符匹配。"\0011"等价于"\001" 与 "1"。八进制换码值不得超过 256。否则，只有前两个字符被视为表达式的一部分。允许在正则表达式中使用ASCII码。</p>
		<p>\xn：匹配n，其中n是一个十六进制的换码值。十六进制换码值必须恰好为两个数字长。例如，"\x41"匹配"A"。"\x041"等价于"\x04" 和 "1"。允许在正则表达式中使用 ASCII 码。</p>
		<p>　　 好了，常用的方法和属性就是这些了，上面的语法介绍的已经很详细了，我们就没有必要在罗嗦了，接下来我们来看看在具体的例子里面如何使用这些方法和属性来校验数据的合法性，我们还是举个例子吧，比如，我们想要对用户输入的电子邮件进行校验，那么，什么样的数据才算是一个合法的电子邮件呢？我可以这样输入：<a href="mailto:uestc95@263.net">uestc95@263.net</a>，当然我也会这样输入：<a href="mailto:xxx@yyy.com.cn">xxx@yyy.com.cn</a>,但是这样的输入就是非法的：<a href="mailto:xxx@@com.cn">xxx@@com.cn</a>或者@xxx.com.cn，等等，所以我们得出一个合法的电子邮件地址至少应当满足以下几个条件：</p>
		<p>1. 必须包含一个并且只有一个符号“@”</p>
		<p>2. 必须包含至少一个至多三个符号“.”</p>
		<p>3. 第一个字符不得是“@”或者“.”</p>
		<p>4. 不允许出现“@.”或者.@</p>
		<p>5. 结尾不得是字符“@”或者“.”</p>
		<p>所以根据以上的原则和上面表中的语法，我们很容易的就可以得到需要的模板如下："(\w)+[@]{1}(\w)+[.]{1，3}(\w)+"</p>
		<p>　　接下来我们仔细分析一下这个模板,首先“\w”表示邮件的开始字符只能是包含下划线的单词字符，这样，满足了第三个条件；“[@]{1}”表示在电子邮件中应当匹配并且只能匹配一次字符“@”,满足了条件一；同样的“[.]{1，3}”表示在电子邮件中至少匹配1个至多匹配3个字符“.” ，满足了第二个条件；模板最后的“(\w)+”表示结尾的字符只能是包含下划线在内的单词字符，满足了条件五；模板中间的“(\w)+”满足了条件四。</p>
		<p>　　然后，我们就直接调用刚才的那个函数CheckExp("(\w)+[@]{1}(\w)+[.]{1}(\w)+",待校验的字符串)就好了，如果返回True就表示数据是合法的，否则就是不正确的，怎么样，简单吧。我们还可以写出来校验身份证号码的模板："([0-9]){15}"；校验URL的模板："^http://{1}((\w)+[.]){1,3}"等等；我们可以看到，这些模板为我们提供了很好的可重利用的模块，利用自己或者别人提供的各种模板，我们就可以方便快捷的进行数据的合法性校验了，相信你一定会写出非常通用的模板的。</p>
		<p>　　这样，我们只要定制不同的模板，就可以实现对不同数据的合法性校验了。所以，正则表达式对象中最重要的属性就是：“Pattern”属性,只要真正掌握了这个属性，才可以自由的运用正则表达式对象来为我们的数据校验进行服务。</p>
		<p>
		</p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=560411</p>
<img src ="http://www.blogjava.net/honolulu14/aggbug/85271.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2006-12-04 09:36 <a href="http://www.blogjava.net/honolulu14/archive/2006/12/04/85271.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>TCP_IP协议详解学习笔记_卷1_第17-18章_TCP协议 </title><link>http://www.blogjava.net/honolulu14/archive/2006/12/04/85269.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Mon, 04 Dec 2006 01:35:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2006/12/04/85269.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/85269.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2006/12/04/85269.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/85269.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/85269.html</trackback:ping><description><![CDATA[
		<p>TCP协议　</p>
		<p>==&gt; TCP首部</p>
		<p>    源端口号、目的端口号、位序号、位确认序号、首部长度、标志位、窗口大小、检验和、紧急指针和其它选项。 <br />    <br />    一个IP地址和一个端口号也成为一个插口(socket)。插口对可唯一确定互联网中每个TCP连接的双方。</p>
		<p>
				<br />==&gt; TCP连接的建立与终止</p>
		<p>    TCP是一个面向连接的协议，无论哪方向另一方发送数据之前，都必须先在双方之间建立一条连接。<br />    TCP连接的建立——三次握手。<br />    TCP连接的终止——四次握手。这是由TCP的半关闭造成的。因为TCP是全双工的，因此每个方向必须单独的进行关闭。</p>
		<p>
				<br />==&gt; 最大报文段长度MSS</p>
		<p>    MSS越大，允许每个报文段传递的数据越多，相对TCP和IP的首部有更高的利用率。</p>
		<p>    有些情况下，MSS是可以在建立TCP连接时进行协商的选项，但是有些情况下不行 。</p>
		<p>    * 如果是本地网络，TCP可以根据网络外出接口处的MTU值减去固定的IP首部(20)和TCP长度(20)，对于以太网，可以达到1460。</p>
		<p>    * 如果IP地址为非本地的，则MSS通常定为默认值536字节（允许20字节的IP首部和20字节的TCP首部以适合576字节的IP数据报）。</p>
		<p>    MSS让主机限制另一端发送数据的长度，同时也能控制它自己发送数据报的长度，避免较小MTU发生分片。</p>
		<p>
				<br />==&gt; TCP的半关闭</p>
		<p>    TCP连接的一端在结束它的发送后还能接收来自另一端数据（直到它也发送FIN）的能力，这就是所谓的半关闭。应用程序很少用到。</p>
		<p>
				<br />==&gt; 复位报文段</p>
		<p>    * 不存在的端口（目的端口没有进程监听）。目的主机将对SYN请求返回一个RST报文段。（UDP则将产生一个端口不可达的信息）</p>
		<p>    * 异常终止。</p>
		<p>    * 检测半打开的连接。</p>
		<p>
				<br />==&gt; TCP服务器的设计</p>
		<p>    * 大多数TCP服务器的进程是并发的.</p>
		<p>    * 只有处于监听的进程才能处理客户端的连接请求.</p>
		<p>    * TCP服务器可以对本地IP地址进行限制,但是一般不能对远程IP地址进行限制.</p>
		<p>　　</p>
		<p>
				<br />
		</p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=561075</p>
<img src ="http://www.blogjava.net/honolulu14/aggbug/85269.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2006-12-04 09:35 <a href="http://www.blogjava.net/honolulu14/archive/2006/12/04/85269.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title> 区别：String类与string变量、堆与栈（转） </title><link>http://www.blogjava.net/honolulu14/archive/2006/12/04/85266.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Mon, 04 Dec 2006 01:31:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2006/12/04/85266.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/85266.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2006/12/04/85266.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/85266.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/85266.html</trackback:ping><description><![CDATA[
		<p>关于Java栈与堆的思考 <br />1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。与C++不同，Java自动管理栈和堆，程序员不能直接地设置栈或堆。</p>
		<p>2. 栈的优势是，存取速度比堆要快，仅次于直接位于CPU中的寄存器。但缺点是，存在栈中的数据大小与生存期必须是确定的，缺乏灵活性。另外，栈数据可以共享，详见第3点。堆的优势是可以动态地分配内存大小，生存期也不必事先告诉编译器，Java的垃圾收集器会自动收走这些不再使用的数据。但缺点是，由于要在运行时动态分配内存，存取速度较慢。</p>
		<p>3. Java中的数据类型有两种。<br />  一种是基本类型(primitive types), 共有8种，即int, short, long, byte, float, double, boolean, char(注意，并没有string的基本类型)。这种类型的定义是通过诸如int a = 3; long b = 255L;的形式来定义的，称为自动变量。值得注意的是，自动变量存的是字面值，不是类的实例，即不是类的引用，这里并没有类的存在。如int a = 3; 这里的a是一个指向int类型的引用，指向3这个字面值。这些字面值的数据，由于大小可知，生存期可知(这些字面值固定定义在某个程序块里面，程序块退出后，字段值就消失了)，出于追求速度的原因，就存在于栈中。<br />  另外，栈有一个很重要的特殊性，就是存在栈中的数据可以共享。假设我们同时定义</p>
		<p>  int a = 3; <br />  int b = 3；</p>
		<p>   编译器先处理int a = 3；首先它会在栈中创建一个变量为a的引用，然后查找有没有字面值为3的地址，没找到，就开辟一个存放3这个字面值的地址，然后将a指向3的地址。接着处理int b = 3；在创建完b的引用变量后，由于在栈中已经有3这个字面值，便将b直接指向3的地址。这样，就出现了a与b同时均指向3的情况。</p>
		<p>   特别注意的是，这种字面值的引用与类对象的引用不同。假定两个类对象的引用同时指向一个对象，如果一个对象引用变量修改了这个对象的内部状态，那么另一个对象引用变量也即刻反映出这个变化。相反，通过字面值的引用来修改其值，不会导致另一个指向此字面值的引用的值也跟着改变的情况。如上例，我们定义完a与 b的值后，再令a=4；那么，b不会等于4，还是等于3。在编译器内部，遇到a=4；时，它就会重新搜索栈中是否有4的字面值，如果没有，重新开辟地址存放4的值；如果已经有了，则直接将a指向这个地址。因此a值的改变不会影响到b的值。</p>
		<p>  另一种是包装类数据，如Integer, String, Double等将相应的基本数据类型包装起来的类。这些类数据全部存在于堆中，Java用new()语句来显示地告诉编译器，在运行时才根据需要动态创建，因此比较灵活，但缺点是要占用更多的时间。</p>
		<p>4. String是一个特殊的包装类数据。即可以用String str = new String("abc");的形式来创建，也可以用String str = "abc"；的形式来创建(作为对比，在JDK 5.0之前，你从未见过Integer i = 3;的表达式，因为类与字面值是不能通用的，除了String。而在JDK 5.0中，这种表达式是可以的！因为编译器在后台进行Integer i = new Integer(3)的转换)。前者是规范的类的创建过程，即在Java中，一切都是对象，而对象是类的实例，全部通过new()的形式来创建。Java 中的有些类，如DateFormat类，可以通过该类的getInstance()方法来返回一个新创建的类，似乎违反了此原则。其实不然。该类运用了单例模式来返回类的实例，只不过这个实例是在该类内部通过new()来创建的，而getInstance()向外部隐藏了此细节。那为什么在String str = "abc"；中，并没有通过new()来创建实例，是不是违反了上述原则？其实没有。</p>
		<p>5. 关于String str = "abc"的内部工作。Java内部将此语句转化为以下几个步骤：<br />  (1)先定义一个名为str的对String类的对象引用变量：String str；<br />   (2)在栈中查找有没有存放值为"abc"的地址，如果没有，则开辟一个存放字面值为"abc"的地址，接着创建一个新的String类的对象o，并将o 的字符串值指向这个地址，而且在栈中这个地址旁边记下这个引用的对象o。如果已经有了值为"abc"的地址，则查找对象o，并返回o的地址。<br />  (3)将str指向对象o的地址。<br />  值得注意的是，一般String类中字符串值都是直接存值的。但像String str = "abc"；这种场合下，其字符串值却是保存了一个指向存在栈中数据的引用！<br />  <br />  为了更好地说明这个问题，我们可以通过以下的几个代码进行验证。</p>
		<p>  String str1 = "abc";<br />  String str2 = "abc";<br />  System.out.println(str1==str2);  //true<br />  <br />  注意，我们这里并不用str1.equals(str2)；的方式，因为这将比较两个字符串的值是否相等。==号，根据JDK的说明，只有在两个引用都指向了同一个对象时才返回真值。而我们在这里要看的是，str1与str2是否都指向了同一个对象。<br />  结果说明，JVM创建了两个引用str1和str2，但只创建了一个对象，而且两个引用都指向了这个对象。</p>
		<p>  我们再来更进一步，将以上代码改成：</p>
		<p>  String str1 = "abc";<br />  String str2 = "abc";<br />  str1 = "bcd";<br />  System.out.println(str1 + "," + str2);  //bcd, abc<br />  System.out.println(str1==str2);  //false</p>
		<p>  这就是说，赋值的变化导致了类对象引用的变化，str1指向了另外一个新对象！而str2仍旧指向原来的对象。上例中，当我们将str1的值改为"bcd"时，JVM发现在栈中没有存放该值的地址，便开辟了这个地址，并创建了一个新的对象，其字符串的值指向这个地址。<br />   事实上，String类被设计成为不可改变(immutable)的类。如果你要改变其值，可以，但JVM在运行时根据新值悄悄创建了一个新对象，然后将这个对象的地址返回给原来类的引用。这个创建过程虽说是完全自动进行的，但它毕竟占用了更多的时间。在对时间要求比较敏感的环境中，会带有一定的不良影响。</p>
		<p>  再修改原来代码：</p>
		<p>  String str1 = "abc";<br />  String str2 = "abc";<br />  <br />  str1 = "bcd";<br />  <br />  String str3 = str1;<br />  System.out.println(str3);  //bcd</p>
		<p>  String str4 = "bcd";<br />  System.out.println(str1 == str4);  //true<br />    <br />  str3 这个对象的引用直接指向str1所指向的对象(注意，str3并没有创建新对象)。当str1改完其值后，再创建一个String的引用str4，并指向因str1修改值而创建的新的对象。可以发现，这回str4也没有创建新的对象，从而再次实现栈中数据的共享。</p>
		<p>  我们再接着看以下的代码。</p>
		<p>  String str1 = new String("abc");<br />  String str2 = "abc";<br />  System.out.println(str1==str2);  //false</p>
		<p>  创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。</p>
		<p>  String str1 = "abc";<br />  String str2 = new String("abc");<br />  System.out.println(str1==str2);  //false</p>
		<p>  创建了两个引用。创建了两个对象。两个引用分别指向不同的两个对象。</p>
		<p>  以上两段代码说明，只要是用new()来新建对象的，都会在堆中创建，而且其字符串是单独存值的，即使与栈中的数据相同，也不会与栈中的数据共享。</p>
		<p>6. 数据类型包装类的值不可修改。不仅仅是String类的值不可修改，所有的数据类型包装类都不能更改其内部的值。</p>
		<p>7. 结论与建议：</p>
		<p>   (1)我们在使用诸如String str = "abc"；的格式定义类时，总是想当然地认为，我们创建了String类的对象str。担心陷阱！对象可能并没有被创建！唯一可以肯定的是，指向 String类的引用被创建了。至于这个引用到底是否指向了一个新的对象，必须根据上下文来考虑，除非你通过new()方法来显要地创建一个新的对象。因此，更为准确的说法是，我们创建了一个指向String类的对象的引用变量str，这个对象引用变量指向了某个值为"abc"的String类。清醒地认识到这一点对排除程序中难以发现的bug是很有帮助的。</p>
		<p>  (2)使用String str = "abc"；的方式，可以在一定程度上提高程序的运行速度，因为JVM会自动根据栈中数据的实际情况来决定是否有必要创建新对象。而对于String str = new String("abc")；的代码，则一概在堆中创建新对象，而不管其字符串值是否相等，是否有必要创建新对象，从而加重了程序的负担。这个思想应该是享元模式的思想，但JDK的内部在这里实现是否应用了这个模式，不得而知。</p>
		<p>  (3)当比较包装类里面的数值是否相等时，用equals()方法；当测试两个包装类的引用是否指向同一个对象时，用==。</p>
		<p>  (4)由于String类的immutable性质，当String变量需要经常变换其值时，应该考虑使用StringBuffer类，以提高程序效率。<br /></p>
		<br />
		<br />
		<p id="TBPingURL">Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=561129</p>
<img src ="http://www.blogjava.net/honolulu14/aggbug/85266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2006-12-04 09:31 <a href="http://www.blogjava.net/honolulu14/archive/2006/12/04/85266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>提高JSP应用程序的七大秘籍绝招</title><link>http://www.blogjava.net/honolulu14/archive/2006/11/08/79947.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Wed, 08 Nov 2006 12:42:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2006/11/08/79947.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/79947.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2006/11/08/79947.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/79947.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/79947.html</trackback:ping><description><![CDATA[
		<div align="center">
				<font face="黑体" color="#333333" size="4">提高JSP应用程序的七大秘籍绝招</font>
		</div>
		<br />你时常被客户抱怨JSP页面响应速度很慢吗？你想过当客户访问次数剧增时，你的WEB应用能承受日益增加的访问量吗？本文讲述了调整JSP和servlet的一些非常实用的方法，它可使你的servlet和JSP页面响应更快，扩展性更强。而且在用户数增加的情况下，系统负载会呈现出平滑上长的趋势。在本文中，我将通过一些实际例子和配置方法使得你的应用程序的性能有出人意料的提升。<br /><br />       其中，某些调优技术是在你的编程工作中实现的。而另一些技术是与应用服务器的配置相关的。在本文中，我们将详细地描述怎样通过调整servlet和JSP页面，来提高你的应用程序的总体性能。在阅读本文之前，假设你有基本的servlet和JSP的知识。<br /><br />方法一：在servlet的init()方法中缓存数据<br /><br />当应用服务器初始化servlet实例之后，为客户端请求提供服务之前，它会调用这个servlet的init()方法。在一个servlet的生命周期中，init()方法只会被调用一次。通过在init()方法中缓存一些静态的数据或完成一些只需要执行一次的、耗时的操作，就可大大地提高系统性能。<br /><br />例如，通过在init()方法中建立一个JDBC连接池是一个最佳例子，假设我们是用jdbc2.0的DataSource接口来取得数据库连接，在通常的情况下，我们需要通过JNDI来取得具体的数据源。我们可以想象在一个具体的应用中，如果每次SQL请求都要执行一次JNDI查询的话，那系统性能将会急剧下降。解决方法是如下代码，它通过缓存DataSource，使得下一次SQL调用时仍然可以继续利用它：<br /><br /><center><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="635" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" width="627" bgcolor="#e6e6e6"><pre><ccid_code>public class ControllerServlet extends HttpServlet
{
　private javax.sql.DataSource testDS = null; 
　public void init(ServletConfig config) throws ServletException
　{
　　super.init(config); 
　　Context ctx = null;
　　try
　　{ 
　　　ctx = new InitialContext();
　　　testDS = (javax.sql.DataSource)ctx.lookup("jdbc/testDS");
　　}
　　catch(NamingException ne)
　　{
　　　ne.printStackTrace(); 
　　}
　　catch(Exception e)
　　{
　　　e.printStackTrace();
　　}
　}
　public javax.sql.DataSource getTestDS()
　{
　　return testDS;
　}
　...
　... 
}</ccid_code></pre></td></tr></tbody></table></ccid_nobr></center><br /><br />方法 2:禁止servlet和JSP 自动重载(auto-reloading) <br /><br />     Servlet/JSP提供了一个实用的技术，即自动重载技术，它为开发人员提供了一个好的开发环境，当你改变servlet和JSP页面后而不必重启应用服务器。然而，这种技术在产品运行阶段对系统的资源是一个极大的损耗，因为它会给JSP引擎的类装载器(classloader)带来极大的负担。因此关闭自动重载功能对系统性能的提升是一个极大的帮助。 <br /><br />方法 3: 不要滥用HttpSession <br /><br />     在很多应用中，我们的程序需要保持客户端的状态，以便页面之间可以相互联系。但不幸的是由于HTTP具有天生无状态性，从而无法保存客户端的状态。因此一般的应用服务器都提供了session来保存客户的状态。在JSP应用服务器中，是通过HttpSession对像来实现session的功能的，但在方便的同时，它也给系统带来了不小的负担。因为每当你获得或更新session时，系统者要对它进行费时的序列化操作。你可以通过对HttpSession的以下几种处理方式来提升系统的性能。<br /><br />    如果没有必要，就应该关闭JSP页面中对HttpSession的缺省设置。 如果你没有明确指定的话，每个JSP页面都会缺省地创建一个HttpSession。如果你的JSP中不需要使用session的话，那可以通过如下的JSP页面指示符来禁止它：<br /><br /><center><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre><ccid_code>＜%@ page session="false"%＞</ccid_code></pre></td></tr></tbody></table></ccid_nobr></center><br /><br />不要在HttpSession中存放大的数据对像：如果你在HttpSession中存放大的数据对像的话，每当对它进行读写时，应用服务器都将对其进行序列化，从而增加了系统的额外负担。你在HttpSession中存放的数据对像越大，那系统的性能就下降得越快。 <br /><br />     当你不需要HttpSession时，尽快地释放它：当你不再需要session时，你可以通过调用HttpSession.invalidate()方法来释放它。尽量将session的超时时间设得短一点：在JSP应用服务器中，有一个缺省的session的超时时间。当客户在这个时间之后没有进行任何操作的话，系统会将相关的session自动从内存中释放。超时时间设得越大，系统的性能就会越低，因此最好的方法就是尽量使得它的值保持在一个较低的水平。 <br /><br />方法 4: 将页面输出进行压缩 <br /><br />    压缩是解决数据冗余的一个好的方法，特别是在网络带宽不够发达的今天。有的浏览器支持gzip(GNU zip)进行来对HTML文件进行压缩，这种方法可以戏剧性地减少HTML文件的下载时间。因此，如果你将servlet或JSP页面生成的HTML页面进行压缩的话，那用户就会觉得页面浏览速度会非常快。但不幸的是，不是所有的浏览器都支持gzip压缩，但你可以通过在你的程序中检查客户的浏览器是否支持它。下面就是关于这种方法实现的一个代码片段： <br /><br /><center><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="640" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" width="632" bgcolor="#e6e6e6"><pre><ccid_code>public void doGet(HttpServletRequest request, 
HttpServletResponse response)
throws IOException, ServletException 
{
　OutputStream out = null
　String encoding = request.getHeader("Accept-Encoding"); 
　if (encoding != null &amp;&amp; encoding.indexOf("gzip") != -1)
　{
　　request.setHeader("Content-Encoding" , "gzip");
　　out = new GZIPOutputStream(request.getOutputStream());
　}
　else if (encoding != null &amp;&amp; encoding.indexOf("compress") != -1)
　{
　　request.setHeader("Content-Encoding" , "compress");
　　out = new ZIPOutputStream(request.getOutputStream());
　} 
　else
　{
　　out = request.getOutputStream();
　}
　...
　... 
}</ccid_code></pre></td></tr></tbody></table></ccid_nobr></center><br /><br />方法 5: 使用线程池<br /><br />    应用服务器缺省地为每个不同的客户端请求创建一个线程进行处理，并为它们分派service()方法，当service()方法调用完成后，与之相应的线程也随之撤消。由于创建和撤消线程会耗费一定的系统资源，这种缺省模式降低了系统的性能。但所幸的是我们可以通过创建一个线程池来改变这种状况。<br /><br />    另外，我们还要为这个线程池设置一个最小线程数和一个最大线程数。在应用服务器启动时，它会创建数量等于最小线程数的一个线程池，当客户有请求时，相应地从池从取出一个线程来进行处理，当处理完成后，再将线程重新放入到池中。如果池中的线程不够地话，系统会自动地增加池中线程的数量，但总量不能超过最大线程数。通过使用线程池，当客户端请求急剧增加时，系统的负载就会呈现的平滑的上升曲线，从而提高的系统的可伸缩性。<br /><br />方法 6: 选择正确的页面包含机制<br /><br />在JSP中有两种方法可以用来包含另一个页面：<br /><br />1、使用include指示符<br /><br /><center><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre><ccid_code>＜%@ includee file=”test.jsp” %＞</ccid_code></pre></td></tr></tbody></table></ccid_nobr></center><br /><br />2、使用jsp指示符 <br /><br /><center><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="400" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" bgcolor="#e6e6e6"><pre><ccid_code>＜jsp:includee page=”test.jsp” flush=”true”/＞</ccid_code></pre></td></tr></tbody></table></ccid_nobr></center><br /><br />在实际中发现，如果使用第一种方法的话，可以使得系统性能更高。 <br /><br />方法 7:正确地确定javabean的生命周期 <br /><br />      JSP的一个强大的地方就是对javabean的支持。通过在JSP页面中使用＜jsp:useBean＞标签，可以将javabean直接插入到一个JSP页面中。它的使用方法如下： <br /><br /><center><ccid_nobr><table cellspacing="0" bordercolordark="#ffffff" cellpadding="2" width="665" align="center" bordercolorlight="black" border="1"><tbody><tr><td class="code" style="FONT-SIZE: 9pt" width="657" bgcolor="#e6e6e6"><pre><ccid_code>＜jsp:useBean id="name" scope="page|request|session|application" class="package.className" type="typeName"＞
＜/jsp:useBean＞</ccid_code></pre></td></tr></tbody></table></ccid_nobr></center><br /><br />其中scope属性指出了这个bean的生命周期。缺省的生命周期为page。如果你没有正确地选择bean的生命周期的话，它将影响系统的性能。 <br /><br />举例来说，如果你只想在一次请求中使用某个bean，但你却将这个bean的生命周期设置成了session，那当这次请求结束后，这个bean将仍然保留在内存中，除非session超时或用户关闭浏览器。这样会耗费一定的内存，并无谓的增加了JVM垃圾收集器的工作量。因此为bean设置正确的生命周期，并在bean的使命结束后尽快地清理它们，会使用系统性能有一个提高。 <br /><br />其它一些有用的方法 <br /><br />1、在字符串连接操作中尽量不使用“＋”操作符：在java编程中，我们常常使用“＋”操作符来将几个字符串连接起来，但你或许从来没有想到过它居然会对系统性能造成影响吧？由于字符串是常量，因此JVM会产生一些临时的对像。你使用的“＋”越多，生成的临时对像就越多，这样也会给系统性能带来一些影响。解决的方法是用StringBuffer对像来代替“＋”操作符。 <br /><br />2、避免使用System.out.println()方法：由于System.out.println()是一种同步调用，即在调用它时，磁盘I/O操作必须等待它的完成，因此我们要尽量避免对它的调用。但我们在调试程序时它又是一个必不可少的方便工具，为了解决这个矛盾，我建议你最好使用Log4j工具(http://Jakarta.apache.org )，它既可以方便调试，而不会产生System.out.println()这样的方法。 <br /><br />3、ServletOutputStream 与 PrintWriter的权衡：使用PrintWriter可能会带来一些小的开销，因为它将所有的原始输出都转换为字符流来输出，因此如果使用它来作为页面输出的话，系统要负担一个转换过程。而使用ServletOutputStream作为页面输出的话就不存在一个问题，但它是以二进制进行输出的。因此在实际应用中要权衡两者的利弊。 <br /><br />总结 <br /><br />     本文的目的是通过对servlet和JSP的一些调优技术来极大地提高你的应用程序的性能，并因此提升整个J2EE应用的性能。通过这些调优技术，你可以发现其实并不是某种技术平台（比如J2EE和.NET之争）决定了你的应用程序的性能，重要是你要对这种平台有一个较为深入的了解，这样你才能从根本上对自己的应用程序做一个优化。 <br /><br />本文来自：http://www.blogjava.net/sgsoft/articles/2378.html <br /><img src ="http://www.blogjava.net/honolulu14/aggbug/79947.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2006-11-08 20:42 <a href="http://www.blogjava.net/honolulu14/archive/2006/11/08/79947.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Servlet初始化</title><link>http://www.blogjava.net/honolulu14/archive/2006/10/30/78130.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Mon, 30 Oct 2006 11:54:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2006/10/30/78130.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/78130.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2006/10/30/78130.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/78130.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/78130.html</trackback:ping><description><![CDATA[
		<h1 style="MARGIN: 17pt 0cm 16.5pt; TEXT-ALIGN: center" align="center">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<font size="2">
								<span style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: 仿宋_GB2312; mso-bidi-font-size: 10.0pt">版权所有，转载请声明出处 </span>
								<b>
										<span lang="EN-US" style="FONT-SIZE: 9pt; COLOR: navy; FONT-FAMILY: Arial; mso-bidi-font-size: 10.0pt; mso-fareast-font-family: 仿宋_GB2312">zhyiwww@163.com</span>
								</b>
						</font>
				</span>
		</h1>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在读我自己的认识之前</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们先来看一下</span>
				<span lang="EN-US">servet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的结构图</span>
				<span lang="EN-US">:<br /></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span lang="EN-US">
						<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /?>
						<v:shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">
								<v:stroke joinstyle="miter">
								</v:stroke>
								<v:formulas>
										<v:f eqn="if lineDrawn pixelLineWidth 0">
										</v:f>
										<v:f eqn="sum @0 1 0">
										</v:f>
										<v:f eqn="sum 0 0 @1">
										</v:f>
										<v:f eqn="prod @2 1 2">
										</v:f>
										<v:f eqn="prod @3 21600 pixelWidth">
										</v:f>
										<v:f eqn="prod @3 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @0 0 1">
										</v:f>
										<v:f eqn="prod @6 1 2">
										</v:f>
										<v:f eqn="prod @7 21600 pixelWidth">
										</v:f>
										<v:f eqn="sum @8 21600 0">
										</v:f>
										<v:f eqn="prod @7 21600 pixelHeight">
										</v:f>
										<v:f eqn="sum @10 21600 0">
										</v:f>
								</v:formulas>
								<v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f">
								</v:path>
								<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
								<o:lock aspectratio="t" v:ext="edit">
								</o:lock>
						</v:shapetype>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">
						<img height="455" alt="servlet.png" src="http://www.blogjava.net/images/blogjava_net/zhyiwww/servlet.png" width="628" border="0" />
						<br />以下是我自己的一点浅见：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">①　</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在初始化的时候</span>
				<span lang="EN-US">,</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是通过</span>
				<span lang="EN-US">init(ServletConfig<span style="mso-spacerun: yes">  </span>config)</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
				<span lang="EN-US">init()</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来执行的。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个接口，它怎样传递给他一格对象来进行初始化呢？其实，是这个对象是由</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器来实例化的，由容器产生一格</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现类的对象，然后传递给</span>
				<span lang="EN-US">Servlet</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 16pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">结论：</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 16pt; COLOR: navy; mso-bidi-font-size: 10.0pt">ServletConfig</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 16pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">由容器实例化</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">②　</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们有些时候可能在</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化时给它一些固定的配置参数，那么这些参数是怎样传递到</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">呢？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实，我们在</span>
				<span lang="EN-US">web.xml</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中给</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">配置启动参数，在容器对</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行初始化的时候，会收集你所配置的参数，记录在</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的实现类中，所以你才可以通过</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象的</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>public String getInitParameter(String name);</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">或</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>public Enumeration getInitParameterNames();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法来取得你已经配置好的参数，也就是说，你对</span>
				<span lang="EN-US">servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置都已经记录在</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">对象中了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">结论：你对</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">Servlet</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的配置，在</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">Servlet</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的初始化时都由容器来收集并且记录到</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">ServletConfig</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的实现类中。</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US"> <o:p></o:p></span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">③　</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们来看一个</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的配置</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>&lt;servlet&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>&lt;servlet-name&gt;index&lt;/servlet-name&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>&lt;servlet-class&gt;org.zy.pro.sw.servlet.IndexServlet&lt;/servlet-class&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">    </span>&lt;init-param&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-name&gt;dbconfig&lt;/param-name&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-value&gt;/WEB-INF/dbconfig.xml&lt;/param-value&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">    </span>&lt;/init-param&gt;</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">
						<span style="mso-spacerun: yes">  </span>&lt;/servlet&gt;</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在此，我们实现对数据库的配置文件的加载。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">当</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">初始化完成后，我们可以通过</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">String<span style="mso-spacerun: yes">  </span>dbconf=this.getServletConfig().getInitParameter("dbconfig")</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来取得我们的配置的参数的值。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">但是，我们仅能得到一个配置的字符串。之后我们可以通过配置文件取得我们的数据库的配置参数，然后对数据库进行初始化。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实我们也可以通过传递一个类的名字串，然后再实例化。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">    </span>&lt;init-param&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-name&gt;dbconfig&lt;/param-name&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">      </span>&lt;param-value&gt;org.zy.util.db.DBUtil&lt;/param-value&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 14pt; COLOR: navy; mso-bidi-font-size: 10.0pt">
								<span style="mso-spacerun: yes">   </span>
								<span style="mso-spacerun: yes"> </span>&lt;/init-param&gt;<o:p></o:p></span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">我们先取得配置参数：</span>
						<span lang="EN-US" style="COLOR: navy">
								<o:p>
								</o:p>
						</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">String<span style="mso-spacerun: yes">  </span>dbconf=this.getServletConfig().getInitParameter("dbconfig")</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">；</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">然后通过</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">Class.forName(dbconf).getInstance();</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">来实例化对象，就可以实现对数据库的调用了。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">结论：在</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">web.xml</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">中对</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span lang="EN-US" style="FONT-SIZE: 15pt; COLOR: navy; mso-bidi-font-size: 10.0pt">Servlet</span>
				</b>
				<b style="mso-bidi-font-weight: normal">
						<span style="FONT-SIZE: 15pt; COLOR: navy; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'; mso-bidi-font-size: 10.0pt">的初始化，只能传递字符串类型的数据</span>
				</b>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 20pt; mso-list: l0 level1 lfo1">
				<span lang="EN-US" style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">④　</span>
				<span lang="EN-US">ServletContext</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是负责和</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的上文和下文交互，上面和</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">容器交互，下面和</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中的请求和相应进行交互。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">在</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">中，</span>
				<span lang="EN-US">
						<span style="mso-spacerun: yes">    </span>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span lang="EN-US">public ServletContext getServletContext();</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">方法实现取得当前</span>
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">的对象。</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">你可能要问，</span>
				<span lang="EN-US">ServletContext</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">是一个接口，那么你如何取得他的对象呢？</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 21pt; TEXT-INDENT: 21pt">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">其实这个问题和</span>
				<span lang="EN-US">ServletConfig</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">相同，都是在</span>
				<span lang="EN-US">Servlet</span>
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">进行初始化的时候产生的对象，是由容器来初始化的。</span>
		</p>
<img src ="http://www.blogjava.net/honolulu14/aggbug/78130.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2006-10-30 19:54 <a href="http://www.blogjava.net/honolulu14/archive/2006/10/30/78130.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>页面直接打印的代码</title><link>http://www.blogjava.net/honolulu14/archive/2006/10/20/76378.html</link><dc:creator>一缕青烟</dc:creator><author>一缕青烟</author><pubDate>Fri, 20 Oct 2006 06:26:00 GMT</pubDate><guid>http://www.blogjava.net/honolulu14/archive/2006/10/20/76378.html</guid><wfw:comment>http://www.blogjava.net/honolulu14/comments/76378.html</wfw:comment><comments>http://www.blogjava.net/honolulu14/archive/2006/10/20/76378.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/honolulu14/comments/commentRss/76378.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/honolulu14/services/trackbacks/76378.html</trackback:ping><description><![CDATA[
		<div class="postTitle">
				<a id="viewpost1_TitleUrl" href="http://www.cnblogs.com/pbc1984/archive/2006/07/07/445499.html">关于web打印的总结！</a>
		</div>
		<div class="postText">
				<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
						<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						<span style="COLOR: #000000">关于web打印的总结<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />方案一：<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />       调用浏览器的打印函数利用浏览器的模版<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />   源程序代码：<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />         <br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">OBJECT id</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">WebBrowser</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> classid</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">CLSID:8856F961-340A-11D0-A96B-00C04FD705A2</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> height</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />                width</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">0</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> VIEWASTEXT</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />            </span>
						<span style="COLOR: #000000">&lt;/</span>
						<span style="COLOR: #000000">OBJECT</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />     说明：此代码放在html 中 打印模版的指定框架为此代码在的模块；<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />      调用程序：<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />      </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">onclick</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">parent.main.focus();parent.main.WebBrowser.ExecWB(7,1);</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />调用浏览器的对象中的方法<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">2</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000"> 调用直接打印<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />      </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">onclick</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">parent.main.focus();parent.main.WebBrowser..print (7,1);</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">3</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000"> 当打印的时候不显示时的css样式<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />      </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">style media</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">print</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_465_479_Open_Image" onclick="this.style.display='none'; Codehighlighter1_465_479_Open_Text.style.display='none'; Codehighlighter1_465_479_Closed_Image.style.display='inline'; Codehighlighter1_465_479_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_465_479_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_465_479_Closed_Text.style.display='none'; Codehighlighter1_465_479_Open_Image.style.display='inline'; Codehighlighter1_465_479_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />.Noprint</span>
						<span id="Codehighlighter1_465_479_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_465_479_Open_Text">
								<span style="COLOR: #000000">{display:none;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_490_516_Open_Image" onclick="this.style.display='none'; Codehighlighter1_490_516_Open_Text.style.display='none'; Codehighlighter1_490_516_Closed_Image.style.display='inline'; Codehighlighter1_490_516_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_490_516_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_490_516_Closed_Text.style.display='none'; Codehighlighter1_490_516_Open_Image.style.display='inline'; Codehighlighter1_490_516_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />.PageNext</span>
						<span id="Codehighlighter1_490_516_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_490_516_Open_Text">
								<span style="COLOR: #000000">{page</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #0000ff">break</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">after: always;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #000000">&lt;/</span>
						<span style="COLOR: #000000">style</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_541_573_Open_Image" onclick="this.style.display='none'; Codehighlighter1_541_573_Open_Text.style.display='none'; Codehighlighter1_541_573_Closed_Image.style.display='inline'; Codehighlighter1_541_573_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_541_573_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_541_573_Closed_Text.style.display='none'; Codehighlighter1_541_573_Open_Image.style.display='inline'; Codehighlighter1_541_573_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />
						</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">style</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">.TdCs1 </span>
						<span id="Codehighlighter1_541_573_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_541_573_Open_Text">
								<span style="COLOR: #000000">{ border:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_582_632_Open_Image" onclick="this.style.display='none'; Codehighlighter1_582_632_Open_Text.style.display='none'; Codehighlighter1_582_632_Closed_Image.style.display='inline'; Codehighlighter1_582_632_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_582_632_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_582_632_Closed_Text.style.display='none'; Codehighlighter1_582_632_Open_Image.style.display='inline'; Codehighlighter1_582_632_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />.TdCs2 </span>
						<span id="Codehighlighter1_582_632_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_582_632_Open_Text">
								<span style="COLOR: #000000">{ border:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt; border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">left:none;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_641_768_Open_Image" onclick="this.style.display='none'; Codehighlighter1_641_768_Open_Text.style.display='none'; Codehighlighter1_641_768_Closed_Image.style.display='inline'; Codehighlighter1_641_768_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_641_768_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_641_768_Closed_Text.style.display='none'; Codehighlighter1_641_768_Open_Image.style.display='inline'; Codehighlighter1_641_768_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />.TdCs3 </span>
						<span id="Codehighlighter1_641_768_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_641_768_Open_Text">
								<span style="COLOR: #000000">{border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">top:none;border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">left:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt; border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">bottom:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt; border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">right:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img id="Codehighlighter1_777_886_Open_Image" onclick="this.style.display='none'; Codehighlighter1_777_886_Open_Text.style.display='none'; Codehighlighter1_777_886_Closed_Image.style.display='inline'; Codehighlighter1_777_886_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" />
								<img id="Codehighlighter1_777_886_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_777_886_Closed_Text.style.display='none'; Codehighlighter1_777_886_Open_Image.style.display='inline'; Codehighlighter1_777_886_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />.TdCs4 </span>
						<span id="Codehighlighter1_777_886_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_777_886_Open_Text">
								<span style="COLOR: #000000">{border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">top:none;  border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">left:none;border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">bottom:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt;border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">right:solid windowtext </span>
								<span style="COLOR: #000000">1</span>
								<span style="COLOR: #000000">.0pt;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />.underline <br /><img id="Codehighlighter1_900_1031_Open_Image" onclick="this.style.display='none'; Codehighlighter1_900_1031_Open_Text.style.display='none'; Codehighlighter1_900_1031_Closed_Image.style.display='inline'; Codehighlighter1_900_1031_Closed_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_900_1031_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_900_1031_Closed_Text.style.display='none'; Codehighlighter1_900_1031_Open_Image.style.display='inline'; Codehighlighter1_900_1031_Open_Text.style.display='inline';" src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span>
						<span id="Codehighlighter1_900_1031_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff">
								<img src="http://pbc1984.cnblogs.com/Images/dot.gif" />
						</span>
						<span id="Codehighlighter1_900_1031_Open_Text">
								<span style="COLOR: #000000">{border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">top</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">style: none;border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">right</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">style: none; border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">bottom</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">style: solid; border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">left</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">style: none;border</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">bottom</span>
								<span style="COLOR: #000000">-</span>
								<span style="COLOR: #000000">color: #</span>
								<span style="COLOR: #000000">000000</span>
								<span style="COLOR: #000000">;}</span>
						</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />        </span>
						<span style="COLOR: #000000">&lt;/</span>
						<span style="COLOR: #000000">style</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />    <br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" /></span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">4</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000"> 其余的设置<br /><img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />   </span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">input type</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">button</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> value</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">打印</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> onclick</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">document.all.WebBrowser.ExecWB(6,1)</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">NOPRINT</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">input type</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">button</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> value</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">直接打onclick=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">document.all.WebBrowser.ExecWB(</span>
						<span style="COLOR: #000000">6</span>
						<span style="COLOR: #000000">,</span>
						<span style="COLOR: #000000">6</span>
						<span style="COLOR: #000000">)</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> class=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">NOPRINT</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">input type</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">button</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> value</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">页面设置</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> onclick</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">document.all.WebBrowser.ExecWB(8,1)</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">NOPRINT</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
						<span style="COLOR: #000000">
								<br />
								<img src="http://pbc1984.cnblogs.com/Images/OutliningIndicators/None.gif" align="top" />
						</span>
						<span style="COLOR: #000000">&lt;</span>
						<span style="COLOR: #000000">input type</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">button</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> value</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">打印预览</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> onclick</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">document.all.WebBrowser.ExecWB(7,1)</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000"> </span>
						<span style="COLOR: #0000ff">class</span>
						<span style="COLOR: #000000">=</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">NOPRINT</span>
						<span style="COLOR: #000000">"</span>
						<span style="COLOR: #000000">&gt;</span>
				</div>
		</div>
		<p>
				<br />&lt;html&gt; <br />&lt;head&gt; <br />&lt;title&gt;看看&lt;/title&gt; <br />&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <br />&lt;!--media=print 这个属性可以在打印时有效--&gt; <br />&lt;style media=print&gt; <br />.Noprint{display:none;} <br />.PageNext{page-break-after: always;} <br />&lt;/style&gt; <br />&lt;style&gt; <br />.tdp <br />{ <br />border-bottom: 1 solid #000000; <br />border-left: 1 solid #000000; <br />border-right: 0 solid #ffffff; <br />border-top: 0 solid #ffffff; <br />} <br />.tabp <br />{ <br />border-color: #000000 #000000 #000000 #000000; <br />border-style: solid; <br />border-top-width: 2px; <br />border-right-width: 2px; <br />border-bottom-width: 1px; <br />border-left-width: 1px; <br />} <br />.NOPRINT { <br />font-family: "宋体"; <br />font-size: 9pt; <br />} <br />&lt;/style&gt; <br />&lt;/head&gt; <br />&lt;body &gt; <br />&lt;center class="Noprint" &gt; <br />&lt;p&gt; <br />&lt;OBJECT id=WebBrowser classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 width=0&gt; <br />&lt;/OBJECT&gt; <br />&lt;input type=button value=打印 onclick=document.all.WebBrowser.ExecWB(6,1)&gt; <br />&lt;input type=button value=直接打印 onclick=document.all.WebBrowser.ExecWB(6,6)&gt; <br />&lt;input type=button value=页面设置 onclick=document.all.WebBrowser.ExecWB(8,1)&gt; <br />&lt;/p&gt; <br />&lt;p&gt; &lt;input type=button value=打印预览 onclick=document.all.WebBrowser.ExecWB(7,1)&gt; <br />&lt;br/&gt; <br />&lt;/p&gt; <br />&lt;hr align="center" width="90%" size="1" noshade&gt; <br />&lt;/center&gt; <br />&lt;table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="tabp"&gt; <br />&lt;tr&gt; <br />&lt;td colspan="3" class="tdp"&gt;第1页&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td width="29%" class="tdp"&gt; &lt;/td&gt; <br />&lt;td width="28%" class="tdp"&gt; &lt;/td&gt; <br />&lt;td width="43%" class="tdp"&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td colspan="3" class="tdp"&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td colspan="3" class="tdp"&gt;&lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt; <br />&lt;tr&gt; <br />&lt;td width="50%" class="tdp"&gt;&lt;p&gt;这样的报表&lt;/p&gt; <br />&lt;p&gt;对一般的要求就够了。&lt;/p&gt;&lt;/td&gt; <br />&lt;td&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;hr align="center" width="90%" size="1" noshade class="NOPRINT" &gt; <br />&lt;!--分页--&gt; <br />&lt;div class="PageNext"&gt;&lt;/div&gt; <br />&lt;table width="90%" border="0" align="center" cellpadding="2" cellspacing="0" class="tabp"&gt; <br />&lt;tr&gt; <br />&lt;td class="tdp"&gt;第2页&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td class="tdp"&gt;看到分页了吧&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td class="tdp"&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td class="tdp"&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;tr&gt; <br />&lt;td class="tdp"&gt;&lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt; <br />&lt;tr&gt; <br />&lt;td width="50%" class="tdp"&gt;&lt;p&gt;这样的报表&lt;/p&gt; <br />&lt;p&gt;对一般的要求就够了。&lt;/p&gt;&lt;/td&gt; <br />&lt;td&gt; &lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt;&lt;/td&gt; <br />&lt;/tr&gt; <br />&lt;/table&gt; <br />&lt;/body&gt; <br />&lt;/html&gt;</p>
		<p> </p>
<img src ="http://www.blogjava.net/honolulu14/aggbug/76378.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/honolulu14/" target="_blank">一缕青烟</a> 2006-10-20 14:26 <a href="http://www.blogjava.net/honolulu14/archive/2006/10/20/76378.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>