如何使用JSP + JAVABEAN + XML 开发的一个例子

真正的平静,不是避开车马喧嚣,而是在心中修篱种菊。尽管如流往事,每一天都涛声依旧,只要我们消除执念,便可寂静安然。愿每个人,在纷呈世相中不会迷失荒径,可以端坐磐石上,醉倒落花前。
本例子是参考了一些网站上有关JSP对XML的操作的相关文档,又结合了一些个人的体会。例子涉及的内容是,开发的一个企业内部定餐系统后台管理端的部分代码,功能主要集中在对于餐馆基本信息的管理。该例子本身开发的起因是我在原公司和同事们一个玩笑的一部分。特此也表达对那些一起共事的朋友们的想念。例子本身是在TOMCAT4.01平台下运行的B/S结构的程式。有关TOMCAT的配置,这里不做说明。只讲解一下相关文件及文件夹的目录结构。目录结构说明:/tomcat/webapps/canyin/-----主目录/tomcat/webapps/canyin/jsp/-----JSP文件目录/tomcat/webapps/canyin/jsp/admin/-----实现后台管理的JSP文件的存放目录/tomcat/webapps/canyin/WEB-INF/classes/canyin/------javabean文件的存放目录/tomcat/webapps/canyin/data/-----xml文件存放目录/tomcat/webapps/ROOT/-----tomcat启动文件存放文件夹,只存放了index.html文件文件简单说明:/tomcat/webapps/canyin/data/users.xml-----记录用户信息/tomcat/webapps/canyin/data/restaurants.xml-----记录餐馆的基础信息/tomcat/webapps/ROOT/index.html-----首页,页面出现输入框,要求用户输入用户名,密码/tomcat/webapps/canyin/jsp/loginjudge.jsp-----用户身份判断页面,根据用户名称和密码决定页面是转入后台管理端,还是前台客户端。本例子中,用户身份一旦确认为有管理权限,可以进入后台管理端,就直接跳到餐馆基本信息管理页面,简化说明的流程。/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp-----餐馆基本信息管理页面,管理餐馆的名称,电话,地址等信息/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class-----后台管理端检测标志用户身份的session的值,如果不是管理员的话,跳回登陆页面。/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class-----连接xml文件/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class-----写入xml文件文件详细介绍及附带代码说明。/tomcat/webapps/canyin/data/users.xml代码:<?xmlversion="1.0"encoding="UTF-8"?>-<users><username="joard"password="joard"roles="admin"/><username="joard01"password="joard01"roles="user"/><username="joard02"password="joard02"roles="user"/></users>说明:字段含义是用户名,密码以及用户的身份/tomcat/webapps/canyin/data/restaurants.xml代码:<?xmlversion="1.0"encoding="UTF-8"?>-<restaurantsnum="10">-<restaurantid="1"><name>上海亭快餐店</name><phone>021-76546726</phone><address>百老汇广场B座</address></restaurant>-<restaurantid="8"><name>香格里拉大饭店</name><phone>021-2312134</phone><address>南京路1023号</address></restaurant></restaurants>说明:<num>属性是记录在restaurants.xml文件中总共有过多少条记录,每新增一条,无论以后删除是否,该值都会增加1,就好象数据库中习惯使用的自动增加1的id项。用来给新增的<restaurant>的属性<id>赋一个唯一的值。其它的字段意思比较明显。/tomcat/webapps/ROOT/index.html(单纯的HTML代码)代码:<html><head><title>oddWorld餐饮系统</title><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"></head><bodyonload="javascript:dataform.username.focus()"><divalign="center"><tablewidth="100%"border="0"cellspacing="0"cellpadding="0"height="22"><tr><tdwidth="1"><imgsrc="images/top_r1.GIF"width="62"height="22"></td><tdwidth=150align="center">餐饮系统登录</td><td><imgsrc="images/top_r2.GIF"width="294"height="22"></td></tr></table><br><br><tablewidth="300"border="0"cellspacing="1"cellpadding="0"><tr><tdheight="200"valign="top"align="center"><palign="center"><tablewidth="100%"border="0"cellspacing="1"cellpadding="5"bgcolor=#999999class=a9px><tr><tdbgcolor="#efefef">餐饮系统登录</td></tr><tr><tdbgcolor="#FFFFFF"valign="top"align="center"><tablewidth="100%"border="0"cellspacing="0"cellpadding="0"><formname=dataformmethod=postaction=''canyin/jsp/loginjudge.jsp''><tr><tdwidth="100"><b>登录名:</b></td><td><inputmaxlength=16name="username"class=steditvalue="joard"></td></tr><tr><tdwidth="100"><b>密码:</b></td><td><inputclass=steditmaxlength=16name="userpass"type=passwordvalue="oddworld"></td></tr></form></table><br><tableborder=0cellpadding=0cellspacing=0><tbody><tr><td><inputclass=stbtmname=updateonClick="javascript:if(checkform()==false);"type=buttonvalue="登录"></td><td></td><td><inputclass=stbtmname=SubmitonClick="javascript:window.location.rel="nofollow noopener noreferrer" href=''index.asp?myjoke=1'';"type=buttonvalue="修改密码"></td><td></td></tr></tbody></table><br></td></tr></table></td></tr></table></div></body></html><SCRIPTlanguage=javascript><!--functioncheckform(){varCheckblank=/^(\s*|(\ )|(\.))*$/;if(Checkblank.test(dataform.username.value)){alert("登录名不能为空!");returnfalse;}if(Checkblank.test(dataform.userpass.value)){alert("密码不能为空!");returnfalse;}window.dataform.submit();}--></SCRIPT>说明:把用户名称和用户密码提交到/tomcat/webapps/canyin/jsp/loginjudge.jsp/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class(代码是相应的java文件)packagecanyin;importjavax.servlet.http.HttpSession;importjavax.servlet.http.HttpServletRequest;publicclasscheckSessionBean{privatebooleanbolCheckPass=false;privateHttpServletRequestrequest=null;publicbooleancheckSessionBean(HttpServletRequestrequest,StringstrSessionName,StringstrCheckValue){publicbooleancheckSessionBean(HttpServletRequestrequest){HttpSessionsession=request.getSession(false);return(bolCheckPass);if(strSessionName==null||strCheckValue==null){return(bolCheckPass);}else{if(session!=null&&session.getValue(strSessionName)!=null){bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);}return(bolCheckPass);}}}说明:检验参数传入的session名称的数值和参数传入的字段的数值是否相等。/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class代码:packagecanyin;importjavax.xml.parsers.*;importjavax.xml.transform.*;importjavax.xml.transform.dom.DOMSource;importjavax.xml.transform.stream.StreamResult;importorg.w3c.dom.*;publicclassconnXmlBean{privateDocumentBuilderFactoryfactory=null;privateDocumentBuilderbuilder=null;privateDocumentdoc=null;publicconnXmlBean(){}publicStringconnXml(StringxmlFileName){StringstrExc="";try{factory=DocumentBuilderFactory.newInstance();builder=factory.newDocumentBuilder();doc=builder.parse(xmlFileName);doc.normalize();}catch(Exceptione){strExc=e.toString();}return(strExc);}publicDocumentgetXmlDoc(){return(doc);}}说明:打开一个指定xml文件/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class代码:packagecanyin;importjavax.xml.parsers.*;importjavax.xml.transform.*;importjavax.xml.transform.dom.DOMSource;importjavax.xml.transform.stream.StreamResult;importjava.io.File;importorg.w3c.dom.*;publicclasswriteXmlBean{publicwriteXmlBean(){}publicStringwriteXml(Documentdoc,StringxmlFileName){StringstrExc="";try{TransformerFactorytfactory=TransformerFactory.newInstance();Transformertransformer=tfactory.newTransformer();DOMSourcesource=newDOMSource(doc);StreamResultresult=newStreamResult(newFile(xmlFileName));transformer.transform(source,result);}catch(Exceptione){strExc=e.toString();}return(strExc);}}说明:写入dom的内容到一个指定的xml文件。/tomcat/webapps/canyin/jsp/loginjudge.jsp代码:<%--oddWorld餐饮管理系统(简体中文版)2002年12月1日copyrightbyjoardastloginjudge.jsp功能:用户身份校验,根据/data/user.xml文件内标示的用户不同的身份决定转入后台管理页面,还是客户点菜页面。--%><%@pagecontentType="text/html;charset=gb2312"%><%@pagelanguage="java"import="javax.xml.parsers.*"%><%@pageimport="org.w3c.dom.*"%><%@pageimport="canyin.*"%><jsp:useBeanid="xmlBean"class="canyin.connXmlBean"scope="page"/><%session.setMaxInactiveInterval(1800);Documentdoc;NodeListusers;StringstrExc="";StringstrUsername,strPassword;strUsername=(String)request.getParameter("username");strPassword=(String)request.getParameter("userpass");//校验数据是否为空if(strUsername==""||strPassword==""){out.println("<scriptlanguage=''javascript''>");out.println("alert(''用户名或密码有空值!'');");out.println("window.location.rel="nofollow noopener noreferrer" href=''/index.html'';");out.println("</script>");return;}xmlBean.connXml("webapps/canyin/data/users.xml");doc=xmlBean.getXmlDoc();try{users=doc.getElementsByTagName("user");for(inti=0;i<users.getLength();i++){Elementuser=(Element)users.item(i);StringstrAtrNameValue=user.getAttributeNode("name").getNodeValue();StringstrAtrPassWordValue=user.getAttributeNode("password").getNodeValue();StringstrAtrRoleValue=user.getAttributeNode("roles").getNodeValue();if(strAtrNameValue.equals(strUsername)&&strAtrPassWordValue.equals(strPassword)){if(strAtrRoleValue.equals("admin")){out.println("<scriptlanguage=''javascript''>");out.println("alert(''欢迎管理员登陆系统!'');");out.println("</script>");//设置标示用户身份的session(sesUserRole),管理员身份为adminsession.setAttribute("sesUserRole","admin");//跳转到管理页面response.sendRedirect("admin/admin_rest.jsp");return;}else{//设置标示用户身份的session(sesUserRole),管理员身份为usersession.setAttribute("sesUserRole","user");//跳转到普通用户页面response.sendRedirect("index.jsp");return;}}else{out.println("<scriptlanguage=''javascript''>");out.println("alert(''用户名或密码错误!'');");out.println("history.go(-1);");out.println("</script>");return;}}}catch(Exceptione){strExc=e.toString();}%>说明:......./tomcat/webapps/canyin/jsp/admin/admin_rest.jsp代码:<%--oddWorld餐饮管理系统(简体中文版)2002年12月1日copyrightbyjoardastadmin_rest.jsp功能:后台管理页面,餐馆管理页面。--%><%@pagecontentType="text/html;charset=gb2312"%><%@pagelanguage="java"import="javax.xml.parsers.*"%><%@pageimport="javax.xml.transform.*"%><%@pageimport="org.w3c.dom.*"%><%@pageimport="canyin.*"%><%@includefile="../../include/sys_dialog.jsp"%><jsp:useBeanid="checkSessionBean"class="canyin.checkSessionBean"scope="page"/><jsp:useBeanid="xmlBean"class="canyin.connXmlBean"scope="page"/><jsp:useBeanid="writeXmlBean"class="canyin.writeXmlBean"scope="page"/><%//校验可户身份,判断是不是管理员if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){out.print(showDialog("您没有管理的权限!","/index.html"));return;}//从餐馆资料文件rest.xml中得到相关数据Documentdoc;NodeListrestaurants;StringstrAct;intintId=0;StringstrOperation="show";//接受外部传入的参数strAct=(String)request.getParameter("act");xmlBean.connXml("webapps/canyin/data/restaurants.xml");doc=xmlBean.getXmlDoc();restaurants=doc.getElementsByTagName("restaurant");//根据外部传入的参数来决定对restaurant.xml文件的操作if(strAct!=null){if(strAct.equals("addnewDo")){StringstrName;StringstrPhone;StringstrAddress;Texttextseg;strName=(String)request.getParameter("name").trim();strPhone=(String)request.getParameter("phone").trim();strAddress=(String)request.getParameter("address").trim();//数据校验if(strName==null){out.print(showDialog("餐馆名称不能为空!"));return;}if(strPhone==null){out.print(showDialog("餐馆电话不能为空!"));return;}/*if(strAddress==null){out.print(showDialog("餐馆地址不能为空!"));return;}*///校验数据的唯一性for(inti=0;i<restaurants.getLength();i++){Elementrestaurant=(Element)restaurants.item(i);if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){out.print(showDialog("餐馆名称重复!"));return;}else{if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){out.print(showDialog("餐馆电话重复!"));return;}}}//得到已有的记录数,给新增的餐馆记录设定唯一的递增的id属性intintNum=0;ElementrestNum=(Element)doc.getElementsByTagName("restaurants").item(0);intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());intNum+=1;//为restaurants的属性num的数值加1restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));//新增节点ElementnewRestaurant=doc.createElement("restaurant");AttrnewArrId=doc.createAttribute("id");//AttributenewArrId=newAttribute("id",String.valueOf(intNum));textseg=doc.createTextNode(String.valueOf(intNum));newArrId.setValue(String.valueOf(intNum));newRestaurant.setAttributeNode(newArrId);ElementnewName=doc.createElement("name");textseg=doc.createTextNode(strName);newName.appendChild(textseg);newRestaurant.appendChild(newName);ElementnewPhone=doc.createElement("phone");textseg=doc.createTextNode(strPhone);newPhone.appendChild(textseg);newRestaurant.appendChild(newPhone);ElementnewAddress=doc.createElement("address");textseg=doc.createTextNode(strAddress);newAddress.appendChild(textseg);newRestaurant.appendChild(newAddress);doc.getDocumentElement().appendChild(newRestaurant);//调用bean写入相应的xml文件writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");response.sendRedirect(request.getRequestURI());return;}if(strAct.equals("modiDo")){StringstrName;StringstrPhone;StringstrAddress;Texttextseg;intmodiId;//记录要修改的记录是item(i)的哪一项intintI=0;strName=(String)request.getParameter("name").trim();strPhone=(String)request.getParameter("phone").trim();strAddress=(String)request.getParameter("address").trim();modiId=Integer.parseInt(request.getParameter("recordId").trim());//数据校验if(strName==null){out.print(showDialog("餐馆名称不能为空!"));return;}if(strPhone==null){out.print(showDialog("餐馆电话不能为空!"));return;}if(modiId==0){out.print(showDialog("你要修改餐馆的记录不存在!"));return;}/*if(strAddress==null){out.print(showDialog("餐馆地址不能为空!"));return;}*///标志显示记录存在booleanrecordExist=false;//校验数据的唯一性for(inti=0;i<restaurants.getLength();i++){Elementrestaurant=(Element)restaurants.item(i);if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){recordExist=true;intI=i;}if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)&&Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId){out.print(showDialog("餐馆名称重复!"));return;}else{if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)&&Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())!=modiId){out.print(showDialog("餐馆电话重复!"));return;}}}if(!recordExist){out.print(showDialog("你要修改餐馆的记录不存在!"));return;}else{//进行记录更改的操作try{ElementmodiRestaurant=(Element)restaurants.item(intI);modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName);modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone);modiRestaurant.getElementsByTagName("address").item(0).getFirstChild().setNodeValue(strAddress);//调用bean写入相应的xml文件writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");response.sendRedirect(request.getRequestURI());return;}catch(Exceptione){}}}//进行删除操作if(strAct.equals("del")){intdelId;//记录要修改的记录是item(i)的哪一项intintI=0;delId=Integer.parseInt(request.getParameter("recordId").trim());if(delId==0){out.print(showDialog("你要修改餐馆的记录不存在!"));return;}file://标志显示记录存在booleanrecordExist=false;//校验数据的唯一性for(inti=0;i<restaurants.getLength();i++){Elementrestaurant=(Element)restaurants.item(i);if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){recordExist=true;intI=i;}}if(!recordExist){out.print(showDialog("你要删除餐馆的记录不存在!"));return;}else{//进行记录删除的操作try{NodedelNode=(Node)restaurants.item(intI);doc.getElementsByTagName("restaurants").item(0).removeChild(delNode);//调用bean写入相应的xml文件writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");response.sendRedirect(request.getRequestURI());return;}catch(Exceptione){}}}}//由外部传入参数决定页面相应的处理状态if(strAct==null){strOperation="show";}else{if(strAct.equals("modi")){strOperation="modi";intId=Integer.parseInt(request.getParameter("recordId"));}else{if(strAct.equals("addnew")){strOperation="addnew";}else{strOperation="show";}}}//如果为空记录,则变更页面状态为“新增”if(restaurants.getLength()==0){strOperation="addnew";}%><html><head><title>oddWorld餐饮系统</title><metahttp-equiv="Content-Type"content="text/html;charset=gb2312"><metahttp-equiv="expires"content="0"><linkrel="stylesheet"rel="nofollow noopener noreferrer" href="../../include/itsp.css"type="text/css"></head><body><divalign="center"><tablewidth="100%"border="0"cellspacing="0"cellpadding="0"height="22"><tr><tdwidth="1"><imgsrc="../../images/top_r1.GIF"width="62"height="22"></td><tdwidth=150align="center">餐饮系统管理--餐馆管理</td><td><imgsrc="../../images/top_r2.GIF"width="294"height="22"></td><tdwidth=100align="center"><arel="nofollow noopener noreferrer" href="/index.html">[退出系统]</a></td></tr></table><br><br><tablebgcolor="#999999"align=centerborder=0cellpadding=1cellspacing=1width="90%"><tbody><trbgcolor="#efefef"align="center"valign="middle"><tdclass=ttTableheight=30width="20"></td><tdclass=ttTableheight=30width="0">餐馆名称</td><tdclass=ttTableheight=30width="0">餐馆电话</td><tdclass=ttTableheight=30width="0"><divalign="center">餐馆地址</div></td><tdclass=ttTableheight=30width="30"><divalign="center">修改</div></td><tdclass=ttTableheight=30width="30"><divalign="center">删除</div></td></tr><%for(inti=0;i<restaurants.getLength();i++){Elementrestaurant=(Element)restaurants.item(i);if(strOperation=="modi"&&Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){%><%//显示修改的格式%><tralign="center"bgcolor="#ffffff"valign="middle"><formname=dataformaction="<%=request.getRequestURI()%>?act=modiDo"method="post"onSubmit=''returncheckform(this);''><tdclass=tdsmallheight=25width="20"><inputtype="hidden"name="recordId"value="<%=restaurant.getAttributeNode("id").getNodeValue()%>"><%=(i+1)%></td><tdclass=tdsmallheight=25><inputname="name"class=steditstyle="HEIGHT:22px;WIDTH:150px"value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());}%>"maxlength="40"></td><tdclass=tdsmallheight=25><inputname="phone"class=steditstyle="HEIGHT:22px;WIDTH:100px"value="<%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());}%>"maxlength="20"></td><tdclass=tdsmallheight=25><inputname="address"class=steditstyle="HEIGHT:22px;WIDTH:200px"value="<%if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());}%>"maxlength="100"></td><tdclass=tdsmallheight=25width="25"><arel="nofollow noopener noreferrer" href="javascript:if(checkform()==false);"><imgborder=0height=15src="../../images/editok.gif"width=15></a></td><tdclass=tdsmallheight=25width="25"></td></form></tr><%}else{//显示正常的格式%><tralign="center"bgcolor="#ffffff"valign="middle"><tdclass=tdsmallheight=25width="20"><%=(i+1)%></td><tdclass=tdsmallheight=25width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());}%></td><tdclass=tdsmallheight=25width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());}%></td><tdclass=tdsmallheight=25width="0"><%if(restaurant.getElementsByTagName("address").item(0).hasChildNodes()){out.print(restaurant.getElementsByTagName("address").item(0).getFirstChild().getNodeValue());}%></td><tdclass=tdsmallheight=25width="30"><arel="nofollow noopener noreferrer" href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>"><imgborder=0height=15src="../../images/edit.gif"width=15></a></td><tdclass=tdsmallheight=25width="30"><imgborder=0height=15onClick="javascript:if(confirm(''您是否确定删除本记录,删除后将导至记录无法使用?'')){window.location.rel="nofollow noopener noreferrer" href=''<%=request.getRequestURI()%>?act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}"src="../../images/delete.gif"style="CURSOR:hand"width=15></td></tr><%}}%><%if(strOperation=="addnew"){//显示新增的格式%><tralign="center"bgcolor="#ffffff"valign="middle"><formname=dataform2action="<%=request.getRequestURI()%>?act=addnewDo"method="post"onSubmit=''returncheckform2(this);''><tdclass=tdsmallheight=25width="20"></td><tdclass=tdsmallheight=25><inputname="name"class=steditstyle="HEIGHT:22px;WIDTH:150px"value=""maxlength="40"></td><tdclass=tdsmallheight=25><inputname="phone"class=steditstyle="HEIGHT:22px;WIDTH:100px"value=""maxlength="20"></td><tdclass=tdsmallheight=25><inputname="address"class=steditstyle="HEIGHT:22px;WIDTH:200px"value=""maxlength="100"></td><tdclass=tdsmallheight=25width="25"><arel="nofollow noopener noreferrer" href="javascript:if(checkform2()==false);"><imgborder=0height=15src="../../images/editok.gif"width=15></a></td><tdclass=tdsmallheight=25width="25"></td></form></tr><%}%></tbody></table><br><tablealign=centerborder=0cellpadding=0cellspacing=2width="95%"><tbody><trvalign=center><tdalign=middle><br><tableborder=0cellpadding=0cellspacing=0><tr><td><%if(strOperation=="addnew"){%><inputclass=stbtmname=updateonClick="javascript:if(checkform2()==false);"type=buttonvalue="更新记录"><%}else{if(strOperation=="modi"){%><inputclass=stbtmname=updateonClick="javascript:if(checkform()==false);"type=buttonvalue="更新记录"><%}else{%><inputclass=stbtmtype="button"name="Button"value="新增"onClick="javascript:window.location.rel="nofollow noopener noreferrer" href=''<%=request.getRequestURI()%>?act=addnew'';"><%}}%></td><td><inputclass=stbtmtype="button"name="Button"value="返回"onClick="javascript:window.location.rel="nofollow noopener noreferrer" href=''index.jsp'';"></td></tr></table></td></tr></table><p></p></div></body></html><SCRIPTLANGUAGE=javascript><!--functioncheckform2(){varCheckblank=/^(\s*|(\ )|(\.))*$/;if(Checkblank.test(dataform2.name.value)){alert("餐馆名称不能为空!");dataform2.name.focus();returnfalse;}if(Checkblank.test(dataform2.phone.value)){alert("餐馆电话不能为空!");dataform2.phone.focus();returnfalse;}window.dataform2.submit();}functioncheckform(){varCheckblank=/^(\s*|(\ )|(\.))*$/;if(Checkblank.test(dataform.name.value)){alert("餐馆名称不能为空!");dataform.name.focus();returnfalse;}if(Checkblank.test(dataform.phone.value)){alert("餐馆电话不能为空!");dataform.phone.focus();returnfalse;}window.dataform.submit();}--></SCRIPT>说明:本文件的书写有很多地方并不简练,因为在程式的开发过程中,过分简练的程序往往会带来后期维护的困难。开发心得:doc.getElementsByTagName("restaurants").item(inti)的返回值是node型,如果不是要调用它的属性值,没有必要强制转型为Element型。可以直接操作。本系统因为开发的参考资料的错误,所以全都采用了强制转型。可以在以后的开发中考虑使用node直接进行操作。trim()和Interger.parseInt()函数都不可以接受null型的数值在tomcat下左右的文件都是目录从TOMCAT算起,具体情况请参见\webapps\canyin\jsp\userjudge.jsp里关于xml路径的写法。对原代码感兴趣的朋友请通过如下信箱和我联系,joard@163.com

以上就是如何使用JSP + JAVABEAN + XML 开发的一个例子。人从生到死这段生活的过程就是人生;简言之:人生就是人的生活和到生命的终结,在这有限的人生去实现你伟大的理想、生命的意义、人生的价值。更多关于如何使用JSP + JAVABEAN + XML 开发的一个例子请关注haodaima.com其它相关文章!

标签: JSP JAVABEAN