JavaWeb开发常用功能.ppt
Java Wb开发技术教程,第13章 Java Web开发常用功能,主要内容,文件上传分页处理JavaMail树状菜单,文件上传,在Java的Web开发中没有对文件的上传进行封装,需要自己开发一个Servlet或者JavaBean处理上传或下载的任务。从HttpServletRequest中获得客户端请求的输入流。通过输入流中读取指定的文件,将文件保存在指定的位置。,文件上传,jspSmartUpload 组件是一个免费使用的文件上传组件,它的使用简单,功能齐备。通过该组件,可以获得上传文件的全部信息(包括文件名、大小、类型、扩展名、文件数据等),同时还可以对上传文件的大小、类型等方面进行限制。在使用时需要把该组件的jar文件放到站点WEB-INF目录的lib中。,文件上传,jspSmartUpload组件中包括File、Files、Request、SmartUpload等类。File:包括上传文件的所有信息,如:上传的文件名、大小、扩展名、文件数据等。Files:所有上传文件的集合。从中可以获得上传文件的数目、大小等。Request:相当与JSP中的request对象,如果在上传的表单中还有其它的表单项的值,必须通过jspSmartUpload组件中的Request对象获取。SmartUpload:完成文件上传。,单元项目1-采用jspSmartUpload 组件上传文件,项目构思:采用jspSmartUpload 组件将客户端的doc和txt文件上传到Web服务器。项目设计:创建一个JSP文件用于客户端的文件上传界面。将jspSmartUpload组件加入到项目中。创建一个Servlet用于处理上传的文件。,单元项目1-采用jspSmartUpload 组件上传文件,项目实施:创建一个JSP文件upload.jsp:(主要代码如下)文件描述:文件名称:,注意:form表单中必须添加method=“post“与enctype=“multipart/form-data”属性。,单元项目1-采用jspSmartUpload 组件上传文件,项目实施:将jsmartcom_zh_CN.jar文件拷贝到项目目录的WEB-INF/lib下。在Servlet中处理上传文件。,单元项目1-采用jspSmartUpload 组件上传文件,项目实施:在Servlet中处理上传的文件主要代码:SmartUpload mySmartUpload=new SmartUpload();int count=0;/上传文件的数量try mySmartUpload.initialize(this.getServletConfig(),request,response);/限制每个上传文件的最大长度。mySmartUpload.setMaxFileSize(50*1024*1024);/设定允许上传的文件(通过扩展名限制),仅允许doc,txt文件。mySmartUpload.setAllowedFilesList(doc,txt);mySmartUpload.upload();/获得上传的文件File myfile=mySmartUpload.getFiles().getFile(0);/获得上传文件的名字String fileName=myfile.getFileName();/保存文件的目录count=mySmartUpload.save(/upload);/获得文件的描述信息Request re=mySmartUpload.getRequest();String desc=re.getParameter(desc);out.println(count+file uploaded.);out.println(file description:+desc);catch(Exception e)out.println(Unable to upload the file.);out.println(Error:+e.toString();,文件上传,jspSmartUpload组件使用灵活,适合较小文件的传输,如果传输数据较大,则采用commons-fileupload组件。commons-fileupload组件的下载地址为http:/。使用commons-fileupload组件的时候需要将其jar文件放到站点目录WEB-INF/lib下同时还有加入commons IO的jar包。其下载的地址是http:/commons.apache.org/downloads/download_io.cgi(commons-io-1.4.jar)。,文件上传,包中包括了在commons-fileupload组件所有的类。DiskFileItemFactory:代表本地的磁盘文件。FileItem:代表每组数据的接口。ServletFileUpload:获得上传文件。,单元项目2-采用commons-fileupload组件上传文件,项目构思:采用commons-fileupload组件将客户端的doc和txt文件上传到Web服务器。项目设计:创建一个JSP文件用于客户端的文件上传界面。将commons-fileupload组件加入到项目中。创建一个Servlet用于处理上传的文件。,单元项目2-采用commons-fileupload组件上传文件,项目实施:创建一个JSP文件fileupload.jsp。将和文件拷贝到项目目录的WEB-INF/lib下。,单元项目2-采用commons-fileupload组件上传文件,项目实施:创建一个Servlet实现文件上传。/实例化一个硬盘文件工厂,用来配置上传组件ServletFileUploadDiskFileItemFactory factory=new DiskFileItemFactory();factory.setSizeThreshold(4096);/设置缓冲区大小,这里是4kbServletFileUpload upload=new ServletFileUpload(factory);/用以上工厂实例化上传组件upload.setSizeMax(4194304);/设置最大文件尺寸,这里是4MBString uploadPath=this.getServletContext().getRealPath(/upload);/设置上传的地址List items=upload.parseRequest(request);/得到所有的上传文件Iterator it=items.iterator();while(it.hasNext()/逐条处理FileItem fi=(FileItem)it.next();/得到当前文件/检查当前项目是普通表单项目还是上传文件if(fi.isFormField()/如果是普通表单项目,显示表单内容。if(desc.equals(fi.getFieldName()out.println(file description:+fi.getString();else/获得上传的文件 String path=fi.getName();/得到文件的完整路径 String filename=path.substring(path.lastIndexOf()+1);/得到去除路径的文件名 fi.write(new File(uploadPath,filename);/将文件保存在Web目录的upload文件夹中 out.println(filename+file uploaded.);,分页处理,在Web开发中,分页处理显示数据是最基本的功能。分页显示是将数据库中的数据依次部分地显示出来。通过分页处理可以提高页面访问速度,美化页面。在实际开发中有很多分页的解决方案,大致可以分为以下两种:利用结果集(ResultSet)来处理。采用SQL语句处理。,分页处理,利用结果集(ResultSet)来处理。通过ResultSet的absolute()方法获得指定行位置的记录。当用户第一次请求数据查询时,就执行SQL语句查询,获得的ResultSet对象及其要使用的连接对象都保存到其对应的会话对象中。以后的分页查询都通过第一次执行SQL获得的ResultSet对象定位取得指定行位置的记录。最后在用户不再进行分页查询时或会话关闭时,释放数据库连接和ResultSet对象等数据库访问资源。这种方式对数据库的访问资源占用比较大,并且其利用率不是很高。优点是减少了数据库连接对象的多次分配获取,减少了对数据库的SQL查询执行。,分页处理,采用SQL语句处理。在用户的分页查询请求中,每次可取得查询请求的行范围的参数。使用这些参数取得指定行范围的SQL查询语句,并执行SQL查询。把查询的结果返回给用户,最后释放数据库访问资源。采用这种方式需要每次请求时都要执行数据库的SQL查询语句;对数据库的访问资源使用完毕就立即释放,不占用数据库访问资源。其缺点是:对不同的数据库使用的查询语句是不同的。每次均执行数据库SQL查询操作。对数据库有一定的影响。,单元项目3-分页功能的实现,项目构思:采用MVC模式实现分页功能。将表中的数据按照分页的方式显示到页面。项目设计:根据MVC的分层原则,将分页显示的功能分为3个层次。模型层:用于代表数据表的数据Bean、用于在页面传输数据的PageBean、用于获得分页数据的逻辑Bean。控制层:用Servlet完成分页控制操作。视图层:采用JSP页面显示分页数据。,单元项目3-分页功能的实现,项目实施:创建用于在页面中传输数据的PageBean。public class PageBean private int curPage;/当前页数private int totalPages;/总页数private int totalRows;/总行数private int pageSize;/每页显示行数private List data;/每页显示的数据省略get、set方法PageBean的主要功能是在视图和控制层之间传输数据,里面封装了需要显示的分页信息和分页的数据。,单元项目3-分页功能的实现,项目实施:创建数据Bean:Emp。创建连接工具类:DBUtil。,单元项目3-分页功能的实现,项目实施:创建逻辑Bean EmpDAO,获得分页数据。List ary=new ArrayList();Connection conn=DBUtil.getConnection();PageBean bean=new PageBean();/创建PageBeanbean.setPageSize(2);/设置每页显示行数bean.setCurPage(page);/获得当前的页数bean.setTotalRows(getEmpRows();/获得总行数int offset=(bean.getCurPage()-1)*bean.getPageSize();/起始数据的行数int rows=bean.getPageSize();/要显示的记录数try tatement stmt=conn.createStatement();String sql=select*from emp limit+offset+,+rows;/利用MySQL的limit函数实现分页ResultSet rs=stmt.executeQuery(sql);while(rs.next()Emp emp=new Emp();emp.setId(rs.getInt(id);emp.setAge(rs.getInt(age);emp.setName(rs.getString(name);emp.setSalary(rs.getFloat(salary);ary.add(emp);bean.setData(ary);/获得页面的数据rs.close();stmt.close();catch(SQLException e)e.printStackTrace();,单元项目3-分页功能的实现,项目实施:创建Servlet控制层,用EmpServlet完成分页的控制操作。String page=request.getParameter(page);/获得要显示的页数int curPage=0;/当前的页数if(page=null|page.length()1)/没有获得page值的处理curPage=1;else curPage=Integer.parseInt(page);EmpDAO dao=new EmpDAO();/创建DAO对象PageBean pageBean=dao.getEmps(curPage);/返回PageBean/将PageBean放入到request中转发request.setAttribute(pageBean,pageBean);RequestDispatcher rs=request.getRequestDispatcher(emp.jsp);rs.forward(request,response);,单元项目3-分页功能的实现,项目实施:创建视图层emp.jsp。编号姓名工资年龄 每页$pageBean.pageSize行 共$pageBean.totalRows行 页数$pageBean.curPage/$pageBean.totalPages 首页 上一页 首页 上一页 下一页 尾页 下一页 尾页,JavaMail,Email是一种常用的互联网服务,它是通过计算机网络交换的电子媒体信件。Internet上的个人用户不能直接接收电子邮件,而是通过申请ISP邮件服务器的一个电子信箱,由ISP邮件服务器负责电子邮件的接收。一旦有用户的电子邮件到来,ISP邮件服务器就将邮件移到用户的电子信箱内,并通知用户有新邮件。当发送一封电子邮件给另一个客户时,电子邮件首先从用户计算机发送到ISP邮件服务器,再到Internet,再到收件人的ISP邮件服务器,最后到收件人的个人计算机。电子邮件在发送与接收过程中都要遵循SMTP、POP3等协议,这些协议确保了电子邮件在各种不同系统之间的传输。其中,SMTP负责电子邮件的发送,而POP3则用于接收Internet上的电子邮件。,JavaMail,Email的相关协议 简单传输协议(SMTP):简单传输协议SMTP(Simple Mail Transfer Protocol)是电子邮件从客户机传输到服务器或从某一个服务器传输到另一个服务器使用的传输协议,通信基于TCP协议端口25。邮箱协议(POP3):邮箱协议POP3是将个人计算机连接到Internet的邮件服务器和下载电子邮件的协议。它允许用户从服务器上把邮件存储到本地主机(即自己的计算机),同时删除保存在邮件服务器上的邮件,这个协议工作的TCP协议端口是110。网络消息访问协议(IMAP):IMAP(Internet消息访问协议)与POP3协议类似,也是提供面向用户的邮件收取服务。它使用TCP端口是143。这两个协议的不同是IMAP将很多客户端的功能转移到服务器端。MIME:MIME(因特网邮件扩展标准),本身不是邮件传输协议,但是对于传输内容的消息,附件以及其它内容定义了格式。例如:扩充了非文本邮件主体、邮件主体不再局限于ASCII字符,而是所有的字符等。,JavaMail,JavaMail是JavaEE中的标准API,在它的接口中封装了与邮件服务器访问的详细过程。采用JavaMail API可以在程序中以一种独立于平台和协议的方式发送和接受邮件。JavaMail还允许创建不同类型的邮件,比如普通的文本,或者带有附件的邮件,或者带有混合的二进制内容的邮件。JavaMail API主要包括四部分:Session、Message、Transport、和InternetAddress。,JavaMail,SessionSession类代表一个基本的邮件会话,其它的对象均依赖于Session。它是与一组用户邮件配置设置有关的方法提供者。通过配置这些属性完成客户机和服务器之间的交流。Session对象使用获得配置的信息,通过getDefaultInstance()方法创建邮件会话。例:Properties props=new Properties();props.put(mail.host,邮件服务器的名字);Session session=Session.getDefaultInstance(props,null);,JavaMail,Message Message类代表一个邮件消息,但这是一个抽象类,所以必须通过它的子类实现,通常采用,它代表了一个标准的MIME风格的邮件消息,通过一个接受Session对象的构造函数创建实例。例:MimeMessage message=new MimeMessage(session);Messag类的主要方法可以分为两部分。第一部分主要用于发送邮件,设置邮件的相关信息包括邮件的发送者、接受者、主题和发送时间等。第二部分用于接受邮件,用来获取邮件的相关信息。,JavaMail,Transport Transport是消息发送传输类,提供了两个静态的send()方法发送消息,第一种使用一个Message对象和Address数组做参数,它发送消息给所有Address类定义的收件人。第二种形式只有一个Message对象参数,但是必须预先定义收件人的地址。例:Transport.send(message);还可以通过一个邮件会话获得Transport类的实例,通过调用connect()的方法,发送邮件。例:Transport tran=session.getTransport(smtp);tran.connect(邮件服务器地址,用户名,密码);tran.send(msg);,JavaMail,InternetAddress InternetAddress代表用户的邮箱地址,它的父类是Address。可以通过传入一个正确的邮箱地址的构造函数创建实例。例:InternetAddress address=);,单元项目4-创建第一封电子邮件,项目构思:利用JavaMail API,通过程序将邮件发送到邮箱中。项目设计:通过一个JSP页面将邮件发送到邮箱中。,单元项目4-创建第一封电子邮件,项目实施:将JavaMail API的jar包(mail.jar和activation.jar)拷贝到站点的WEB-INFlib文件夹中。在项目的JSP文件中,实现发送邮件的功能。,单元项目4-创建第一封电子邮件,项目实施:JSP中的部分代码:Properties props=new Properties();props.put(mail.host,219.216.128.8);/设置邮件服务器地址Session ses=Session.getDefaultInstance(props,null);/创建邮件会话对象/从Session创建MimeMessageMimeMessage msg=new MimeMessage(ses);/发送邮件的邮箱地址InternetAddress from=new);/接受邮件的邮箱地址InternetAddress to=new InternetAddress();msg.setFrom(from);/设置发送邮件邮箱地址msg.addRecipient(Message.RecipientType.TO,to);/添加邮箱接受者msg.setSubject(first mail);/设置邮件主题msg.setText(this is my first Mail);/邮件内容Transport tran=ses.getTransport(smtp);/获得传输类的实例tran.connect(219.216.128.8,password);/建立连接tran.send(msg);/发送邮件out.println(邮件发送成功);,单元项目5-创建HTML格式的邮件,项目构思:HTML格式的邮件可以给收件人更精彩的内容,HTML格式的邮件中可以插入视频、音频、图片、动画等多媒体的内容,HTML格式的邮件和文本类型的邮件发送的过程基本相同,只是在Message对象中传输的是HTML格式的文件,并且要设置邮件内容的格式。可以通过文件流读取要发送的HTML邮件,然后将内容添加到Message对象中,同时设置内容的格式。项目设计:通过一个JSP文件将HTML格式的邮件发送到邮箱中。,单元项目5-创建HTML格式的邮件,项目实施:在发送Email的代码基础上添加代码:/获得HTML文件路径String source=application.getRealPath()+source.html;String content=;String line=null;/创建文件输出流BufferedReader br=new BufferedReader(new FileReader(source);while(line=br.readLine()!=null)content+=line;/读取HTML文件内容br.close();/把邮件内容添加到Message对象中,并且设置内容格式msg.setContent(content,text/html);,单元项目6-创建带附件的邮件,项目构思:采用JavaMail API也可以像使用OutLook一样在邮件中添加附件。通过创建包含多个部分的邮件,可以在邮件中带有附件。JavaMail API中的BodyPart对象代表着邮件主体的一部分,可以在程序中创建多个BodyPart对象,使用本身的setContent()方法存放附件、视频、音频、图片等。然后使用addBodyPart()方法将该对象加入到MimeMultipart对象中,把创建的每一个BodyPart对象都加入到MimeMultipart对象后,再调用setContent()方法将MimeMultipart对象加入到MimeMessage对象中去。,单元项目6-创建带附件的邮件,项目构思:BodyPart对象是抽象类,具体使用的是MimeBodyPart对象,如果要向MimeBodeyPart对象添加附件需要获得这个附件的数据句柄。此数据句柄通过DataSource对象和具体的附件文件关联。如果附件文件的名字有中文的时候可以用MimeUtility.encodeWord()方法解码,避免附件名字中文乱码。例:BodyPart attachment=new MimeBodyPart();/创建MimeBodyPartString filename=“Java技术培训.doc”;/附件文件的名字/附件的路径String source=application.getRealPath()+filename;/创建数据源指向附件的文件DataSource ds=new FileDataSource(source);/获得附件文件的句柄attachment.setDataHandler(new DataHandler(ds);/设置附件文件名attachment.setFileName(MimeUtility.encodeWord(filename);multpart.addBodyPart(attachment);,单元项目6-创建带附件的邮件,项目设计通过一个JSP文件将带有doc文件附件的邮件发送到邮箱中。项目实施在Web目录下添加“Java技术培训.doc”的文件作为发送邮件的附件。在项目中通过一个JSP文件实现具体程序。,单元项目6-创建带附件的邮件,项目实施JSP文件具体程序。Properties props=new Properties();props.put(mail.host,219.216.128.8);/设置邮件服务器地址Session ses=Session.getDefaultInstance(props,null);/创建邮件会话对象MimeMessage msg=new MimeMessage(ses);/从Session创建MimeMessageInternetAddress from=new);/发送的邮箱地址InternetAddress to=new);/接受的邮箱地址msg.setFrom(from);/设置发送邮箱地址msg.addRecipient(Message.RecipientType.TO,to);/添加邮箱接受者msg.setSubject(带有附件的邮件);/设置邮件主题BodyPart body=new MimeBodyPart();/创建一个邮件主体内容body.setText(带有附件的邮件);Multipart multpart=new MimeMultipart();multpart.addBodyPart(body);/加入到MimeMultipart中BodyPart attachment=new MimeBodyPart();/创建附件内容String filename=Java技术培训.doc;/附件文件的名字String source=application.getRealPath()+filename;/附件的路径DataSource ds=new FileDataSource(source);/创建数据源指向附件的文件attachment.setDataHandler(new DataHandler(ds);/获得附件文件的指针attachment.setFileName(MimeUtility.encodeWord(filename);/设置附件的文件名multpart.addBodyPart(attachment);/加入到MimeMultipart中msg.setContent(multpart);/将MimeMultipart加入到Message中Transport tran=ses.getTransport(smtp);/获得传输类的实例tran.connect(219.216.128.8,password);/建立连接tran.send(msg);/发送邮件out.println(邮件发送成功);,单元项目7-在JSP页面中显示接受的邮件,项目构思:JavaMail API除了可以发送邮件之外,还提供了很多对其它常见邮件操作的支持,比如接收邮件等。下面是一个具体检索邮件的过程。创建邮件会话:检索邮件需要创建相关的邮件会话。例:Properties props=new Properties();props.put(mail.host,219.216.128.8);Session session=Session.getDefaultInstance(props,null);创建Store对象:要检索邮件服务器的邮件,需要连接到邮件服务器。这是通过Store对象完成的,通过邮件会话对象可以创建Store对象。Store对象的connect()方法用来连接邮件服务器,该方法需要三个参数,第一个参数是邮件服务器的地址,第二个参数是能够登陆邮件服务器的用户名,第三个参数是密码。例:Store store=session.getStore(pop3);store.connect(邮件服务器地址,用户名,密码);文件夹对象Folder:当连接到邮箱后,需要打开存放邮件的文件夹,Folder代表文件夹对象。因此,需要先创建Folder对象。创建Folder对象可以通过调用Store对象的getFolder()方法。这个方法有一个参数,代表着要打开文件夹的名字。例:Folder folder=store.getFolder(INBOX);,单元项目7-在JSP页面中显示接受的邮件,项目构思:具体检索邮件的过程(续)。打开文件夹:获得文件夹对象后,要使用open()方法打开文件夹,这个方法有一个参数,可以指定打开文件夹的模式。共有两个可选值:READ_ONLY和READ_WRITE。例:folder.open(Folder.READ_ONLY);取出文件夹中的邮件:Floder对象的getMessage()或getMessages()提供了在文件夹中收取邮件的方法。例:Message messages=folder.getMessages();读取邮件:通过Message对象提供的方法可以获得整个邮件的信息。例如:getSubject()获得邮件的主题、getSentData()获得发送的时间、getContent()获得具体内容等。关闭资源:完成接收过程后,需要关闭Folder和Store对象。例:folder.close(false);store.close();,单元项目7-在JSP页面中显示接受的邮件,项目设计:将接受到的邮件通过JSP文件显示出来。项目实施:在项目中创建一个JSP页显示接收邮件的内容。,单元项目7-在JSP页面中显示接受的邮件,项目实施:接收邮件的内容的代码。Properties props=new Properties();props.put(“mail.host”,“219.216.128.8”);/设置邮件服务器地址/创建邮件会话对象Session ses=Session.getDefaultInstance(props,null);Store store=ses.getStore(pop3);store.connect(219.216.128.8,密码);Folder folder=store.getFolder(INBOX);/创建文件夹对象folder.open(Folder.READ_ONLY);/打开文件夹Message messages=folder.getMessages();for(int i=0;i);out.println(发送时间:+msg.getSentDate()+);out.println(内容:+msg.getContent();out.println();folder.close(false);store.close();,JavaMail,邮件的删除:删除邮件服务器上的邮件步骤:以READ_WRITE模式打开文件夹:要在收取之后删除邮件,必须使用READ_WRITE模式打开文件夹。可以用下面的代码代替上个程序中打开文件夹的代码。例:folder.open(Folder.READ_WRITE);设置邮件状态:删除邮件必须用系统标记标识邮件的状态。标记描述了邮件在其所在文件夹中的状态。Message.getFlags()方法返回一个Flag对象,该对象拥有该邮件所有当前设置的标记。完成删除操作:要完成删除操作,还必须给关闭文件夹的方法一个true值的参数,这样在文件夹关闭时所有标记是DELETED的邮件将被删除。修改上个程序的代码。例:folder.close(true);,树状菜单,树状菜单常用来提供内容导航功能。它的实现分为静态和动态两个部分。静态菜单是内容固定不变或基本不变,可以采用JavaScript实现,这种方法的特点是速度快,编程难度小,有许多开发好的程序。动态树状菜单是树状菜单的内容经常变化,需要动态生成。,单元项目8-采用菜单组件创建静态树状菜单,项目构思:静态树状菜单可以采用JavaScript开发,网上有许多优秀的代码程序,这里介绍一个比较简单实用的免费树状菜单dtree组件。dtree组件的主要优点是:可以设置无限级的菜单、可以设置多种状态(如:图标的显示和隐藏等)、支持目前主流的浏览器、节点图片可以设置切换图片的效果等。下载地址是:http:/。dtree组件下载的文件包括dtree.js、dtree.css和图片文件夹img。,单元项目8-采用菜单组件创建静态树状菜单,项目设计:在一个JSP页面中通过dtree组件创建一个树状菜单。项目实施:将下载的dtree组件dtree.js、dtree.css、img中的图片文件分别放到相应的WEB目录下的js、css、img文件夹中。在JSP页面中实现代码。,单元项目8-采用菜单组件创建静态树状菜单,项目实施:在JSP页面中实现的主要代码如下:d=new dTree(d);d.add(0,-1,我的树状菜单);d.add(1,0,节点1,tree.jsp);d.add(2,0,节点2,tree.jsp);d.add(3,1,节点1.1,tree.jsp);d.add(4,0,节点3,tree.jsp);d.add(5,3,节点1.1.1,tree.jsp);d.add(6,5,节点1.1.1.1,tree.jsp);d.add(7,0,节点4,tree.jsp);d.add(8,1,节点1.2,tree.jsp);d.add(9,0,我的相册,tree.jsp,这是我的相册,img/imgfolder.gif);d.add(10,9,我的生日,tree.jsp,我的生日照片);d.add(11,9,北京旅游,tree.jsp);d.add(12,0,回收站,tree.jsp,img/trash.gif);document.write(d);,单元项目9-采用菜单组件创建动态树状菜单,项目构思:动态树状菜单的内容是通过程序生成,需要在JSP或Servlet中生成JavaScript代码,在上面程序的基础上采用动态方法生成树状菜单。项目设计:根据dtree组件生成节点的参数,需要在数据库中创建一个树状结构表,作为树状菜单节点的参数。创建一个JavaBean,在JavaBean的方法中读取表中的数据,生成相应的JavaScript代码创建出树状菜单。在JSP页面中利用JSP动态标签调用JavaBean,在页面显示生成的树状菜单。,单元项目9-采用菜单组件创建动态树状菜单,项目实施:创建树状结构表DTREE。其字段为生成树状节点中的8个参数。CREATE TABLE dtree(Id int(11)NOT NULL default 0,pid int(11)NOT NULL default-1,name varchar(50)NOT NULL,url varchar(50)default,title varchar(50)default,target varchar(50)default _self,icon varchar(50)default NULL,iconOpen varchar(50)default NULL,PRIMARY KEY(Id),单元项目9-采用菜单组件创建动态树状菜单,项目实施:在创建的表中插入相应的数据,这些将作为生成树状菜单节点的参数,在程序中通过读取表中的数据生成树状菜单的节点。创建一个JavaBean,通过JavaBean读取数据库中的数据,根据表中的数据生成相应树状菜单的JavaScript代码,返回到页面。,单元项目9-采用菜单组件创建动态树状菜单,项目实施:JavaBean中getTreeNodes()的主要代码:StringBuffer buf=new StringBuffer();/保存生成的JavaScript代码buf.append();/生成JavaScript标记buf.append(d=new dTree(d););/创建一个dtreeConnection conn=getConnection();/建立连接对象try Statement stmt=conn.createStatement();String sql=select*from dtree;ResultSet rs=stmt.executeQuery(sql);while(rs.next()/根据结果集的内容创建一个节点buf.append(d.add();buf.append(rs.getInt(Id)+,);buf.append(rs.getInt(pId)+,);buf.append(rs.getString(name)