﻿<?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-陈朋奕和谢仍明的博客-文章分类-Java技术</title><link>http://www.blogjava.net/chenpengyi/category/2085.html</link><description>MySQL资料，Java技术，管理思想，博弈论，Ajax，XP极限编程，物流知识</description><language>zh-cn</language><lastBuildDate>Thu, 18 Oct 2007 12:56:25 GMT</lastBuildDate><pubDate>Thu, 18 Oct 2007 12:56:25 GMT</pubDate><ttl>60</ttl><item><title>算术表达式的实现</title><link>http://www.blogjava.net/chenpengyi/articles/13682.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Wed, 21 Sep 2005 13:23:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/13682.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/13682.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/13682.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/13682.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/13682.html</trackback:ping><description><![CDATA[<FONT size=2>/****算术表达式的分析和计算，文件名：Exp_c.cpp**** <BR>***** 在VC6和Dev-C下调试通过 ****/ <BR>#include<IOSTREAM> <BR>#include<STRING> <BR>#include<CSTDLIB> <BR>#include<CCTYPE> <BR>#include<CSETJMP> <BR><BR>#define EXP_LEN 100 //定义输入字符缓冲区的长度 <BR><BR>/*------------出错代码的宏定义--------------*/ <BR>#define INVALID_CHAR_TAIL 0 //表达式后跟有非法字符 <BR>#define CHAR_AFTER_RIGHT 1 //右括号后连接非法字符 <BR>#define LEFT_AFTER_NUM 2 //数字后非法直接连接左括号 <BR>#define INVALID_CHAR_IN 3 //表达式中含有非法字符 <BR>#define NO_RIGHT 4 //缺少右括号 <BR>#define EMPTY_BRACKET 5 //括号内无表达式 <BR>#define UNEXPECTED_END 6 //预期外的算术表达式结束 <BR><BR>using namespace std; <BR><BR>const string ErrCodeStr[]= //表达式出错信息 <BR>{ <BR>"表达式后跟有非法字符！", <BR>"右括号后连接非法字符！", <BR>"数字后非法直接连接左括号！", <BR>"表达式中含有非法字符！", <BR>"缺少右括号！", <BR>"括号内无表达式或表达式不完整！", <BR>"表达式非法结束或表达式不完整！" <BR>}; <BR><BR>static char expr[EXP_LEN]; //算术表达式输入字符缓冲区 <BR>static int pos; //字符指示器标志：用来保存正在分析的字符的位置 <BR>static jmp_buf errjb; //出错跳转缓冲器 <BR><BR>//********以下是函数声明********* <BR>//产生式“E -&gt; T+E | T-E | T”的函数，用来分析加减算术表达式。 <BR>int E_AddSub(); <BR>//产生式“T -&gt; F*T | F/T | F”的函数，用来分析乘除算术表达式。 <BR>int T_MulDiv(); <BR>//产生式“F -&gt; i | (E)”的函数，用来分析数字和括号内的表达式。 <BR>int F_Number(); <BR>//出错处理函数，可以指出错误位置，出错信息。 <BR>void Error(int ErrCode); <BR><BR>int main() <BR>{ <BR>int ans; //保存算术表达式的计算结果 <BR>bool quit=false; //是否退出计算 <BR><BR>do <BR>{ <BR>//在此设定一个跳转目标，如果本程序的其他函数调用longjmp， <BR>//执行指令就跳转到这里，从这里继续执行。 <BR>if(setjmp(errjb)==0) //如果没有错误 <BR>{ <BR>pos=0; //初始化字符指示器为0，即指向输入字符串的第一个字符。 <BR><BR>cout&lt;&lt;"请输入一个算术表达式（输入“Q”或“q”退出）："&lt;<ENDL; <br> cin&gt;&gt;expr; //输入表达式，填充表达式字符缓冲区。 <BR><BR>if(expr[0]=='q'||expr[0]=='Q') <BR>//检查第一个字符，是否退出？ <BR>quit=true; <BR><BR>else <BR>{ <BR>//调用推导式“E -&gt; T+E | T-E | T”的函数， <BR>//从起始符号“E”开始推导。 <BR>ans=E_AddSub(); <BR><BR>//此时，程序认为对表达式的语法分析已经完毕，下面判断出错的原因： <BR><BR>//如果表达式中的某个右括号后直接跟着数字或其他字符， <BR>//则报错，因为数字i不属于FOLLOW(）)集。 <BR>if(expr[pos-1]==')'&amp;&amp;expr[pos]!='\0') <BR>Error(CHAR_AFTER_RIGHT); <BR><BR>//如果表达式中的某个数字或右括号后直接跟着左括号， <BR>//则报错，因为左括号不属于FOLLOW(E)集。 <BR>if(expr[pos]=='(') <BR>Error(LEFT_AFTER_NUM); <BR><BR>//如果结尾有其他非法字符 <BR>if(expr[pos]!='\0') <BR>Error(INVALID_CHAR_TAIL); <BR><BR>cout&lt;&lt;"计算得出表达式的值为："&lt;<ANS<<ENDL; <br> } <BR>} <BR>else <BR>{ <BR>//setjmp(errjb)!=0的情况： <BR>cout&lt;&lt;"请重新输入!"&lt;<ENDL; <br> } <BR>} <BR>while(!quit); <BR><BR>return 0; <BR>} <BR><BR>//产生式“E -&gt; T+E | T-E | T”的函数，用来分析加减算术表达式。 <BR>//返回计算结果 <BR>int E_AddSub() <BR>{ <BR>int rtn=T_MulDiv(); //计算加减算术表达式的左元 <BR><BR>while(expr[pos]=='+'||expr[pos]=='-') <BR>{ <BR>int op=expr[pos++]; //取字符缓冲区中当前位置的符号到op <BR>int opr2=T_MulDiv();//计算加减算术表达式的右元 <BR><BR>//计算求值 <BR>if(op=='+') //如果是"+"号 <BR>rtn+=opr2; //则用加法计算 <BR>else //否则（是"-"号） <BR>rtn-=opr2; //用减法计算 <BR>} <BR>return rtn; <BR>} <BR><BR>//推导式“T -&gt; F*T | F/T | F”的函数，用来分析乘除算术表达式。 <BR>//返回计算结果 <BR>int T_MulDiv() <BR>{ <BR>int rtn=F_Number(); //计算乘除算术表达式的左元 <BR><BR>while(expr[pos]=='*'||expr[pos]=='/') <BR>{ <BR>int op=expr[pos++]; //取字符缓冲区中当前位置的符号到op <BR>int opr2=F_Number();//计算乘除算术表达式的右元 <BR><BR>//计算求值 <BR>if(op=='*') //如果是"*"号 <BR>rtn*=opr2; //则用乘法计算 <BR>else //否则（是"\"号） <BR>rtn/=opr2; //用除法计算 <BR>} <BR>return rtn; <BR>} <BR><BR>//产生式“F -&gt; i | (E)”的函数，用来分析数字和括号内的表达式。 <BR>int F_Number() <BR>{ <BR>int rtn; //声明存储返回值的变量 <BR><BR>//用产生式F-&gt;(E)推导： <BR>if(expr[pos]=='(') //如果字符缓冲区当前位置的符号是"(" <BR>{ <BR>pos++; //则指示器加一指向下一个符号 <BR>rtn=E_AddSub(); //调用产生式“E -&gt; T+E | T-E | T”的分析函数 <BR><BR>if(expr[pos++]!=')')//如果没有与"("匹配的")" <BR>Error(NO_RIGHT);//则产生错误 <BR><BR>return rtn; <BR>} <BR><BR><BR>if(isdigit(expr[pos]))//如果字符缓冲区中当前位置的字符为数字 <BR>{ <BR>//则用产生式F -&gt; i推导 <BR>//把字符缓冲区中当前位置的字符串转换为整数 <BR>rtn=atoi(expr+pos); <BR>//改变指示器的值，跳过字符缓冲区的数字部分，找到下一个输入字符。 <BR>while(isdigit(expr[pos])) <BR>pos++; <BR>} <BR>else //如果不是数字则产生相应的错误 <BR>{ <BR>if(expr[pos]==')') //如果发现一个")" <BR>Error(EMPTY_BRACKET); //则是括号是空的，即括号内无算术表达式。 <BR>else if(expr[pos]=='\0') //如果此时输入串结束 <BR>Error(UNEXPECTED_END); //则算术表达式非法结束 <BR>else <BR>Error(INVALID_CHAR_IN); //否则输入字符串中含有非法字符 <BR>} <BR><BR>return rtn; <BR>} <BR><BR>//出错处理函数，输入错误代码，可以指出错误位置，出错信息。 <BR>void Error(int ErrCode) <BR>{ <BR>cout&lt;&lt;'\r'; //换行 <BR>while(pos--) <BR>cout&lt;&lt;' '; //打印空格，把指示错误的"^"移到输入字符串的出错位置 <BR>cout&lt;&lt;"^ 语法错误 ！！！ " <BR>&lt;<ERRCODESTR[ERRCODE] <br 输出错误信息> &lt;<ENDL<<'\A'; <br 发出警报音> <BR>longjmp(errjb,1); //跳转到main()函数中的setjmp调用处，并设置setjmp(errjb)的返回值为1 <BR>}<BR><BR>研究ing，这段时间重新复习数据结构了……</FONT><img src ="http://www.blogjava.net/chenpengyi/aggbug/13682.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-09-21 21:23 <a href="http://www.blogjava.net/chenpengyi/articles/13682.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP 对 XML 的操作(实用文章)</title><link>http://www.blogjava.net/chenpengyi/articles/13472.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Mon, 19 Sep 2005 16:13:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/13472.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/13472.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/13472.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/13472.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/13472.html</trackback:ping><description><![CDATA[<DIV class=content_detail id=setcolor><FONT size=2>本例子是参考了一些网站上有关JSP 对 XML 的操作的相关文档，又结合了一些个人的体会。例子涉及的内容是，开发的一个企业内部定餐系统后台管理端的部分代码，功能主要集中在对于餐馆基本信息的管理。 <BR><BR>例子本身是在TOMCAT4.01 平台下运行的B/S结构的程式。有关TOMCAT 的配置，这里不做说明。只讲解一下相关文件及文件夹的目录结构。 <BR><BR>目录结构说明： <BR>/tomcat/webapps/canyin/ -----主目录 <BR>/tomcat/webapps/canyin/jsp/ -----JSP 文件目录 <BR>/tomcat/webapps/canyin/jsp/admin/ -----实现后台管理的JSP 文件的存放目录 <BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------javabean 文件的存放目录 <BR>/tomcat/webapps/canyin/data/ -----xml 文件存放目录 <BR>/tomcat/webapps/ROOT/ -----tomcat 启动文件存放文件夹，只存放了index.html 文件 <BR><BR>文件简单说明： <BR>/tomcat/webapps/canyin/data/users.xml -----记录用户信息 <BR>/tomcat/webapps/canyin/data/restaurants.xml -----记录餐馆的基础信息 <BR><BR><BR>/tomcat/webapps/ROOT/index.html -----首页，页面出现输入框，要求用户输入用户名，密码 <BR><BR><BR>/tomcat/webapps/canyin/jsp/loginjudge.jsp -----用户身份判断页面，根据用户名称和密码决定页面是转入后台管理端，还是前台客户端。本例子中，用户身份一旦确认为有管理权限，可以进入后台管理端，就直接跳到餐馆基本信息管理页面，简化说明的流程。 <BR>/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----餐馆基本信息管理页面，管理餐馆的名称，电话，地址等信息 <BR><BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- 后台管理端检测标志用户身份的session 的值，如果不是管理员的话，跳回登陆页面。 <BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----连接xml 文件 <BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----写入xml文件 <BR><BR>文件详细介绍及附带代码说明。 <BR><BR>/tomcat/webapps/canyin/data/users.xml <BR><BR>代码： <BR>&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <BR><BR>- &lt;users&gt; <BR>&lt;user name="joard" password="joard" roles="admin" /&gt; <BR>&lt;user name="joard01" password="joard01" roles="user" /&gt; <BR>&lt;user name="joard02" password="joard02" roles="user" /&gt; <BR>&lt;/users&gt; <BR><BR>说明：字段含义是用户名，密码以及用户的身份 <BR><BR>/tomcat/webapps/canyin/data/restaurants.xml <BR><BR>代码： <BR>&lt;?xml version="1.0" encoding="UTF-8" ?&gt; <BR>- &lt;restaurants num="10"&gt; <BR>- &lt;restaurant id="1"&gt; <BR>&lt;name&gt;上海亭快餐店&lt;/name&gt; <BR>&lt;phone&gt;021-76546726&lt;/phone&gt; <BR>&lt;address&gt;百老汇广场B座&lt;/address&gt; <BR>&lt;/restaurant&gt; <BR>- &lt;restaurant id="8"&gt; <BR>&lt;name&gt;香格里拉大饭店&lt;/name&gt; <BR>&lt;phone&gt;021-2312134&lt;/phone&gt; <BR>&lt;address&gt;南京路1023号&lt;/address&gt; <BR>&lt;/restaurant&gt; <BR>&lt;/restaurants&gt; <BR>说明：&lt;num&gt;属性是记录在restaurants.xml 文件中总共有过多少条记录，每新增一条，无论以后删除是否，该值都会增加1，就好象数据库中习惯使用的自动增加1的id 项。用来给新增的 &lt;restaurant&gt;的属性&lt;id&gt;赋一个唯一的值。其它的字段意思比较明显。 <BR>/tomcat/webapps/ROOT/index.html （单纯的HTML代码） <BR><BR>代码： <BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;oddWorld 餐饮系统&lt;/title&gt; <BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <BR>&lt;/head&gt; <BR><BR>&lt;body onload="javascript:dataform.username.focus()"&gt; <BR>&lt;div align="center"&gt; <BR>&lt;table width="100%" border="0" cellspacing="0" cellpadding="0" height="22"&gt; <BR>&lt;tr&gt; <BR>&lt;td width="1"&gt;&lt;img src="images/top_r1.GIF" width="62" height="22"&gt;&lt;/td&gt; <BR>&lt;td width=150 align="center"&gt; 餐饮系统登录 &lt;/td&gt; <BR>&lt;td&gt;&lt;img src="images/top_r2.GIF" width="294" height="22"&gt;&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;br&gt; <BR>&lt;br&gt; <BR>&lt;table width="300" border="0" cellspacing="1" cellpadding="0" &gt; <BR>&lt;tr&gt; <BR>&lt;td height="200" valign="top" align="center"&gt; <BR>&lt;p align="center"&gt; <BR>&lt;table width="100%" border="0" cellspacing="1" cellpadding="5" bgcolor=#999999 class=a9px&gt; <BR>&lt;tr&gt; <BR>&lt;td bgcolor="#efefef"&gt;餐饮系统登录&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;tr&gt; <BR>&lt;td bgcolor="#FFFFFF" valign="top" align="center"&gt; <BR>&lt;table width="100%" border="0" cellspacing="0" cellpadding="0"&gt; <BR>&lt;form name=dataform method=post action=''canyin/jsp/loginjudge.jsp''&gt; <BR>&lt;tr&gt; <BR>&lt;td width="100"&gt;&lt;b&gt;登录名：&lt;/b&gt;&lt;/td&gt; <BR>&lt;td&gt; <BR>&lt;input maxlength=16 <BR>name="username" class=stedit value="joard"&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;tr&gt; <BR>&lt;td width="100"&gt;&lt;b&gt;密码：&lt;/b&gt;&lt;/td&gt; <BR>&lt;td&gt; <BR>&lt;input class=stedit maxlength=16 <BR>name="userpass" type=password value="oddworld"&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/form&gt; <BR>&lt;/table&gt; <BR>&lt;br&gt; <BR>&lt;table border=0 cellpadding=0 cellspacing=0&gt; <BR>&lt;tbody&gt; <BR>&lt;tr&gt; <BR>&lt;td&gt; <BR>&lt;input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="登 录"&gt; <BR>&lt;/td&gt; <BR>&lt;td&gt; &lt;/td&gt; <BR>&lt;td&gt; <BR>&lt;input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="修改密码"&gt; <BR>&lt;/td&gt; <BR>&lt;td&gt; &lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/tbody&gt; <BR>&lt;/table&gt; <BR>&lt;br&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;/div&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <BR>&lt;SCRIPT language=javascript&gt; <BR>&lt;!-- <BR>function checkform() <BR>{ <BR>var Checkblank = /^(\s*|(\　)|(\.))*$/; <BR>if (Checkblank.test(dataform.username.value)) <BR>{ <BR>alert("登录名不能为空!"); <BR>return false; <BR>} <BR><BR>if (Checkblank.test(dataform.userpass.value)) <BR>{ <BR>alert("密码不能为空!"); <BR>return false; <BR>} <BR><BR><BR>window.dataform.submit(); <BR><BR>} <BR>--&gt; <BR><BR>&lt;/SCRIPT&gt; <BR><BR>说明：把用户名称和用户密码提交到/tomcat/webapps/canyin/jsp/loginjudge.jsp <BR><BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class （代码是相应的java 文件） <BR><BR>package canyin; <BR><BR>import javax.servlet.http.HttpSession; <BR>import javax.servlet.http.HttpServletRequest; <BR><BR>public class checkSessionBean { <BR><BR>private boolean bolCheckPass=false; <BR>private HttpServletRequest request = null; <BR><BR>public boolean checkSessionBean(HttpServletRequest request,String strSessionName,String strCheckValue){ <BR>public boolean checkSessionBean(HttpServletRequest request){ <BR>HttpSession session = request.getSession(false); <BR>return(bolCheckPass); <BR><BR>if (strSessionName==null || strCheckValue==null){ <BR>return(bolCheckPass); <BR>}else{ <BR>if (session!=null &amp;&amp; session.getValue(strSessionName)!=null){ <BR>bolCheckPass=session.getValue(strSessionName).equals(strCheckValue); <BR>} <BR><BR>return(bolCheckPass); <BR>} <BR>} <BR>} <BR><BR>说明：检验参数传入的session 名称的数值和参数传入的字段的数值是否相等。 <BR><BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class <BR><BR>代码： <BR>package canyin; <BR><BR>import javax.xml.parsers.*; <BR>import javax.xml.transform.*; <BR>import javax.xml.transform.dom.DOMSource; <BR>import javax.xml.transform.stream.StreamResult; <BR>import org.w3c.dom.*; <BR><BR>public class connXmlBean { <BR><BR>private DocumentBuilderFactory factory=null; <BR>private DocumentBuilder builder=null; <BR>private Document doc=null; <BR><BR>public connXmlBean(){} <BR><BR>public String connXml(String xmlFileName){ <BR><BR>String strExc=""; <BR><BR>try{ <BR>factory = DocumentBuilderFactory.newInstance(); <BR>builder=factory.newDocumentBuilder(); <BR>doc=builder.parse(xmlFileName); <BR>doc.normalize(); <BR>}catch(Exception e){ <BR>strExc=e.toString(); <BR>} <BR><BR>return(strExc); <BR>} <BR><BR>public Document getXmlDoc(){ <BR>return(doc); <BR>} <BR>} <BR><BR>说明：打开一个指定xml 文件 <BR><BR>/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class <BR><BR>代码： <BR>package canyin; <BR><BR>import javax.xml.parsers.*; <BR>import javax.xml.transform.*; <BR>import javax.xml.transform.dom.DOMSource; <BR>import javax.xml.transform.stream.StreamResult; <BR>import java.io.File; <BR>import org.w3c.dom.*; <BR><BR>public class writeXmlBean { <BR><BR>public writeXmlBean(){} <BR><BR>public String writeXml(Document doc,String xmlFileName){ <BR><BR>String strExc=""; <BR><BR>try{ <BR>TransformerFactory tfactory = TransformerFactory.newInstance(); <BR>Transformer transformer = tfactory.newTransformer(); <BR><BR>DOMSource source = new DOMSource(doc); <BR><BR>StreamResult result = new StreamResult(new File(xmlFileName)); <BR><BR>transformer.transform(source,result); <BR>}catch(Exception e){ <BR>strExc=e.toString(); <BR>} <BR><BR>return(strExc); <BR>} <BR><BR>} <BR><BR>说明：写入dom 的内容到一个指定的xml 文件。 <BR><BR>/tomcat/webapps/canyin/jsp/loginjudge.jsp <BR><BR>代码： <BR>&lt;%-- oddWorld 餐饮管理系统(简体中文版) 2002年12月1日 <BR>copy right by joard ast <BR><BR>loginjudge.jsp 功能：用户身份校验，根据 /data/user.xml 文件内标示的用户不同的身份 <BR>决定转入后台管理页面，还是客户点菜页面。 <BR>--%&gt; <BR><BR>&lt;%@ page contentType="text/html;charset=gb2312" %&gt; <BR>&lt;%@ page language="java" import="javax.xml.parsers.*" %&gt; <BR>&lt;%@ page import="org.w3c.dom.*" %&gt; <BR>&lt;%@ page import="canyin.*" %&gt; <BR><BR>&lt;jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="page" /&gt; <BR><BR>&lt;% <BR>session.setMaxInactiveInterval(1800); <BR><BR><BR>Document doc; <BR>NodeList users; <BR>String strExc=""; <BR>String strUsername,strPassword; <BR><BR>strUsername=(String)request.getParameter("username"); <BR>strPassword=(String)request.getParameter("userpass"); <BR><BR>//校验数据是否为空 <BR>if (strUsername=="" || strPassword=="" ){ <BR>out.println("&lt;script language=''javascript''&gt;"); <BR>out.println("alert(''用户名或密码有空值!'');"); <BR>out.println("window.location.href=''/index.html'';"); <BR>out.println("&lt;/script&gt;"); <BR>return; <BR>} <BR><BR>xmlBean.connXml("webapps/canyin/data/users.xml"); <BR>doc=xmlBean.getXmlDoc(); <BR><BR>try{ <BR>users =doc.getElementsByTagName("user"); <BR><BR>for (int i=0;i&lt;users.getLength();i++){ <BR>Element user=(Element) users.item(i); <BR><BR>String strAtrNameValue=user.getAttributeNode("name").getNodeValue(); <BR>String strAtrPassWordValue=user.getAttributeNode("password").getNodeValue(); <BR>String strAtrRoleValue=user.getAttributeNode("roles").getNodeValue(); <BR><BR><BR><BR>if (strAtrNameValue.equals(strUsername) &amp;&amp; strAtrPassWordValue.equals(strPassword)){ <BR><BR>if (strAtrRoleValue.equals("admin")){ <BR>out.println("&lt;script language=''javascript''&gt;"); <BR>out.println("alert(''欢迎管理员登陆系统!'');"); <BR>out.println("&lt;/script&gt;"); <BR><BR>//设置标示用户身份的 session（sesUserRole） ，管理员身份为 admin <BR>session.setAttribute("sesUserRole","admin"); <BR><BR>//跳转到管理页面 <BR>response.sendRedirect("admin/admin_rest.jsp"); <BR>return; <BR><BR>}else{ <BR>//设置标示用户身份的 session（sesUserRole） ，管理员身份为 user <BR>session.setAttribute("sesUserRole","user"); <BR><BR>//跳转到普通用户页面 <BR>response.sendRedirect("index.jsp"); <BR>return; <BR>} <BR><BR>}else{ <BR>out.println("&lt;script language=''javascript''&gt;"); <BR>out.println("alert(''用户名或密码错误!'');"); <BR>out.println("history.go(-1);"); <BR>out.println("&lt;/script&gt;"); <BR>return; <BR>} <BR><BR>} <BR>}catch(Exception e){ <BR>strExc=e.toString(); <BR>} <BR>%&gt; <BR>说明：....... <BR><BR>/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp <BR><BR>代码： <BR>&lt;%-- oddWorld 餐饮管理系统(简体中文版) 2002年12月1日 <BR>copy right by joard ast <BR><BR>admin_rest.jsp 功能：后台管理页面，餐馆管理页面。 <BR>--%&gt; <BR><BR>&lt;%@ page contentType="text/html;charset=gb2312" %&gt; <BR>&lt;%@ page language="java" import="javax.xml.parsers.*" %&gt; <BR>&lt;%@ page import="javax.xml.transform.*" %&gt; <BR>&lt;%@ page import="org.w3c.dom.*" %&gt; <BR>&lt;%@ page import="canyin.*" %&gt; <BR><BR>&lt;%@ include file="../../include/sys_dialog.jsp" %&gt; <BR><BR>&lt;jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" scope="page" /&gt; <BR>&lt;jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="page" /&gt; <BR>&lt;jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean" scope="page" /&gt; <BR><BR>&lt;%//校验可户身份，判断是不是管理员 <BR>if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){ <BR>out.print(showDialog("您没有管理的权限!","/index.html")); <BR>return; <BR>} <BR><BR>//从餐馆资料文件 rest.xml 中得到相关数据 <BR>Document doc; <BR>NodeList restaurants; <BR><BR>String strAct; <BR>int intId=0; <BR>String strOperation="show"; <BR><BR>//接受外部传入的参数 <BR>strAct=(String)request.getParameter("act"); <BR><BR>xmlBean.connXml("webapps/canyin/data/restaurants.xml"); <BR>doc=xmlBean.getXmlDoc(); <BR>restaurants =doc.getElementsByTagName("restaurant"); <BR><BR>//根据外部传入的参数来决定对 restaurant.xml 文件的操作 <BR>if (strAct!=null){ <BR>if(strAct.equals("addnewDo")){ <BR><BR>String strName; <BR>String strPhone; <BR>String strAddress; <BR>Text textseg; <BR><BR>strName=(String)request.getParameter("name").trim(); <BR>strPhone=(String)request.getParameter("phone").trim(); <BR>strAddress=(String)request.getParameter("address").trim(); <BR><BR>//数据校验 <BR>if(strName==null){ <BR>out.print(showDialog("餐馆名称不能为空!")); <BR>return; <BR>} <BR>if(strPhone==null){ <BR>out.print(showDialog("餐馆电话不能为空!")); <BR>return; <BR>} <BR>/*if(strAddress==null){ <BR>out.print(showDialog("餐馆地址不能为空!")); <BR>return; <BR>}*/ <BR><BR>//校验数据的唯一性 <BR>for(int i=0;i&lt;restaurants.getLength();i++){ <BR>Element restaurant=(Element) restaurants.item(i); <BR>if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){ <BR>out.print(showDialog("餐馆名称重复!")); <BR>return; <BR>}else{ <BR>if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){ <BR>out.print(showDialog("餐馆电话重复!")); <BR>return; <BR>} <BR>} <BR><BR>} <BR><BR><BR><BR>//得到已有的记录数，给新增的餐馆记录设定唯一的递增的id 属性 <BR>int intNum=0; <BR>Element restNum=(Element)doc.getElementsByTagName("restaurants").item(0); <BR>intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue()); <BR><BR>intNum+=1; <BR><BR>//为restaurants的属性num 的数值加1 <BR>restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum)); <BR><BR>//新增节点 <BR>Element newRestaurant=doc.createElement("restaurant"); <BR><BR>Attr newArrId=doc.createAttribute("id"); <BR>//Attribute newArrId = new Attribute("id",String.valueOf(intNum)); <BR>textseg=doc.createTextNode(String.valueOf(intNum)); <BR>newArrId.setValue(String.valueOf(intNum)); <BR>newRestaurant.setAttributeNode(newArrId); <BR><BR>Element newName=doc.createElement("name"); <BR>textseg=doc.createTextNode(strName); <BR>newName.appendChild(textseg); <BR>newRestaurant.appendChild(newName); <BR><BR>Element newPhone=doc.createElement("phone"); <BR>textseg=doc.createTextNode(strPhone); <BR>newPhone.appendChild(textseg); <BR>newRestaurant.appendChild(newPhone); <BR><BR>Element newAddress=doc.createElement("address"); <BR>textseg=doc.createTextNode(strAddress); <BR>newAddress.appendChild(textseg); <BR>newRestaurant.appendChild(newAddress); <BR><BR>doc.getDocumentElement().appendChild(newRestaurant); <BR><BR>//调用bean 写入相应的xml文件 <BR>writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml"); <BR><BR>response.sendRedirect(request.getRequestURI()); <BR>return; <BR>} <BR>if(strAct.equals("modiDo")){ <BR>String strName; <BR>String strPhone; <BR>String strAddress; <BR>Text textseg; <BR>int modiId; <BR>//记录要修改的记录是item(i)的哪一项 <BR>int intI=0; <BR><BR>strName=(String)request.getParameter("name").trim(); <BR>strPhone=(String)request.getParameter("phone").trim(); <BR>strAddress=(String)request.getParameter("address").trim(); <BR>modiId=Integer.parseInt(request.getParameter("recordId").trim()); <BR><BR>//数据校验 <BR>if(strName==null){ <BR>out.print(showDialog("餐馆名称不能为空!")); <BR>return; <BR>} <BR>if(strPhone==null){ <BR>out.print(showDialog("餐馆电话不能为空!")); <BR>return; <BR>} <BR>if(modiId==0){ <BR>out.print(showDialog("你要修改餐馆的记录不存在!")); <BR>return; <BR>} <BR>/*if(strAddress==null){ <BR>out.print(showDialog("餐馆地址不能为空!")); <BR>return; <BR>}*/ <BR><BR>//标志显示记录存在 <BR>boolean recordExist=false; <BR><BR>//校验数据的唯一性 <BR>for(int i=0;i&lt;restaurants.getLength();i++){ <BR>Element restaurant=(Element) restaurants.item(i); <BR><BR>if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){ <BR>recordExist=true; <BR>intI=i; <BR><BR>} <BR><BR>if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName) &amp;&amp; Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId ){ <BR>out.print(showDialog("餐馆名称重复!")); <BR>return; <BR>}else{ <BR>if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) &amp;&amp; Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId ){ <BR>out.print(showDialog("餐馆电话重复!")); <BR>return; <BR>} <BR>} <BR><BR>} <BR><BR><BR><BR>if(!recordExist){ <BR>out.print(showDialog("你要修改餐馆的记录不存在!")); <BR>return; <BR>}else{ <BR>//进行记录更改的操作 <BR>try{ <BR>Element modiRestaurant=(Element) restaurants.item(intI); <BR>modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName); <BR>modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone); <BR>modiRestaurant.getElementsByTagName("address").item(0).getFirstChild().setNodeValue(strAddress); <BR><BR>//调用bean 写入相应的xml文件 <BR>writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml"); <BR><BR>response.sendRedirect(request.getRequestURI()); <BR>return; <BR><BR>}catch(Exception e){} <BR>} <BR>} <BR>//进行删除操作 <BR>if(strAct.equals("del")){ <BR>int delId; <BR>//记录要修改的记录是item(i)的哪一项 <BR>int intI=0; <BR><BR>delId=Integer.parseInt(request.getParameter("recordId").trim()); <BR><BR>if(delId==0){ <BR>out.print(showDialog("你要修改餐馆的记录不存在!")); <BR>return; <BR>} <BR><BR>file://标志显示记录存在 <BR>boolean recordExist=false; <BR><BR>//校验数据的唯一性 <BR>for(int i=0;i&lt;restaurants.getLength();i++){ <BR>Element restaurant=(Element) restaurants.item(i); <BR><BR>if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){ <BR>recordExist=true; <BR>intI=i; <BR><BR>} <BR>} <BR><BR>if(!recordExist){ <BR>out.print(showDialog("你要删除餐馆的记录不存在!")); <BR>return; <BR>}else{ <BR>//进行记录删除的操作 <BR>try{ <BR>Node delNode=(Node)restaurants.item(intI); <BR><BR>doc.getElementsByTagName("restaurants").item(0).removeChild(delNode); <BR><BR>//调用bean 写入相应的xml文件 <BR>writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml"); <BR><BR>response.sendRedirect(request.getRequestURI()); <BR>return; <BR><BR>}catch(Exception e){} <BR>} <BR><BR>} <BR>} <BR><BR>//由外部传入参数决定页面相应的处理状态 <BR>if (strAct==null){ <BR>strOperation="show"; <BR>}else{ <BR>if (strAct.equals("modi")){ <BR>strOperation="modi"; <BR>intId=Integer.parseInt(request.getParameter("recordId")); <BR>}else{ <BR>if(strAct.equals("addnew")){ <BR>strOperation="addnew"; <BR>}else{ <BR>strOperation="show"; <BR>} <BR>} <BR>} <BR><BR><BR>//如果为空记录，则变更页面状态为“新增” <BR>if (restaurants.getLength()==0){ <BR>strOperation="addnew"; <BR>} <BR>%&gt; <BR><BR>&lt;html&gt; <BR>&lt;head&gt; <BR>&lt;title&gt;oddWorld 餐饮系统&lt;/title&gt; <BR>&lt;meta http-equiv="Content-Type" content="text/html; charset=gb2312"&gt; <BR>&lt;meta http-equiv="expires" content="0"&gt; <BR>&lt;link rel="stylesheet" href="../../include/itsp.css" type="text/css"&gt; <BR>&lt;/head&gt; <BR><BR>&lt;body &gt; <BR>&lt;div align="center"&gt; <BR>&lt;table width="100%" border="0" cellspacing="0" cellpadding="0" height="22"&gt; <BR>&lt;tr&gt; <BR>&lt;td width="1"&gt;&lt;img src="../../images/top_r1.GIF" width="62" height="22"&gt;&lt;/td&gt; <BR>&lt;td width=150 align="center"&gt; 餐饮系统管理--餐馆管理&lt;/td&gt; <BR>&lt;td&gt;&lt;img src="../../images/top_r2.GIF" width="294" height="22"&gt;&lt;/td&gt; <BR>&lt;td width=100 align="center"&gt;&lt;a href="/index.html"&gt;[ 退出系统 ]&lt;/a&gt;&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;br&gt; <BR>&lt;br&gt; <BR>&lt;table bgcolor="#999999" align=center border=0 cellpadding=1 cellspacing=1 <BR>width="90%"&gt; <BR>&lt;tbody&gt; <BR>&lt;tr bgcolor="#efefef" align="center" valign="middle"&gt; <BR>&lt;td class=ttTable height=30 width="20"&gt; &lt;/td&gt; <BR>&lt;td class=ttTable height=30 width="0"&gt;餐馆名称&lt;/td&gt; <BR>&lt;td class=ttTable height=30 width="0"&gt;餐馆电话&lt;/td&gt; <BR>&lt;td class=ttTable height=30 width="0"&gt; <BR>&lt;div align="center"&gt;餐馆地址&lt;/div&gt; <BR>&lt;/td&gt; <BR>&lt;td class=ttTable height=30 width="30"&gt; <BR>&lt;div align="center"&gt;修改&lt;/div&gt; <BR>&lt;/td&gt; <BR>&lt;td class=ttTable height=30 width="30"&gt; <BR>&lt;div align="center"&gt;删除&lt;/div&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;% <BR>for(int i=0;i&lt;restaurants.getLength();i++) <BR>{ <BR>Element restaurant=(Element) restaurants.item(i); <BR><BR>if (strOperation=="modi" &amp;&amp; Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){ <BR>%&gt; <BR>&lt;%//显示修改的格式%&gt; <BR>&lt;tr align="center" bgcolor="#ffffff" valign="middle"&gt; <BR>&lt;form name=dataform action="&lt;%=request.getRequestURI()%&gt;?act=modiDo" method="post" onSubmit=''return checkform(this);'' &gt; <BR>&lt;td class=tdsmall height=25 width="20"&gt; <BR>&lt;input type="hidden" name="recordId" value="&lt;%=restaurant.getAttributeNode("id").getNodeValue()%&gt;"&gt; <BR>&lt;%=(i+1)%&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25&gt; <BR>&lt;input name="name" class=stedit <BR>style="HEIGHT: 22px; WIDTH: 150px" value="&lt;%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){ <BR>out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); <BR><BR>}%&gt; <BR>" maxlength="40" &gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25&gt; <BR>&lt;input name="phone" class=stedit <BR>style="HEIGHT: 22px; WIDTH: 100px" value="&lt;%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){ <BR>out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue()); <BR><BR>}%&gt;" maxlength="20" &gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25&gt; <BR>&lt;input name="address" class=stedit <BR>style="HEIGHT: 22px; WIDTH: 200px" value="&lt;% <BR><BR>if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){ <BR>out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue()); <BR><BR>}%&gt;" maxlength="100" &gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="25"&gt;&lt;a href="javascript:if (checkform()==false);"&gt;&lt;img border=0 <BR>height=15 src="../../images/editok.gif" width=15&gt;&lt;/a&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="25"&gt; &lt;/td&gt; <BR>&lt;/form&gt; <BR>&lt;/tr&gt; <BR>&lt;% }else{ <BR>//显示正常的格式 %&gt; <BR>&lt;tr align="center" bgcolor="#ffffff" valign="middle"&gt; <BR>&lt;td class=tdsmall height=25 width="20"&gt;&lt;%=(i+1)%&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="0"&gt;&lt;%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){ <BR>out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()); <BR><BR>}%&gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="0"&gt;&lt;%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){ <BR>out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue()); <BR><BR>}%&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="0"&gt; <BR>&lt;% <BR>if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){ <BR>out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue()); <BR><BR>}%&gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="30"&gt;&lt;a href="&lt;%=request.getRequestURI()%&gt;?act=modi&amp;recordId=&lt;%=restaurant.getAttributeNode("id").getNodeValue()%&gt;"&gt;&lt;img border=0 <BR>height=15 src="../../images/edit.gif" width=15&gt;&lt;/a&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="30"&gt;&lt;img border=0 <BR>height=15 <BR>onClick="javascript:if(confirm(''您是否确定删除本记录，删除后将导至记录无法使用？'')){window.location.href=''&lt;%=request.getRequestURI()%&gt;?act=del&amp;recordId=&lt;%=restaurant.getAttributeNode("id").getNodeValue()%&gt;'';}" <BR>src="../../images/delete.gif" style="CURSOR: hand" width=15&gt; &lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;% } <BR>}%&gt; <BR>&lt;% if (strOperation=="addnew"){ <BR>//显示新增的格式%&gt; <BR>&lt;tr align="center" bgcolor="#ffffff" valign="middle"&gt; <BR>&lt;form name=dataform2 action="&lt;%=request.getRequestURI()%&gt;?act=addnewDo" method="post" onSubmit=''return checkform2(this);'' &gt; <BR>&lt;td class=tdsmall height=25 width="20"&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25&gt; <BR>&lt;input name="name" class=stedit <BR>style="HEIGHT: 22px; WIDTH: 150px" value="" maxlength="40" &gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25&gt; <BR>&lt;input name="phone" class=stedit <BR>style="HEIGHT: 22px; WIDTH: 100px" value="" maxlength="20" &gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25&gt; <BR>&lt;input name="address" class=stedit <BR>style="HEIGHT: 22px; WIDTH: 200px" value="" maxlength="100" &gt; <BR>&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="25"&gt;&lt;a href="javascript:if (checkform2()==false);"&gt;&lt;img border=0 <BR>height=15 src="../../images/editok.gif" width=15&gt;&lt;/a&gt;&lt;/td&gt; <BR>&lt;td class=tdsmall height=25 width="25"&gt; &lt;/td&gt; <BR>&lt;/form&gt; <BR>&lt;/tr&gt; <BR>&lt;% } %&gt; <BR>&lt;/tbody&gt; <BR>&lt;/table&gt; <BR>&lt;br&gt; <BR>&lt;table align=center border=0 cellpadding=0 cellspacing=2 width="95%"&gt; <BR>&lt;tbody&gt; <BR>&lt;tr valign=center&gt; <BR>&lt;td align=middle&gt; &lt;br&gt; <BR>&lt;table border=0 cellpadding=0 cellspacing=0&gt; <BR>&lt;tr&gt; <BR>&lt;td&gt; <BR>&lt;% if (strOperation=="addnew"){ <BR>%&gt; <BR>&lt;input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="更新记录"&gt; <BR>&lt;% }else{ <BR>if(strOperation=="modi"){ <BR>%&gt; <BR>&lt;input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="更新记录"&gt; <BR>&lt;% <BR>}else{ <BR>%&gt; <BR>&lt;input class=stbtm type="button" name="Button" value="新 增" onClick="javascript:window.location.href=''&lt;%=request.getRequestURI()%&gt;?act=addnew'';"&gt;&lt;% <BR>} <BR>} %&gt; <BR>&lt;/td&gt; <BR>&lt;td&gt; <BR>&lt;input class=stbtm type="button" name="Button" value="返 回" onClick="javascript:window.location.href=''index.jsp'';"&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;/td&gt; <BR>&lt;/tr&gt; <BR>&lt;/table&gt; <BR>&lt;p&gt; &lt;/p&gt; <BR>&lt;/div&gt; <BR>&lt;/body&gt; <BR>&lt;/html&gt; <BR>&lt;SCRIPT LANGUAGE=javascript&gt; <BR>&lt;!-- <BR>function checkform2() <BR>{ <BR>var Checkblank = /^(\s*|(\　)|(\.))*$/; <BR><BR>if (Checkblank.test(dataform2.name.value)) <BR>{ <BR>alert("餐馆名称不能为空！"); <BR>dataform2.name.focus(); <BR>return false; <BR>} <BR><BR>if (Checkblank.test(dataform2.phone.value)) <BR>{ <BR>alert("餐馆电话不能为空！"); <BR>dataform2.phone.focus(); <BR>return false; <BR>} <BR>window.dataform2.submit(); <BR>} <BR><BR>function checkform() <BR>{ <BR>var Checkblank = /^(\s*|(\　)|(\.))*$/; <BR>if (Checkblank.test(dataform.name.value)) <BR>{ <BR>alert("餐馆名称不能为空！"); <BR>dataform.name.focus(); <BR>return false; <BR>} <BR><BR>if (Checkblank.test(dataform.phone.value)) <BR>{ <BR>alert("餐馆电话不能为空！"); <BR>dataform.phone.focus(); <BR>return false; <BR>} <BR><BR><BR>window.dataform.submit(); <BR>} <BR>--&gt; <BR>&lt;/SCRIPT&gt; <BR>说明：本文件的书写有很多地方并不简练，因为在程式的开发过程中，过分简练的程序往往会带来后期维护的困难。 <BR><BR>开发心得： <BR><BR>doc.getElementsByTagName("restaurants").item(int i)的返回值是node 型，如果不是要调用它的属性值，没有必要强制转型为 Element型。可以直接操作。本系统因为开发的参考资料的错误，所以全都采用了强制转型。可以在以后的开发中考虑使用node 直接进行操作。 <BR>trim() 和 Interger.parseInt() 函数都不可以接受null 型的数值 <BR>在tomcat 下左右的文件都是目录从TOMCAT 算起，具体情况请参见\webapps\canyin\jsp\userjudge.jsp 里关于xml 路径的写法。 <BR></FONT></DIV><img src ="http://www.blogjava.net/chenpengyi/aggbug/13472.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-09-20 00:13 <a href="http://www.blogjava.net/chenpengyi/articles/13472.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP实现论坛树型结构的算法(非递归)</title><link>http://www.blogjava.net/chenpengyi/articles/13471.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Mon, 19 Sep 2005 16:11:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/13471.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/13471.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/13471.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/13471.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/13471.html</trackback:ping><description><![CDATA[<DIV class=content_detail id=setcolor>
<P><FONT color=#333333 size=2>实现论坛树型结构的算法很多，这里是一个不用递归实现树型结构的算法</FONT></P>
<P><FONT color=#333333><FONT size=2>1.演示表的结构：&nbsp; <BR><BR></FONT>
<TABLE borderColor=#ff9900 cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffdd border=1 heihgt="">
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;</FONT><FONT color=#333333 size=2>　　　表名：mybbslist&nbsp; <BR>　　　字段&nbsp;　　　　数据类型　　说明&nbsp; <BR>　　　BBSID　　　　自动编号&nbsp;　&nbsp; <BR>　　　RootID&nbsp;　　　Int　　　　&nbsp;根帖ID，本身为根帖则RootID&nbsp;=&nbsp;BBSID&nbsp; <BR>　　　FID　　　　　Int&nbsp;　　　　父帖ID，上一层帖子的ID，如是根帖则FID&nbsp;=&nbsp;0&nbsp; <BR>　　　DEPTH　　　　Int&nbsp;　　　　根帖Level=0，其他依据回复的深度递增&nbsp; <BR>　　　BBSSubject&nbsp;　Char　　　　主题&nbsp; </FONT></TD></TR></TBODY></TABLE><BR><BR><BR><FONT size=2>2.创建表（可根据此表的结构在ACCESS中创建表）：&nbsp; <BR><BR><BR></FONT>
<TABLE borderColor=#ff9900 cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffdd border=1 heihgt="">
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;</FONT><FONT color=#333333 size=2>create&nbsp;table&nbsp;mybbslist&nbsp;(&nbsp; <BR>　forumID&nbsp;int(20)&nbsp;not&nbsp;null,&nbsp; <BR>　bbsID&nbsp;int&nbsp;auto_increment&nbsp;primary&nbsp;key,&nbsp; <BR>　rootid&nbsp;int(20)&nbsp;not&nbsp;null,&nbsp; <BR>　fid&nbsp;int(20)&nbsp;not&nbsp;null,&nbsp; <BR>　depth&nbsp;int(20)&nbsp;not&nbsp;null,&nbsp; <BR>　userID&nbsp;int(20)&nbsp;not&nbsp;null,&nbsp; <BR>　bbsUser&nbsp;varchar(24)&nbsp;not&nbsp;null,&nbsp; <BR>　bbsSubject&nbsp;varchar(100)&nbsp;not&nbsp;null,&nbsp; <BR>　bbsContent&nbsp;text,&nbsp; <BR>　bbsTime&nbsp;varchar(30),&nbsp; <BR>　bbsRead&nbsp;int(20),&nbsp; <BR>　bbsReply&nbsp;int(20),&nbsp; <BR>INDEX&nbsp;forumID&nbsp;(forumID))&nbsp;&nbsp; </FONT></TD></TR></TBODY></TABLE><BR><BR><BR><BR><FONT size=2>3.演示论坛树型结构的JSP程序，注意此程序只对一个根贴进行了演示（数据库用ACCESS） <BR><BR></FONT>
<TABLE borderColor=#ff9900 cellSpacing=0 cellPadding=0 width="100%" bgColor=#ffffdd border=1 heihgt="">
<TBODY>
<TR>
<TD><FONT size=2>&nbsp;</FONT><FONT size=2><FONT color=#333333>&lt;%@&nbsp;page&nbsp;contentType="text/html;charset=gb2312"&nbsp;%&gt;&nbsp; <BR>&lt;%@&nbsp;page&nbsp;import="java.io.*"&nbsp;%&gt;&nbsp; <BR>&lt;%@&nbsp;page&nbsp;import="java.sql.*"&nbsp;%&gt;&nbsp; <BR>&lt;%&nbsp; <BR>&nbsp;String&nbsp;driverName&nbsp;=&nbsp;"sun.jdbc.odbc.JdbcOdbcDriver";&nbsp; <BR>&nbsp;String&nbsp;connURL=&nbsp;"jdbc:odbc:cwb";&nbsp; <BR>&nbsp;Connection&nbsp;conn&nbsp;=&nbsp;null;&nbsp; <BR>&nbsp;Statement&nbsp;stmt&nbsp;=&nbsp;null;&nbsp; <BR><BR>int&nbsp;intRowCount;&nbsp; <BR>out.print("显示论坛树形结构");&nbsp; <BR>out.print("&lt;br&gt;&lt;br&gt;");&nbsp; <BR>try&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class.forName(driverName);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;conn&nbsp;=&nbsp;DriverManager.getConnection(connURL);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stmt&nbsp;=&nbsp;conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;sql="select&nbsp;*&nbsp;from&nbsp;mybbslist&nbsp;order&nbsp;by&nbsp;rootid&nbsp;desc,depth,fid,bbsid";&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ResultSet&nbsp;rs&nbsp;=&nbsp;stmt.executeQuery(sql);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rs.next()){&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.last();&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;intRowCount=rs.getRow();&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("论坛树中有");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(intRowCount);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("个叶子节点");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.first();&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;j=0;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;Depth&nbsp;=&nbsp;0;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("&lt;ul&gt;");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while(j&lt;intRowCount){&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;rsDepth=rs.getInt("depth");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(rsDepth&gt;Depth){&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("&lt;ul&gt;");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("&lt;li&gt;");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;bbssubject=rs.getString("bbsSubject");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print(bbssubject);&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("&lt;/li&gt;");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Depth=rsDepth; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j=j+1;&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rs.next();&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(int&nbsp;i=0;i&lt;Depth+1;i=i+1)&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("&lt;/ul&gt;");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}else{&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.print("数据库中无记录");&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp; <BR>}catch&nbsp;(SQLException&nbsp;E)&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("SQLException:&nbsp;"&nbsp;+&nbsp;E.getMessage());&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("SQLState:&nbsp;"&nbsp;+&nbsp;E.getSQLState());&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out.println("VendorError:&nbsp;"&nbsp;+&nbsp;E.getErrorCode());&nbsp; <BR>}&nbsp; <BR>%&gt;&nbsp; <BR>&lt;%&nbsp;//关闭mysql连接&nbsp; <BR>try&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(conn!=null)&nbsp;&nbsp;conn.close();&nbsp; <BR>}&nbsp;catch&nbsp;(Exception&nbsp;ex)&nbsp;{&nbsp; <BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.err.println("closeConn:&nbsp;"&nbsp;+&nbsp;ex.getMessage());&nbsp; <BR>}&nbsp; <BR>%&gt;&nbsp; </FONT><BR></FONT></TD></TR></TBODY></TABLE></FONT></P></DIV><img src ="http://www.blogjava.net/chenpengyi/aggbug/13471.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-09-20 00:11 <a href="http://www.blogjava.net/chenpengyi/articles/13471.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML卷之实战锦囊（1）：动态排序</title><link>http://www.blogjava.net/chenpengyi/articles/13470.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Mon, 19 Sep 2005 16:07:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/13470.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/13470.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/13470.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/13470.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/13470.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DL>
<DT disabled><FONT size=2>动机： </FONT>
<DD><FONT size=2>排序功能让我们页面上的数据显的更人性化，是我们在网站上见过的很普遍的一个功能效果了。以往的自动排序都是用大量的脚本代码来完成的，对一般的爱好者来说这是件困难的事情。然而用XML来处理的话就简单多了。让自己的页面更加绚丽，哈哈，您是不是也心动了呢！ </FONT>
<DT disabled><FONT size=2>材料： </FONT>
<DD><FONT size=2>XML卷之动态排序<BR>有2个文件：paixu.xml 和 paixu.xsl </FONT>
<DT disabled><FONT size=2>作用： </FONT>
<DD><FONT size=2>在不刷新页面的情况下更据用户自己的需要对数据重新进行排序显示，有效的提高数据互动功能，让自己的页面更加绚丽多彩。 </FONT></DD></DL></TD></TR>
<TR>
<TD>
<DL>
<DT disabled><FONT size=2>效果： </FONT>
<DD><FONT disabled color=#0000ff size=2><A href="http://www.wy1997.com/sailflying/learn/paixu.xml">浏览这里</A></FONT><FONT size=2> </FONT></DD></DL></TD></TR>
<TR>
<TD>
<DL>
<DT disabled><FONT size=2>代码： </FONT>
<DD>
<TABLE class=tablelogo cellSpacing=0 cellPadding=0 width=370 border=0>
<TBODY>
<TR>
<TD height=20><B><FONT size=2>paixu.xml</FONT></B></TD></TR>
<TR>
<TD><FONT size=2>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<BR>&lt;?xml-stylesheet type="text/xsl" href="paixu.xsl" ?&gt;<BR>&lt;BlueIdea&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;1&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;Sailflying&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;一个简单的排序&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2002-1-11 17:35:33&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;XML专题&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;2&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;flyingbird&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;嫁给你，是要你疼的&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2001-09-06 12:45:51&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;灌水精华&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;3&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;苛子&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;正则表达式在ＵＢＢ论坛中的应用&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2001-11-23 21:02:16&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;Web 编程精华&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;4&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;太乙郎&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;年末经典分舵聚会完全手册 v0.1&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2000-12-08 10:22:48&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;论坛灌水区&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;5&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;mmkk&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;Asp错误信息总汇&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2001-10-13 16:39:05&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;javascript脚本&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&lt;/BlueIdea&gt; <BR></FONT></TD></TR></TBODY></TABLE><BR>
<TABLE class=tablelogo cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD height=20><B><FONT size=2>paixu.xsl</FONT></B></TD></TR>
<TR>
<TD><FONT size=2>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<BR>&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"&gt;<BR>&lt;xsl:template match="/"&gt;<BR>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;title&gt; XML卷之实战锦囊（1）：动态排序&lt;/title&gt;<BR>&lt;style&gt;body,BlueIdea,team,blue_ID,blue_name,blue_text,blue_time,<BR>blue_class{ font: 12px "宋体", "Arial", "Times New Roman"; } <BR>table { font-size: 12px; border: 0px double; border-color: #99CC99 #99CC99 #CCCCCC #CCCCCC; cellpadding:3;cellspacing:3; bgcolor:#eeeeee; text-decoration: blink} <BR>span { font-size: 12px; color: red; }<BR>&lt;/style&gt;<BR>&lt;script&gt;<BR>function taxis(x) <BR>{ <BR>stylesheet=document.XSLDocument; <BR>source=document.XMLDocument; <BR>sortField=document.XSLDocument.selectSingleNode("//@order-by");<BR>sortField.value=x; <BR>Layer1.innerHTML=source.documentElement.transformNode(stylesheet); <BR>}<BR>&lt;/script&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&lt;p align="center"&gt;&lt;span&gt;XML卷之实战锦囊（1）：动态排序&lt;/span&gt;&lt;/p&gt;<BR>&lt;div id="Layer1" name="Layer1"&gt;<BR>&lt;xsl:apply-templates select="BlueIdea" /&gt;<BR>&lt;/div&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="BlueIdea"&gt;<BR>&lt;table width="500" border="1" align="center" cellpadding="1" cellspacing="1" bordercolordark="#ffffff" bordercolorlight="#ADAAAD"&gt;<BR>&lt;tr bgcolor="#FFCC99" align="center"&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_ID')"&gt;编号&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_name')"&gt;姓名&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_text')"&gt;主题&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_time')"&gt;发表时间&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_class')"&gt;归类&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;xsl:apply-templates select="team" order-by="blue_ID"/&gt;<BR>&lt;/table&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="team"&gt;<BR>&lt;tr align="center"&gt;<BR>&lt;xsl:apply-templates select="blue_ID" /&gt;<BR>&lt;xsl:apply-templates select="blue_name" /&gt;<BR>&lt;xsl:apply-templates select="blue_text" /&gt;<BR>&lt;xsl:apply-templates select="blue_time" /&gt;<BR>&lt;xsl:apply-templates select="blue_class" /&gt;<BR>&lt;/tr&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_ID"&gt;<BR>&lt;td bgcolor="#eeeeee"&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_name"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_text"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_time"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_class"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;/xsl:stylesheet&gt;<BR></FONT></TD></TR></TBODY></TABLE><BR></DD></DL>
<DL>
<DT disabled><FONT size=2>讲解： </FONT>
<DD>
<TABLE class=tablelogo cellSpacing=0 cellPadding=0 width=497 border=0>
<TBODY>
<TR>
<TD><FONT size=2>1）paixu.xml 是数据文件，相信大家都不会有问题。<BR>2）paixu.xsl 是格式文件，有几个地方要注意。 </FONT></TD></TR>
<TR>
<TD>
<P><FONT size=2>（1）脚本中：<BR><BR></FONT><FONT size=2><FONT color=red>sortField=document.XSLDocument.selectSingleNode("//@order-by"); <BR></FONT>作用是：找到有属性为order-by的第一个节点，因此它对应的节点就是<BR></FONT><FONT size=2><FONT color=red>&lt;xsl:apply-templates select="team" order-by="blue_ID"/&gt;<BR></FONT>因此在初次onLoad的时候order-by的value值是blue_ID。<BR>而我们就是通过重新定义order-by的value值来达到排序的目的。 </FONT></P><FONT color=red><BR><FONT size=2>Layer1.innerHTML=source.documentElement.transformNode(stylesheet); <BR></FONT></FONT><FONT size=2>作用是：转化XML数据后更改Layer1，因此在传出参数'blue_name'后，<BR></FONT><FONT size=2><FONT color=red>&lt;td style="cursor:s-resize" onClick="taxis('blue_name)"&gt;姓名&lt;/td&gt;<BR></FONT>我们将order-by的value值修改为是'blue_name'，即以'blue_name'为排序方式。<BR>继而通过重新显示Layer1的innerHTML值来显示新的排序内容。<BR></FONT>
<P><FONT size=2>（2）文本中：<BR></FONT><FONT color=red><BR><FONT size=2>order-by<BR></FONT></FONT><FONT size=2>这个可不能少哦，不然就找不到了，效果嘛，你瞧瞧看吧！！ </FONT></P>
<P><FONT size=2><FONT color=red>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<BR></FONT>另外说一点：<BR>在大多的XML教科书中所显示的代码中很少会加上encoding="gb2312" ，<BR>因此我们在XML中用到中文的时候会报错，原因就是没有写这个申明。<BR></FONT></P></TD></TR></TBODY></TABLE><BR>
<DT disabled><FONT size=2>后记： </FONT>
<DD><FONT size=2>大家熟悉动态排序完成思路后会发现，其实我们的实现手法很简单。<BR></FONT><FONT size=2><FONT color=red>就是修改order-by的数值，然后重新显示。<BR></FONT></FONT></DD></DL></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/chenpengyi/aggbug/13470.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-09-20 00:07 <a href="http://www.blogjava.net/chenpengyi/articles/13470.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>XML卷之实战锦囊（2）：动态查询</title><link>http://www.blogjava.net/chenpengyi/articles/13469.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Mon, 19 Sep 2005 16:06:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/13469.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/13469.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/13469.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/13469.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/13469.html</trackback:ping><description><![CDATA[<TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
<TBODY>
<TR>
<TD>
<DL>
<DT disabled><FONT size=2>动机： </FONT>
<DD><FONT size=2>排序功能让我们页面上的数据显的更人性化，是我们在网站上见过的很普遍的一个功能效果了。以往的自动排序都是用大量的脚本代码来完成的，对一般的爱好者来说这是件困难的事情。然而用XML来处理的话就简单多了。让自己的页面更加绚丽，哈哈，您是不是也心动了呢！ </FONT>
<DT disabled><FONT size=2>材料： </FONT>
<DD><FONT size=2>XML卷之动态排序<BR>有2个文件：paixu.xml 和 paixu.xsl </FONT>
<DT disabled><FONT size=2>作用： </FONT>
<DD><FONT size=2>在不刷新页面的情况下更据用户自己的需要对数据重新进行排序显示，有效的提高数据互动功能，让自己的页面更加绚丽多彩。 </FONT></DD></DL></TD></TR>
<TR>
<TD>
<DL>
<DT disabled><FONT size=2>效果： </FONT>
<DD><FONT disabled color=#414042 size=2><A href="http://www.wy1997.com/sailflying/learn/paixu.xml">浏览这里</A></FONT><FONT size=2> (已失效)</FONT></DD></DL></TD></TR>
<TR>
<TD>
<DL>
<DT disabled><FONT size=2>代码： </FONT>
<DD>
<TABLE class=tablelogo cellSpacing=0 cellPadding=0 width=370 border=0>
<TBODY>
<TR>
<TD height=20><B><FONT size=2>paixu.xml</FONT></B></TD></TR>
<TR>
<TD><FONT size=2>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<BR>&lt;?xml-stylesheet type="text/xsl" href="paixu.xsl" ?&gt;<BR>&lt;BlueIdea&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;1&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;Sailflying&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;一个简单的排序&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2002-1-11 17:35:33&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;XML专题&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;2&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;flyingbird&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;嫁给你，是要你疼的&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2001-09-06 12:45:51&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;灌水精华&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;3&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;苛子&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;正则表达式在ＵＢＢ论坛中的应用&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2001-11-23 21:02:16&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;Web 编程精华&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;4&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;太乙郎&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;年末经典分舵聚会完全手册 v0.1&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2000-12-08 10:22:48&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;论坛灌水区&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&nbsp;&nbsp;&lt;team&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_ID&gt;5&lt;/blue_ID&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_name&gt;mmkk&lt;/blue_name&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_text&gt;Asp错误信息总汇&lt;/blue_text&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_time&gt;2001-10-13 16:39:05&lt;/blue_time&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&lt;blue_class&gt;javascript脚本&lt;/blue_class&gt;<BR>&nbsp;&nbsp;&lt;/team&gt;<BR>&lt;/BlueIdea&gt; <BR></FONT></TD></TR></TBODY></TABLE><BR>
<TABLE class=tablelogo cellSpacing=0 cellPadding=0 border=0>
<TBODY>
<TR>
<TD height=20><B><FONT size=2>paixu.xsl</FONT></B></TD></TR>
<TR>
<TD><FONT size=2>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<BR>&lt;xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"&gt;<BR>&lt;xsl:template match="/"&gt;<BR>&lt;html&gt;<BR>&lt;head&gt;<BR>&lt;title&gt; XML卷之实战锦囊（1）：动态排序&lt;/title&gt;<BR>&lt;style&gt;body,BlueIdea,team,blue_ID,blue_name,blue_text,blue_time,<BR>blue_class{ font: 12px "宋体", "Arial", "Times New Roman"; } <BR>table { font-size: 12px; border: 0px double; border-color: #99CC99 #99CC99 #CCCCCC #CCCCCC; cellpadding:3;cellspacing:3; bgcolor:#eeeeee; text-decoration: blink} <BR>span { font-size: 12px; color: red; }<BR>&lt;/style&gt;<BR>&lt;script&gt;<BR>function taxis(x) <BR>{ <BR>stylesheet=document.XSLDocument; <BR>source=document.XMLDocument; <BR>sortField=document.XSLDocument.selectSingleNode("//@order-by");<BR>sortField.value=x; <BR>Layer1.innerHTML=source.documentElement.transformNode(stylesheet); <BR>}<BR>&lt;/script&gt;<BR>&lt;/head&gt;<BR>&lt;body&gt;<BR>&lt;p align="center"&gt;&lt;span&gt;XML卷之实战锦囊（1）：动态排序&lt;/span&gt;&lt;/p&gt;<BR>&lt;div id="Layer1" name="Layer1"&gt;<BR>&lt;xsl:apply-templates select="BlueIdea" /&gt;<BR>&lt;/div&gt;<BR>&lt;/body&gt;<BR>&lt;/html&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="BlueIdea"&gt;<BR>&lt;table width="500" border="1" align="center" cellpadding="1" cellspacing="1" bordercolordark="#ffffff" bordercolorlight="#ADAAAD"&gt;<BR>&lt;tr bgcolor="#FFCC99" align="center"&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_ID')"&gt;编号&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_name')"&gt;姓名&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_text')"&gt;主题&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_time')"&gt;发表时间&lt;/td&gt;<BR>&lt;td style="cursor:s-resize" onClick="taxis('blue_class')"&gt;归类&lt;/td&gt;<BR>&lt;/tr&gt;<BR>&lt;xsl:apply-templates select="team" order-by="blue_ID"/&gt;<BR>&lt;/table&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="team"&gt;<BR>&lt;tr align="center"&gt;<BR>&lt;xsl:apply-templates select="blue_ID" /&gt;<BR>&lt;xsl:apply-templates select="blue_name" /&gt;<BR>&lt;xsl:apply-templates select="blue_text" /&gt;<BR>&lt;xsl:apply-templates select="blue_time" /&gt;<BR>&lt;xsl:apply-templates select="blue_class" /&gt;<BR>&lt;/tr&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_ID"&gt;<BR>&lt;td bgcolor="#eeeeee"&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_name"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_text"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_time"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;xsl:template match="blue_class"&gt;<BR>&lt;td&gt;<BR>&lt;xsl:value-of /&gt;<BR>&lt;/td&gt;<BR>&lt;/xsl:template&gt;<BR>&lt;/xsl:stylesheet&gt;<BR></FONT></TD></TR></TBODY></TABLE><BR></DD></DL>
<DL>
<DT disabled><FONT size=2>讲解： </FONT>
<DD>
<TABLE class=tablelogo cellSpacing=0 cellPadding=0 width=497 border=0>
<TBODY>
<TR>
<TD><FONT size=2>1）paixu.xml 是数据文件，相信大家都不会有问题。<BR>2）paixu.xsl 是格式文件，有几个地方要注意。 </FONT></TD></TR>
<TR>
<TD>
<P><FONT size=2>（1）脚本中：<BR><BR></FONT><FONT size=2><FONT color=red>sortField=document.XSLDocument.selectSingleNode("//@order-by"); <BR></FONT>作用是：找到有属性为order-by的第一个节点，因此它对应的节点就是<BR></FONT><FONT size=2><FONT color=red>&lt;xsl:apply-templates select="team" order-by="blue_ID"/&gt;<BR></FONT>因此在初次onLoad的时候order-by的value值是blue_ID。<BR>而我们就是通过重新定义order-by的value值来达到排序的目的。 </FONT></P><FONT color=red><BR><FONT size=2>Layer1.innerHTML=source.documentElement.transformNode(stylesheet); <BR></FONT></FONT><FONT size=2>作用是：转化XML数据后更改Layer1，因此在传出参数'blue_name'后，<BR></FONT><FONT size=2><FONT color=red>&lt;td style="cursor:s-resize" onClick="taxis('blue_name)"&gt;姓名&lt;/td&gt;<BR></FONT>我们将order-by的value值修改为是'blue_name'，即以'blue_name'为排序方式。<BR>继而通过重新显示Layer1的innerHTML值来显示新的排序内容。<BR></FONT>
<P><FONT size=2>（2）文本中：<BR></FONT><FONT color=red><BR><FONT size=2>order-by<BR></FONT></FONT><FONT size=2>这个可不能少哦，不然就找不到了，效果嘛，你瞧瞧看吧！！ </FONT></P>
<P><FONT size=2><FONT color=red>&lt;?xml version="1.0" encoding="gb2312" ?&gt;<BR></FONT>另外说一点：<BR>在大多的XML教科书中所显示的代码中很少会加上encoding="gb2312" ，<BR>因此我们在XML中用到中文的时候会报错，原因就是没有写这个申明。<BR></FONT></P></TD></TR></TBODY></TABLE><BR>
<DT disabled><FONT size=2>后记： </FONT>
<DD><FONT size=2>大家熟悉动态排序完成思路后会发现，其实我们的实现手法很简单。<BR></FONT><FONT size=2><FONT color=red>就是修改order-by的数值，然后重新显示。<BR></FONT>在动态查询和动态分页的功能中我们依然是按照这个思路去完成的。</FONT></DD></DL></TD></TR></TBODY></TABLE><img src ="http://www.blogjava.net/chenpengyi/aggbug/13469.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-09-20 00:06 <a href="http://www.blogjava.net/chenpengyi/articles/13469.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>网站登陆搜索引擎的方法(转)</title><link>http://www.blogjava.net/chenpengyi/articles/12619.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Sat, 10 Sep 2005 04:52:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/12619.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/12619.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/12619.html#Feedback</comments><slash:comments>7</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/12619.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/12619.html</trackback:ping><description><![CDATA[<P>网站推广的一般方法就是让各大搜索引擎都能搜索到你的网站，下面介绍一般搜索引擎的登录方法。</P>
<P>1、google<BR>&nbsp;&nbsp;&nbsp; 如果你的网站是新发布的，或是访问量较低的网站在内容更新时，很有必要主动提交到Google，这样会使网站资料迅速更新倒Google搜索资料库，让用户能及时搜索到你的最新资料。<BR>&nbsp;&nbsp;&nbsp; 登录地址：<A class=bb-url href="http://www.google.com/add_url.html" target=_blank rel=nofollow>http://www.google.com/add_url.html</A></P>
<P>2、baidu<BR>&nbsp;&nbsp;&nbsp; baidu基本跟google差不多<BR>&nbsp;&nbsp;&nbsp; 登录地址：<A class=bb-url href="http://www.baidu.com/search/url_submit.html" target=_blank rel=nofollow>http://www.baidu.com/search/url_submit.html</A></P>
<P>3、ODP(开放式目录)<BR>　Open Directory Project (ODP) 是仅次于Yahoo的人工操作目录索引类搜索引擎。与Yahoo不同的是，Open Directory Project (ODP)的编辑人员均为志愿者，而非其雇员。目前其志愿编辑人数已达数万人。<BR>简体中文登录地址：<A class=bb-url href="http://www.dmoz.com/World/Chinese_Simplified/" target=_blank rel=nofollow>http://www.dmoz.com/World/Chinese_Simplified/</A></P>
<P>4、yahoo中国<BR>　在雅虎主站登录网站是要收费的，不过目前在雅虎中国登录网站是免费的，要登录的话得赶紧。<BR>登录步骤：<BR>　　1、 进入雅虎中国，<A class=bb-url href="http://www.yahoo.com.cn/" target=_blank rel=nofollow>http://www.yahoo.com.cn/</A><BR>　　2、 在其左下角的"网站分类"模块中选择适合你网站的目录。<BR>　　3、 点击"登录网站"，按照提示填写信息即可。</P>
<P>5、sohu<BR>&nbsp;&nbsp;&nbsp; 搜狐只对非商业型网站，如政府机构，慈善机构，学校等，提供免费网站登录服务。如果你的网站属于非商业型网站，那么赶快到搜狐免费登录。商业网站（如：商场、公司、电子商务等）就要花钱来登录了。<BR>&nbsp;&nbsp;&nbsp; 登录地址：<A class=bb-url href="http://db.sohu.com/regurl/regform.asp?Step=REGFORM" target=_blank rel=nofollow>http://db.sohu.com/regurl/regform.asp?Step=REGFORM</A></P>
<P>6、yisou<BR>&nbsp;&nbsp;&nbsp; 一搜是雅虎新推出的挑战google的搜索服务。<BR>&nbsp;&nbsp;&nbsp; 登录地址：<A class=bb-url href="http://www.yisou.com/search_submit.html" target=_blank rel=nofollow>http://www.yisou.com/search_submit.html</A></P>
<P>7、天网搜索<BR>&nbsp;&nbsp;&nbsp; 北大的搜索引擎，高校学生用得比较多。<BR>&nbsp;&nbsp;&nbsp; 登录地址：<A class=bb-url href="http://www.infomall.cn/url_submit.html" target=_blank rel=nofollow>http://www.infomall.cn/url_submit.html</A></P>
<P>8、孙悟空搜索<BR>&nbsp;&nbsp;&nbsp; 用得很少。<BR>&nbsp;&nbsp;&nbsp; 地址：<A class=bb-url href="http://www.sunwukong.cn/add.php" target=_blank rel=nofollow>http://www.sunwukong.cn/add.php</A></P>
<P>9、搜狗<BR>&nbsp;&nbsp;&nbsp; 臭名昭著的搜索引擎<BR>&nbsp;&nbsp;&nbsp; 地址：<A class=bb-url href="http://www.soogou.com/add.htm" target=_blank rel=nofollow>http://www.soogou.com/add.htm</A></P>
<P>10、易搜<BR>&nbsp;&nbsp;&nbsp; 没用过，不知道怎么样，看名字跟yahoo的yisou很相近。<BR>&nbsp;&nbsp;&nbsp; 地址：<A class=bb-url href="http://www.ysou.com/site/reg.asp" target=_blank rel=nofollow>http://www.ysou.com/site/reg.asp</A></P>
<P>&nbsp;&nbsp;&nbsp; 申请免费统计alexa头像：<BR>&nbsp;&nbsp;&nbsp; <A href="http://www.alexa.com/site/site_stats/signup">http://www.alexa.com/site/site_stats/signup</A></P>
<P>&nbsp;&nbsp;&nbsp; 更新ALEXA的缩略图：<BR>&nbsp;&nbsp;&nbsp; <A href="http://thumbnails.alexa.com/update_thumbnail">http://thumbnails.alexa.com/update_thumbnail</A></P>
<P>&nbsp;&nbsp;&nbsp; ALEXA的统计：<BR>&nbsp;&nbsp;&nbsp; 流量排名<BR>&nbsp;&nbsp;&nbsp; <A href="http://www.alexa.com/site/site_stats/signup">http://www.alexa.com/site/site_stats/signup</A> </P>
<P>&nbsp;&nbsp;&nbsp; 站点统计<BR>&nbsp;&nbsp;&nbsp; <A href="http://www.alexa.com/site/site_stats/signup?mode=stats">http://www.alexa.com/site/site_stats/signup?mode=stats</A> </P>
<P>&nbsp;&nbsp;&nbsp; 流量历史图片<BR>&nbsp;&nbsp;&nbsp; <A href="http://www.alexa.com/site/site_stats/signup?mode=graph">http://www.alexa.com/site/site_stats/signup?mode=graph</A></P><img src ="http://www.blogjava.net/chenpengyi/aggbug/12619.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-09-10 12:52 <a href="http://www.blogjava.net/chenpengyi/articles/12619.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>对初学编程者的忠告 推荐</title><link>http://www.blogjava.net/chenpengyi/articles/8205.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Fri, 22 Jul 2005 11:50:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/8205.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/8205.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/8205.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/8205.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/8205.html</trackback:ping><description><![CDATA[<P><FONT color=#0000ff>我始终认为，对一个初学者来说，IT界的技术风潮是不可以追赶的，而且也没有能力去追赶。我时常看 见自己的DDMM们把课本扔了，去卖些价格不菲的诸如C#, VB.Net 这样的大部头，这让我感到非常痛心。 </FONT></P>
<P><FONT color=#0000ff>而许多搞不清指针是咋回事的BBS站友眉飞色舞的讨论C#里面可以不用指针等等则让我觉得好笑。C++就象当年的ASP一样，"忽如一夜春风来，千树万树梨花开"，结果许多学校的信息学院成了"Web 学院"。 </FONT></P>
<P><FONT color=#0000ff>96,97级的不少大学生都去做Web了。当然我没有任何歧视某一行业的意识。我只是觉得如 果他们把追赶这些时髦技术的时间多花一点在基础的课程上应该是可以走得更远的。 </FONT></P>
<P><FONT color=#0000ff>几个误区 </FONT></P>
<P><FONT color=#0000ff>初学者对C++风潮的追赶其实也只是学习过程中经常遇到的几个误区之一。我将用一些实际的例子来说明这 些现象，你可以按部就班的看看自己是不是属于其中的一种或者几种： </FONT></P>
<P><FONT color=#0000ff>认为计算机技术等于编程技术: </FONT></P>
<P><FONT color=#0000ff>有些人即使没有这个想法，在潜意识中也有这样的冲动。让我奇怪的是，许多信息学院的学生也有这样的念头。认为计算机专业就是编程专业，与编程无关的，或者不太相关的课程他统统都不管，极端的学生只要书上没带"编程"两个字他就不看。 </FONT></P>
<P><FONT color=#0000ff>其实编程只是计算机技术应用过程中一种复杂性最低的劳动，这就是为什么IT业最底层的人是程序员（ CODER）。计算机技术包括了多媒体，计算机网络，人工智能，模式识别，管理信息系统等等这些方面。 </FONT></P>
<P><FONT color=#0000ff>编程工作只是在这些具体技术在理论研究或者工程实践的过程中表达算法的过程。编程的人不一定对计算机技术的了解就一定很高。而一个有趣的现象是，不少大师级的计算机技术研究者是不懂编程的。网上的炒作和现实中良好的工作待遇把编程这种劳动神秘化了。其实每一个程序员心里都明白，自己这些东西，学的时候并不比其它专业难，所以自然也不会高档到哪里去。 </FONT></P>
<P><FONT color=#0000ff>咬文嚼字的孔乙己作风: </FONT></P>
<P><FONT color=#0000ff>我见过一本女生的《计算机网络原理》教材，这个女生象小学生一样在书上划满了横杠杠，笔记做得满满的，打印出来一定比教材还厚。我不明白的是，象计算机网络原理这样的课程有必要做笔记？我们的应试教育的确害了不少学生，在上《原理》这一类课程的时候许多学生象学《马列原理》一样逐字背诵记忆。 </FONT></P>
<P><FONT color=#0000ff>这乃是我见过的最愚蠢的行为。所谓《原理》，即是需要掌握它为什么这样做，学习why，而不是how（怎样做）。极端认真的学生背下以太网的网线最大长度，数据帧的长度，每个字段的意义，IP报头的格式等等，但是忘了路由的原则，忘了TCP/IP协议设计的宗旨。总之许多人花了大量的时间把书背得滚瓜烂熟却等于什么也没学。 </FONT></P>
<P><FONT color=#0000ff>在学习编程的时候这些学生也是这样，他们确切的记得C++语法的各个细节。看完了C++教程后看《Thinking in C++》（确实是好书），《Inside C++》，《C++ reference》，this C++,thatC++……，然后是网上各种各样的关于C++语法的奇闻逸事，然后发现自己又忘了C++的一些语法，最后回头继续恶补…。有个师弟就跟我说："C++ 太难了，学了这里忘了那里，学了继承忘了模板。"我的回答道："你不去学就容易了"。我并没有教坏他，只是告诉他，死抠C++的语法就和孔已己炫耀茴香豆的茴字有几种写法一样毫无意义。你根本不需要对的C++语法太关心，动手编程就是了，有不记得的地方一查MSDN就立马搞定。我有个结论就是，实际的开发过程中对程序语法的了解是最微不足道的知识。这是为什么我在为同学用Basic（我以前从没有学过它）写一个小程序的时候，只花了半个小时看了看语法，然后再用半个小时完成了程序，而一个小时后我又完全忘记了Basic 的所有关键字。 </FONT></P>
<P><FONT color=#0000ff>不顾基础，盲目追赶时髦技术： </FONT></P>
<P><FONT color=#0000ff>终于点到题目上来了。大多数的人都希望自己的东西能够马上跑起来，变成钱。这种想法对一个已经进入职业领域的程序员或者项目经理来说是合理的，而且IT技术进步是如此的快，不跟进就是失业。但是对于初学者来说（尤其是时间充裕的大中专在校生），这种想法是另人费解的。一个并未进入到行业竞争中来的初学者最大的资本便是他有足够的时间沉下心来学习基础性的东西，学习why 而不是how。时髦的技术往往容易掌握，而且越来越容易掌握，这是商业利益的驱使，为了最大化的降低软件开发的成本。但在IT领域内的现实就是这样，越容易掌握的东西，学习的人越多，而且淘汰得越快。每一次新的技术出来，都有许多初学者跟进，这些初学者由于缺乏必要的基础而使得自己在跟进的过程中花费大量的时间，而等他学会了，这种技术也快淘汰了。基础的课程，比方数据结构，操作系统原理等等虽然不能让你立马就实现一个linux（这是许多人嘲笑理论课程无用的原因），但它们能够显著的减少你在学习新技术时学习曲线的坡度。而且对于许多关键的技术（比方Win32 SDK 程序的设计，DDK的编程）来说甚至是不可或缺的。 </FONT></P>
<P><FONT color=#0000ff>一个活生生的例子是我和我的一个同学，在大一时我还找不到开机按纽，他已经会写些简单的汇编程序了。我把大二的所有时间花在了汇编，计算机体系结构，数据结构，操作系统原理等等这些课程的学习上，而他则开始学习HTML和VB，并追赶ASP的潮流。大三的时候我开始学习Windows 操作系统原理，学习SDK编程，时间是漫长的，这时我才能够用VC开发出象模象样的应用程序。我曾一度因为同学的程序已经能够运行而自己还在学习如何创建对话框而懊恼不已，但临到毕业才发现自己的选择是何等的正确。和我谈判的公司开出的薪水是他的两倍还多。下面有一个不很恰当的比方：假设学习VB编程需要4个月，学习基础课程和VC的程序设计需要1年。那么如果你先学VB，再来学习后者，时间不会减少，还是1年，而反过来，如果先学习后者，再来学VB，也许你只需要1个星期就能学得非常熟练。</FONT></P>
<P><FONT color=#0000ff>几个重要的基础课程 </FONT></P>
<P><FONT color=#0000ff>如果你是学生，或者如果你有充足的时间。我建议你仔细的掌握下面的知识。我的建议是针对那些希望在IT技术上有所成就的初学者。同时我还列出了一些书目，这些书应该都还可以在书店买到。说实在的，我在读其他人的文章时最大的心愿就是希望作者列出一个书单。 </FONT></P>
<P><FONT color=#0000ff>大学英语－不要觉得好笑。我极力推荐这门课程是因为没有专业文档的阅读能力是不可想象的。中文的翻译往往在猴年马月才会出来，而现在的许多出版社干脆就直接把E文印刷上去。学习的方法是强迫自己看原版的教材，开始会看不懂，用多了自然熟练。吃得苦下得狠心绝对是任何行业都需要的品质。 </FONT></P>
<P><FONT color=#0000ff>计算机体系结构和汇编语言－关于体系结构的书遍地都是，而且也大同小异，倒是汇编有一本非常好的书。《80x86汇编语言程序设计教程》（清华大学出版社，黑色封面，杨季文著）。你需要着重学习386后保护模式的程序设计。否则你在学习现代操作系统底层的一些东西的时候会觉得是在看天书。 </FONT></P>
<P><FONT color=#0000ff>计算机操作系统原理－我们的开发总是在特定的操作系统上进行，如果不是，只有一种可能：你在自己实现一个操作系统。无论如何，操作系统原理是必读的。这就象我们为一个芯片制作外围设备时，芯片基本的工作时序是必需了解的。这一类书也很多，我没有发现哪一本书非常出众。只是觉得在看完了这些书后如果有空就应该看看《Inside Windows 2000》(微软出版社，我看的是E文版的，中文的书名想必是Windows 2000 技术内幕之类吧)。关于学习它的必要性，ZDNET上的另一篇文章已经有过论述。 </FONT></P>
<P><FONT color=#0000ff>数据结构和算法－这门课程能够决定一个人程序设计水平的高低，是一门核心课程。我首选的是清华版的（朱战立，刘天时）。很多人喜欢买C++版的，但我觉得没有必要。C++的语法让算法实现过程变得复杂多了，而且许多老师喜欢用模块这一东西让算法变得更复杂。倒是在学完了C版的书以后再来浏览一下C++的版的书是最好的。 </FONT></P>
<P><FONT color=#0000ff>软件工程－这门课程是越到后来就越发现它的重要，虽然刚开始看时就象看马哲一样不知所云。我的建议是看《实用软件工程》（黄色，清华）。不要花太多的时间去记条条框框，看不懂就跳过去。在每次自己完成了一个软件设计任务（不管是练习还是工作）以后再来回顾回顾，每次都会有收获。 </FONT></P>
<P><FONT color=#0000ff>Windows 程序设计－《北京大学出版社，Petzold著》我建议任何企图设计Windows 程序的人在学习VC以前仔细的学完它。而且前面的那本《Inside Windows 2000》也最好放到这本书的后面读。 </FONT></P>
<P><FONT color=#0000ff>在这本书中，没有C++，没有GUI，没有控件。有的就是如何用原始的C语言来完成Windows 程序设计。在 学完了它以后，你才会发现VC其实是很容易学的。千万不要在没有看完这本书以前提前学习VC，你最好碰都不要碰。我知道的许多名校甚至都已经用它作为教材进行授课。可见其重要。 </FONT></P>
<P><FONT color=#0000ff>上面的几门课程我认为是必学的重要课程（如果你想做Windows 程序员）。 </FONT></P>
<P><FONT color=#0000ff>对于其它的课程有这样简单的选择方法：如果你是计算机系的，请学好你所有的专业基础课。如果不是，请参照计算机系的课程表。如果你发现自己看一本书时无法看下去了，请翻到书的最后，看看它的参考文献，找到它们并学习它们，再回头看这本书。如果一本书的书名中带有"原理"两个字，你一定不要去记忆它其中的细节，你应该以一天至少50页的速度掌握其要领。尽可能多的在计算机上实践一种理论或者算法。 </FONT></P>
<P><FONT color=#0000ff>你还可以在CSDN上阅读到许多书评。这些书评能够帮助你决定读什么样的书。</FONT></P>
<P><FONT color=#0000ff>日三省乎己 </FONT></P>
<P><FONT color=#0000ff>每天读的书太多，容易让人迷失方向。一定要在每天晚上想想自己学了些什么，还有些什么相关的东西需要掌握，自己对什么最感兴趣，在一本书上花的时间太长还是不够等等。同时也应该多想想未来最有可能出现的应用，这样能够让你不是追赶技术潮流而是引领技术潮流。同时，努力使用现在已经掌握的技术和理论去制作具有一定新意的东西。坚持这样做能够让你真正成为一个软件"研发者"而不仅仅是一个CODER。 </FONT></P>
<P><FONT color=#0000ff>把最多的时间花在学习上 </FONT></P>
<P><FONT color=#0000ff>这是对初学者最后的忠告。把每个星期玩SC或者CS的时间压缩到最少，不玩它们是最好的。同时，如果你的ASP技术已经能够来钱，甚至有公司请你兼职的话，这就证明你的天份能够保证你在努力的学习之后取得更好的收益，你应该去做更复杂的东西。眼光放长远一些，这无论是对谁都是适用的。 </FONT></P>
<P><FONT color=#0000ff>相信你已经能够决定是否学习C＃或者什么时候去学它了</FONT></P><img src ="http://www.blogjava.net/chenpengyi/aggbug/8205.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-07-22 19:50 <a href="http://www.blogjava.net/chenpengyi/articles/8205.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>jsp 结合 javabeans 操作 mysql 数据库（转！）</title><link>http://www.blogjava.net/chenpengyi/articles/7567.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Tue, 12 Jul 2005 16:01:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/7567.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/7567.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/7567.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/7567.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/7567.html</trackback:ping><description><![CDATA[<P>本文用jsp结合javabeans实现对mysql数据库的操作。<BR><BR>首先，请确定您已经安装以下软件：<BR>1、Java 2 sdk 1.4<BR>2、MySql数据库<BR>3、Macromedia JRun（也可以使用其它jsp服务器）<BR>4、Mysql Control Center（非必需）<BR>5、文本编辑器（作者用的是EditPlus2）<BR><BR>在开始动手之前，我们要先明确先个问题：<BR><BR>问题一：如何用javabeans连接数据库<BR><BR>javabeans连结mysql数据库的核心代码如下：</P>
<P>Javabeans连结数据库核心代码：<BR><BR>Class.forName("org.gjt.mm.mysql.Driver").newInstance(); String url ="jdbc:mysql://localhost:3306/yourDataBase?user=username&amp;password=password&amp;useUnicode=true&amp;characterEncoding=gb2312"; Connection conn= DriverManager.getConnection(url); Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);&nbsp; ResultSet rs=stmt.executeQuery("select * from test");</P>
<P>其中"org.gjt.mm.mysql.Driver"是mysql的jdbc驱动。默认的是没有的，你可以到网上下载一个，解压后就可以使用。其中点操作符表示路径，即org\gjt\mm\mysql\Driver.class。当然，这个包里还会有其它的class，您可以自己看一下，如果需要的话，可以直接拿来用。在url中，yourDataBase是你的数据库的名字，username是数据库的访问名称，password是密码。后面的useUnicode=true&amp;characterEncoding=gb2312是为了解决中文问题，这样从MySql中获取的即为中文字符。Rs即为执行查询select * from test后返回的结果集。</P>
<P>问题二：在jsp中如何调用javabeans<BR><BR>在jsp中，我们用&lt;jsp:useBean id="DBConnID" class="DBConn" scope="session"/&gt;<BR>来调用javabeans。事实上，这相当于导入一个类DBConn，然后创建一个名为DBConnID的实例，我们可以直接用DBConnID.DBConn()调用类DBConn中的DBConn方法。这和面向对象编程中的所有其它方法都是一样的。</P>
<P>问题三：提交表单的编码问题<BR><BR>在jsp中，表单提交以后，如果我们不进行任何处理，那么写进数据库的会是乱码。在这里，我们用<BR>String newname = new String(request.getParameter("newname").getBytes("ISO8859_1"));<BR>即可解决此问题。</P>
<P>问题四：大段文本的换行问题<BR><BR>因为html不能正常显示大段文本的换行、回车，所以我们要在输出到html的时候将其中的回车、换行替换成html标签&lt;br&gt;。但是在java中，String类的replace方法只能替换单个字符。不过我们可以用StringBuffer类的replace方法来解决这个问题：<BR>myStringBuffer.replace(int start, int end , String str);</P>
<P>其中start是要替换字符串的开始位置，end是要替换字符串的结束位置，str是用来替换的字符串。我们只要用字符串&lt;br&gt;替换原文本中的\r\n，就可以在网页中正确地输出了。<BR>明确了这四个问题以后，我们就可以开始动手了。<BR><BR>一、准备MySql数据库<BR><BR>在MySql的test数据库中新建表tbl_test,共有两个字段id和name，其中id为int型，name为text型.<BR>&nbsp;<BR>表tbl_test建好以后，在其中随便加入几条数据，以备测试用。&nbsp;<BR><BR>二、编写连接数据库的javabeans<BR><BR>用文本编辑器编写如下代码，将其保存为c:\j2sdk1.4.0\bin\DBConn.java。 <BR>DBConn.java<BR></P><PRE class=CodeSamp>//======================================<BR>//include java class<BR>//======================================<BR>import java.sql.*;<BR><BR>//==========================================<BR>//	Define Class DBConn<BR>//==========================================<BR>public class DBConn<BR>{<BR>	public String sql_driver = "org.gjt.mm.mysql.Driver";<BR>	public String sql_url = "jdbc:mysql://localhost:3306";<BR>	public String sql_DBName = "test";<BR>	public String user = "sa";<BR>	public String pwd = "";<BR><BR>	Connection conn = null;<BR>	Statement stmt = null;<BR>	ResultSet rs = null;<BR><BR>	public boolean DBConn()<BR>	{<BR>		try{<BR>			Class.forName(sql_driver).newInstance();<BR>			this.conn = DriverManager.getConnection(sql_url + "/" + sql_DBName + "?user=" + user + "&amp;password=" + pwd + "&amp;useUnicode=true&amp;characterEncoding=gb2312");<BR>			this.stmt = this.conn.createStatement();<BR>			return true;<BR>		}catch(Exception e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public ResultSet executeQuery(String strSql)<BR>	{<BR>		try{<BR>			this.rs = stmt.executeQuery(strSql);<BR>			return this.rs;<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return null;<BR>		}catch(NullPointerException e){<BR>			System.out.println(e.toString());<BR>			return null;<BR>		}<BR>	}<BR><BR>	public boolean execute(String strSql)<BR>	{<BR>		try{<BR>			if(this.stmt.executeUpdate(strSql) == 0)<BR>				return false;<BR>			else<BR>				return true;<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}catch(NullPointerException e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public boolean hasData()<BR>	{<BR>		try{<BR>			boolean has_Data = this.rs.first();			<BR>			this.rs.beforeFirst();<BR>			return has_Data;<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public boolean rs_absolute(int row)<BR>	{<BR>		try{<BR>			this.rs.absolute(row);<BR>			return true;<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public void rs_afterLast()<BR>	{<BR>		try{<BR>			this.rs.afterLast();<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>		}<BR>	}<BR><BR>	public void rs_beforeFirst()<BR>	{<BR>		try{<BR>			this.rs.beforeFirst();<BR>		}catch(SQLException e){<BR>			System.out.print(e.toString());<BR>		}<BR>	}<BR><BR>	public boolean rs_first()<BR>	{<BR>		try{<BR>			this.rs.first();<BR>			return true;<BR>		}catch(SQLException e){<BR>			System.out.print(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public boolean rs_next()<BR>	{<BR>		try{<BR>			return this.rs.next();<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public boolean rs_last()<BR>	{<BR>		try{<BR>			return this.rs.last();<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR>	public boolean rs_previous()<BR>	{<BR>		try{<BR>			return this.rs.previous();<BR>		}catch(Exception e){<BR>			System.out.println(e.toString());<BR>			return false;<BR>		}<BR>	}<BR><BR><BR>	public void rs_deleteRow()<BR>	{<BR>		try{<BR>			this.rs.deleteRow();<BR>		}catch(SQLException e){<BR>			System.out.print(e.toString());<BR>		}<BR>	}<BR><BR>	public String rs_getString(String column)<BR>	{<BR>		try{<BR>			return this.rs.getString(column);<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return null;<BR>		}<BR>	}<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public String rs_getHtmlString(String column)<BR>	{<BR>		try{<BR>			String str1 = this.rs.getString(column);<BR>			String str2 = "\r\n";<BR>			String str3 = "<BR>";<BR>			return this.replaceAll(str1,str2,str3);<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return null;<BR>		}<BR>	}	<BR>	private static String replaceAll(String str1,String str2,String str3)<BR>	{<BR>		StringBuffer strBuf = new StringBuffer(str1);<BR>	    int index=0;<BR>		while(str1.indexOf(str2,index)!=-1)<BR>		{<BR>			index=str1.indexOf(str2,index);<BR>			strBuf.replace(str1.indexOf(str2,index),str1.indexOf(str2,index)+str2.length(),str3);<BR>			index=index+str3.length();<BR><BR>			 str1=strBuf.toString();<BR>		}<BR>		return strBuf.toString();<BR>	} <BR><BR>	public int rs_getInt(String column)<BR>	{<BR>		try{<BR>			return this.rs.getInt(column);<BR>		}catch(SQLException e){<BR>			System.out.println(e.toString());<BR>			return -1;<BR>		}<BR>	}<BR><BR>	public void rs_close()<BR>	{<BR>		try{<BR>			this.rs.close();<BR>		}catch(SQLException e){<BR>			System.out.print(e.toString());<BR>		}<BR>	}<BR><BR>	public static void main(String args[])<BR>	{<BR>		try{<BR>			DBConn myconn = new DBConn();<BR>			myconn.setDBName("test");<BR>			myconn.DBConn();<BR>			//myconn.execute("Insert Into tbl_test(id,name) values('10','shandaer')");<BR>			//myconn.execute("Update tbl_test set name='yyyyyyyyyyyy' where id=10");<BR>			//myconn.execute("Delete from tbl_test where id=1");<BR>			myconn.executeQuery("select * from tbl_test");<BR>			while (myconn.rs.next())		<BR>			{<BR>				System.out.println(myconn.rs_getString("id") + myconn.rs_getString("name"));<BR>				System.out.println('\n' + myconn.rs_getHtmlString("name"));<BR>				System.out.println(myconn.rs.getString("name") + myconn.rs_getInt(1));<BR>			}<BR>		}catch(Exception e){<BR>			System.err.println(e.toString());<BR>		}}}<BR><BR><BR>在Windows2000下，打开cmd窗口，转至c:\j2sdk1.4.0\bin目录下，键入命令:javac DBConn.java，如没有抛出任何例外，则编译成功。<BR>如有例外抛出，请仔细检查程序代码。如果说找不到mysql的驱动，请将mysql的jdbc驱动org包放至bin目录下，那样就可以连接数据库了。<BR>编译完成后，键入命令：java DBConn，如果有数据库中的数据被输出，说明javabeans已经编写成功。<BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR><BR></PRE><PRE class=CodeSamp><P>三、建立sqlmanage服务器<BR><BR>在JRun Administrator中，新建sqlmanage服务器。在根目录下分别新建文件index.jsp、add.jsp、del.jsp、edit.jsp、editpost.jsp，<BR>同时将编译好的DBConn.class文件拷至sqlmanage\WEB-INF\classes\目录下。另外，我们需要到网上下载一个MySql的jdbc驱动，解压缩后将<BR>org文件夹整个拷至DBConn.class所在目录下。<BR></P></PRE><img src ="http://www.blogjava.net/chenpengyi/aggbug/7567.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-07-13 00:01 <a href="http://www.blogjava.net/chenpengyi/articles/7567.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JSP连接mysql数据库攻略（转一个好的，RSS对我好像没用……）</title><link>http://www.blogjava.net/chenpengyi/articles/7566.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Tue, 12 Jul 2005 15:56:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/7566.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/7566.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/7566.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/7566.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/7566.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;连续几天安装配置和连接Mysql数据库，今天终于成功了，回想这几天，真的是甜酸苦辣都有，单mysql就重装了不下10次，而在eclipse上编写的连接数据库的程序总是报错．我都已经down了oracal准备放弃mysql了，不过．．．就象电视剧演的那样，转机总是在这个时候出现，先是看到了saulzy关于mysql4.1.11版本的安装介绍，接着又找到了一款不错的mysql 界面插件，最后在网友的帮助下把mysql的JDBC驱动配好并连通了．一连5天，日子真不好过阿，不过这个过程中，我也觉得自己学到不少东西，呵呵，反正都撑过来了，就要继续往前走．现在，就这几天弄的总结一下，希望对同是正在学习JAVA技术的同道中人能有帮助．
<P>　　(相关链接："配置Eclpise+tomcat并实现JSP的编写与部署")</P>
<P>一． 软件下载<BR>　　Mysql<BR>　　下载版本：4.1.11<BR>　　<A href="http://dev.mysql.com/downloads/mysql/4.1.html"><FONT color=#002c99>http://dev.mysql.com/downloads/mysql/4.1.html</FONT></A></P>
<P>　　JDBC驱动<BR>　　下载版本：3.1.8<BR>　　<A href="http://dev.mysql.com/downloads/connector/j/3.1.html"><FONT color=#002c99>http://dev.mysql.com/downloads/connector/j/3.1.html</FONT></A></P>
<P>　　Mysql界面插件:mysql-front<BR>　　下载版本镜像：HongKong（我下回来安装就是中文版了）<BR>　　<A href="http://www.mysqlfront.de/download.html"><FONT color=#002c99>http://www.mysqlfront.de/download.html</FONT></A></P>
<P>二． 软件安装<BR>　　1.安装mysql<BR>　　请参阅相关文章，推荐文章：<A href="http://blog.csdn.net/saulzy/archive/2005/04/23/359648.aspx"><FONT color=#002c99>http://blog.csdn.net/saulzy/archive/2005/04/23/359648.aspx</FONT></A></P>
<P>　　2.JDBC驱动：mysql-connector-java-3.1.8<BR>　　这只是一个压缩包，并不需要安装，只要将其解压，我么使用的是文件夹mysql-connector-java-3.1.8里的文件：mysql-connector-java-3.1.8-bin.jar．</P>
<P>　　3. Mysql界面插件:mysql-front<BR>　　这是一个安装程序，按照提示安装就可以了．</P>
<P>三． 环境配置<BR>　首先，我要说明的是我现在tomcat的安装路径是: D:\Program Files\Java\Tomcat；JDK的安装路径是：D:\Program Files\Java\j2sdk。</P>
<P>　　在这里，需要配置环境变量的是JDBC驱动．在配置前先要把刚才说到的mysql-connector-java-3.1.8-bin.jar本地硬盘某处（我放的地方：D:\Program Files\Java\mysqlforjdbc），然后根据你放的地方，配置classpath，我的配置是这样的：</P>
<P>　　D:\Program files\Java\j2sdk\lib\tools.jar;</P>
<P>　　D:\Program Files\Java\j2sdk\lib\mysql-connector-java-3.1.8-bin-g.jar;</P>
<P>　　D:\Program Files\Java\mysqlforjdbc\mysql-connector-java-3.1.8-bin.jar<BR>　　配置这个的目的是让你的java应用程序找到连接mysql的驱动．</P>
<P>　　配置完环境变量后还有很重要一步就是为JSP连接数据库配置驱动，这个其实很简单，就是把mysql-connector-java-3.1.8- bin.jar拷到某些文件夹里就行了，我在网上看了很多资料问了很多人，各种说法都有，我综合了一下，为了保险，我都全做了，呵呵，反正就是拷一个 400K的文件而已，现列出要把mysql-connector-java-3.1.8-bin.jar拷进去的文件夹，如下：<BR>　　D:\Program Files\Java\Tomcat\common\lib<BR>　　D:\Program Files\Java\Tomcat\shared\lib</P>
<P>四． 数据库的使用</P>
<P>　　Mysql安装完毕以后，还有一些要注意的地方（推荐文章）：<A href="http://blog.csdn.net/saulzy/archive/2005/04/23/359811.aspx"><FONT color=#002c99>http://blog.csdn.net/saulzy/archive/2005/04/23/359811.aspx</FONT></A></P>
<P>　　就象在文章提到的，mysql安装好后最重要一样就是要看数据库有没有作为系统服务启动了，所以在大家进行数据库操作前，应要看看，在操作系统的开始－＞运行－＞输入services.msc，确定你在安装时你设置的关于mysql的那个服务已经启动，这样你在操作数据库时不会报连接不上的错误．</P>
<P>　　上面提到了一个较方便的mysql界面插件，但是这个界面是我在已经开始使用mysql后才找到的，刚开始我是在dos下用命令行进行操作的．虽然那个界面也可以进行建库啊，设定权限等操作，但是，我觉得懂得在使用命令行也是一个很重要的技能，所以我先从命令行开始说，怎样简单使用mysql．到后面会谈及mysql－front的使用．</P>
<P>　　现在我想在mysql里建一个数据库shujuku，以及在数据库里建一个表biao．具体的命令如下（假设mysql我是刚安装好的）</P>
<P>　　1. 进入dos状态（记住命令行的要运行在mysql的安装目录下的bin目录的）</P>
<P>　　2. 连接mysql<BR>　　输入：mysql –h localhost –u root –p<BR>　　输入在安装时已设好的密码，就近入了mysql的命令编辑界面了。</P>
<P>　　3. 使用mysql的基本命令(在mysql命令行编辑每输入完命令后最后一定要有分号，不然会报错)<BR>　　显示数据库：show databases;<BR>　　使用数据库：use 数据库名；</P>
<P>　　4．建库<BR>　　命令：create database shujuku;</P>
<P>　　5.为数据库设置权限（用户和密码）<BR>　　命令：grant all privileges on shujuku.* to <A href="mailto:test@localhost"><FONT color=#002c99>test@localhost</FONT></A> identified by “123456”;<BR>　　当你执行完这个命令以后，只要你再以用户名：test,密码：123456登录时你就只可以对shujuku这个数据库操作，这样避开使用root，对数据库的安全有很大帮助．</P>
<P>　　6.建表<BR>　　命令：create table biao(id int(8) primary key,name varchar(10));</P>
<P>　　剩下来的与标准sqsl命令基本上是一样的，具体操作略<BR>　　值得一提的是，你在命令行上输入＂？＂，就会有mysql命令的简单帮助，如下：</P>
<P>　　呵呵，那样，我们还可以知道退出，就是＂exit＂，呵呵！</P>
<P>五． 关于mysql-front的使用<BR>　　我找了好几个mysql的界面工具，觉得最简洁方便还是mysql-front，可惜的是要收费，不过还好有试用期，呵呵，可以先感受感受一下，最重要一点是mysql-front有简体中文版的，英文不好的我用起来就舒服多了．下面简单说说使用吧．</P>
<P>　　首先，安装就不用说了，有向导，而且很简单．安装好后第一次运行时会跳出来一个要求添加对话的框，在这里你可以添加例如上面已经设定好的shujuku，过程如下:<BR>　　当你在注册的复选框里填上你在上面mysql设定好的用户名和密码后，在选择数据库框里就有shujuku 的数据库了，选上，按确定．进入mysql-fron后，你就会看到下面的界面，这是你就可以进行操作了．</P>
<P>　　要说明的是，你还可以把root用户也加进去，这要你在mysql-fron的界面上选设置－＞对话－＞新建，再按上面进行就可以，出了root你还可以加入更多的用户，方法还是一样的，设置不同的用户，是方便对不同数据库进行管理，呵呵，root是权限最高的，可不要随便让别人使用你的root用户，保正你数据库的安全．</P>
<P>六． JSP连接mysql<BR>　　现在就是尝试用jsp连接mysql了<BR>　　我在eclipse里建了个test_mysql.jsp页面，代码如下：</P>
<P>&lt;%@ page contentType="text/html; charset=gb2312" %&gt;</P>
<P>&lt;%@ page language="java" %&gt;</P>
<P>&lt;%@ page import="com.mysql.jdbc.Driver" %&gt;</P>
<P>&lt;%@ page import="java.sql.*" %&gt;</P>
<P>&lt;%</P>
<P>//驱动程序名</P>
<P>String driverName="com.mysql.jdbc.Driver";</P>
<P>//数据库用户名</P>
<P>String userName="cl41";</P>
<P>//密码</P>
<P>String userPasswd="123456";</P>
<P>//数据库名</P>
<P>String dbName="db";</P>
<P>//表名</P>
<P>String tableName="dbtest";</P>
<P>//联结字符串</P>
<P>String url="jdbc:mysql://localhost/"+dbName+"?user="+userName+"&amp;password="+userPasswd;</P>
<P>Class.forName("com.mysql.jdbc.Driver").newInstance();</P>
<P>Connection connection=DriverManager.getConnection(url);</P>
<P>Statement statement = connection.createStatement();</P>
<P>String sql="SELECT * FROM "+tableName;</P>
<P>ResultSet rs = statement.executeQuery(sql);</P>
<P>//获得数据结果集合</P>
<P>ResultSetMetaData rmeta = rs.getMetaData();</P>
<P>//确定数据集的列数，亦字段数</P>
<P>int numColumns=rmeta.getColumnCount();</P>
<P>// 输出每一个数据值</P>
<P>out.print("id");</P>
<P>out.print("|");</P>
<P>out.print("num");</P>
<P>out.print("&lt;br&gt;");</P>
<P>while(rs.next()) {</P>
<P>out.print(rs.getString(1)+" ");</P>
<P>out.print("|");</P>
<P>out.print(rs.getString(2));</P>
<P>out.print("&lt;br&gt;");</P>
<P>}</P>
<P>out.print("&lt;br&gt;");</P>
<P>out.print("数据库操作成功，恭喜你");</P>
<P>rs.close();</P>
<P>statement.close();</P>
<P>connection.close();</P>
<P>%&gt;</P>
<P>　　然后把test??_mysql.jsp部署到tomcat处，如何部署可参考"配置Eclpise+tomcat并实现JSP的编写与部署"，在浏览器中就可以看到结果了。</P>
<P>　　希望这篇文章的你有帮助！Good luck!</P><img src ="http://www.blogjava.net/chenpengyi/aggbug/7566.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-07-12 23:56 <a href="http://www.blogjava.net/chenpengyi/articles/7566.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JBuilder2005 连接 mysql 驱动配置(看到的比较实用，所以转过来，不涉及版权啊！！)</title><link>http://www.blogjava.net/chenpengyi/articles/7565.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Tue, 12 Jul 2005 15:55:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/7565.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/7565.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/7565.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/7565.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/7565.html</trackback:ping><description><![CDATA[<P>JBuilder2005 连接 mysql 驱动配置<BR>1、MySQL 4.0.12 ，下载网址：<BR><A href="http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-4.1.12a-win32.zip/from/pick">http://dev.mysql.com/get/Downloads/MySQL-4.1/mysql-4.1.12a-win32.zip/from/pick</A><BR>2.MySQL 的JDBC driver 3.0.9 ，下载网址：<BR><A href="http://www.mysql.com/downloads/api-jdbc-stable.html">http://www.mysql.com/downloads/api-jdbc-stable.html</A><BR>本文对JBuilder和MySQL的安装不在此累诉，重点从MySQL 的JDBC driver谈起。<BR>首先，解开MySQL 的JDBC driver的压缩包，其实在这个包中真正有用的就是mysql-connector-java-3.0.9-stable-bin.jar，所以我直接把它放到c:\system\mysql-jdbc（这个目录可以自己定义）下。</P>
<P>在JBuilder中，做如下的操作：</P>
<P>一、选择Tool -&gt; Configure Libraries，在Configure Libraries窗口中选择左边列表框下的New，弹出New Library Wizard 窗口，在Name中输入mysql（可以自己定义），Location中选择User Home，点击Add，选择mysql jdbc的路径：c:\system\mysql-jdbc\ mysql-connector-java-3.0.9-stable-bin.jar，点击ok（两次）；</P>
<P>二、选择Project -&gt; Project Properties -&gt; Paths -&gt; Required Libraries -&gt; 点击Add，选择第一步骤中添加的User Home下的mysql，点击ok（两次）；</P>
<P>三、选择Tool -&gt; Enterprise Setup -&gt; Database Drivers -&gt; 点击Add，选择刚添加的User Home下的mysql，点击ok，在列表框中出现mysql.config，点击ok；</P>
<P>四、提示重新启动JBuilder，设置才能生效，确定后，重启JBuilder；</P>
<P>五、选择Tool -&gt; Database Pilot ，在Database Pilot窗口中选择View -&gt; Options -&gt; Drivers -&gt; 点击Add</P>
<P>Driver class中输入：com.mysql.jdbc.Driver </P>
<P>Sample URL中输入：mysql://localhost:3306/DataBaseName 点击ok；</P>
<P>六、在Database Pilot窗口中选择File -&gt; New，在New URL 窗口中，</P>
<P>Driver：从列表中选择第五步骤建立的com.mysql.jdbc.Driver</P>
<P>URL：将DataBaseName改为存在的数据库，本例中的URL如下：jdbc:mysql://localhost:3306/test，点击ok；</P>
<P>七、在Database Pilot窗口中Database URLs列表中双击刚建立的url，输入连接数据库的用户名、密码，连接成功。</P><img src ="http://www.blogjava.net/chenpengyi/aggbug/7565.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-07-12 23:55 <a href="http://www.blogjava.net/chenpengyi/articles/7565.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>iReport 报表在应用程序中的应用代码(转载)</title><link>http://www.blogjava.net/chenpengyi/articles/7521.html</link><dc:creator>陈朋奕</dc:creator><author>陈朋奕</author><pubDate>Mon, 11 Jul 2005 13:31:00 GMT</pubDate><guid>http://www.blogjava.net/chenpengyi/articles/7521.html</guid><wfw:comment>http://www.blogjava.net/chenpengyi/comments/7521.html</wfw:comment><comments>http://www.blogjava.net/chenpengyi/articles/7521.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.blogjava.net/chenpengyi/comments/commentRss/7521.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/chenpengyi/services/trackbacks/7521.html</trackback:ping><description><![CDATA[<P>import dori.jasper.engine.*;<BR>import dori.jasper.engine.util.*;<BR>import java.sql.*;<BR>import java.util.*;<BR>import dori.jasper.engine.JasperReport;<BR>import java.util.Date;<BR>import java.text.SimpleDateFormat;<BR>import dori.jasper.view.*;<BR>import org.apache.commons.logging.LogFactory;<BR>import com.lowagie.text.DocumentException;<BR>import com.lowagie.text.*;<BR>import dori.jasper.engine.design.*;<BR>import org.apache.commons.digester.Digester;<BR>import org.apache.commons.beanutils.BeanUtils;</P>
<P>public class myreport<BR>{<BR>&nbsp;public void reportName(String strBbmc)<BR>&nbsp;{<BR>&nbsp;&nbsp;JRResultSetDataSource jrds = null;<BR>&nbsp;&nbsp;JasperPrint jasperPrint = null;<BR>&nbsp;&nbsp;Map reportParams = new HashMap();<BR>&nbsp;&nbsp;ResultSet rs = null;<BR>&nbsp;&nbsp;Connection con = null;<BR>&nbsp;&nbsp;Statement stmt = null;<BR>&nbsp;&nbsp;String sql = "select * from&nbsp; bbmc";<BR>&nbsp;&nbsp;try<BR>&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;//动态获取<BR>&nbsp;&nbsp;&nbsp;&nbsp;JasperDesign jasperDesign = JasperManager.loadXmlDesign("./bbmc.jrxml");<BR>&nbsp;&nbsp;&nbsp;&nbsp;JasperReport jasperreport = JasperManager.compileReport(jasperDesign);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//建立连接<BR>&nbsp;&nbsp;&nbsp;&nbsp;ConnectionpoolManager mgr = new ConnectionpoolManager();<BR>&nbsp;&nbsp;&nbsp;&nbsp;mgr.setMonitorThread(520);<BR>&nbsp;&nbsp;&nbsp;&nbsp;mgr.addAlias("jdbcConnecpool","com.microsoft.jdbc.sqlserver.SQLServerDriver","jdbc:microsoft:sqlserver://192.168.45.233:1433;DatabaseName = ysgl ","sa","sa",10,300,520,30,false);<BR>&nbsp;&nbsp;&nbsp;&nbsp;con = DriverManager.getConnection(ConnectionPoolManager.URL_PREFIX+ConnectionPoolManager.getPoolName(),null,null);<BR>&nbsp;&nbsp;&nbsp;&nbsp;stmt = con.creatStatement();<BR>&nbsp;&nbsp;&nbsp;&nbsp;rs = stmt.executeQuery(sql);<BR>&nbsp;&nbsp;&nbsp;&nbsp;jrds = new JRResultSetDataSource(rs);<BR>&nbsp;&nbsp;&nbsp;&nbsp;jasperPrint = JasperFillManager.fillReport(jasperReport,reportParams,jrds);<BR>&nbsp;&nbsp;&nbsp;&nbsp;//调出JasperViewer进行打印预览<BR>&nbsp;&nbsp;&nbsp;&nbsp;JasperViewer.viewReport(jasperPrint);<BR>&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(ClassNotFoundException ee)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ee.printStackTrace();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(SQLException ex)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ex.pritStackTrace;<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;catch(JRException e)<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;e.getMessage();<BR>&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;}<BR>}</P><img src ="http://www.blogjava.net/chenpengyi/aggbug/7521.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/chenpengyi/" target="_blank">陈朋奕</a> 2005-07-11 21:31 <a href="http://www.blogjava.net/chenpengyi/articles/7521.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>