ตัวอย่างการพัฒนาโดยใช้ JSP + JAVABEAN + XML
ผู้เขียน:Eve Cole
เวลาอัปเดต:2009-07-02 17:12:18
ตัวอย่างนี้อ้างถึงเอกสารที่เกี่ยวข้องกับการดำเนินการ JSP บน XML ในบางเว็บไซต์ และรวมประสบการณ์ส่วนตัวบางอย่างเข้าด้วยกัน ตัวอย่างนี้เกี่ยวข้องกับการพัฒนาโค้ดบางส่วนสำหรับการจัดการแบ็กเอนด์ของระบบการสั่งซื้อภายในองค์กร ฟังก์ชันนี้เน้นไปที่การจัดการข้อมูลพื้นฐานเกี่ยวกับร้านอาหารเป็นหลัก
ตัวอย่างนี้ได้รับการพัฒนาโดยเป็นส่วนหนึ่งของเรื่องตลกที่ฉันมีกับเพื่อนร่วมงานในบริษัทเก่าของฉัน ฉันอยากจะแสดงความปรารถนาดีต่อเพื่อน ๆ ที่ได้ทำงานร่วมกัน
ตัวอย่างคือโปรแกรมที่มีโครงสร้าง B/S ที่ทำงานภายใต้แพลตฟอร์ม TOMCAT4.01 การกำหนดค่าของ 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 ----- เทอร์มินัลการจัดการพื้นหลังจะตรวจจับค่าเซสชันที่ระบุตัวตนของผู้ใช้ หากไม่ใช่ผู้ดูแลระบบ เทอร์มินัลจะข้ามกลับไปที่ หน้าเข้าสู่ระบบ
/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
รหัส:
<?xml version="1.0" encoding="UTF-8" ?>
- <ผู้ใช้>
<ชื่อผู้ใช้ = "joard" รหัสผ่าน = "joard" บทบาท = "ผู้ดูแลระบบ" />
<ชื่อผู้ใช้ = "joard01" รหัสผ่าน = "joard01" บทบาท = "ผู้ใช้" />
<ชื่อผู้ใช้ = "joard02" รหัสผ่าน = "joard02" บทบาท = "ผู้ใช้" />
</ผู้ใช้>
คำอธิบาย: ความหมายของช่องต่างๆ ได้แก่ ชื่อผู้ใช้ รหัสผ่าน และข้อมูลระบุตัวตนของผู้ใช้
/tomcat/webapps/canyin/data/restaurants.xml
รหัส:
<?xml version="1.0" encoding="UTF-8" ?>
- <ร้านอาหาร num="10">
- <ร้านอาหาร id="1">
<name>ร้านอาหารฟาสต์ฟู้ดเซี่ยงไฮ้ถิง</name>
<โทรศัพท์>021-76546726</โทรศัพท์>
<ที่อยู่>บรอดเวย์ พลาซ่า ทาวเวอร์ B</address>
</ร้านอาหาร>
- <รหัสร้านอาหาร="8">
<name>โรงแรมแชงกรี-ลา</name>
<โทรศัพท์>021-2312134</โทรศัพท์>
<ที่อยู่>เลขที่ 1023 ถนนหนานจิง</ที่อยู่>
</ร้านอาหาร>
</ร้านอาหาร>
หมายเหตุ: แอตทริบิวต์ <num> จะบันทึกจำนวนระเบียนทั้งหมดในไฟล์ Restaurants.xml ทุกครั้งที่มีการเพิ่มระเบียนใหม่ ค่าจะเพิ่มขึ้น 1 โดยไม่คำนึงว่าจะถูกลบในภายหลังหรือไม่ เช่นเดียวกับรหัสที่ใช้ เพิ่มขึ้น 1 รายการในรายการฐานข้อมูลโดยอัตโนมัติ ใช้เพื่อกำหนดค่าเฉพาะให้กับแอตทริบิวต์ <id> ของ <restaurant> ที่เพิ่มใหม่ ความหมายของสาขาอื่นๆ ชัดเจนยิ่งขึ้น
/tomcat/webapps/ROOT/index.html (โค้ด HTML ล้วนๆ)
รหัส:
<html>
<หัว>
<title>oddWorld Catering System</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</หัว>
<body onload="javascript:dataform.username.focus()">
<div align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="22">
<tr>
<td width="1"><img src="images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> เข้าสู่ระบบระบบจัดเลี้ยง </td>
<td><img src="images/top_r2.GIF" width="294" height="22"></td>
</tr>
</ตาราง>
<br>
<br>
<table width="300" border="0" cellspacing="1" cellpadding="0" >
<tr>
<td height="200" valign="top" align="center">
<p align="center">
<ความกว้างของตาราง="100%" border="0" cellspacing="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#efefef">เข้าสู่ระบบระบบจัดเลี้ยง</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<ชื่อฟอร์ม=วิธีการของ dataform=การกระทำของโพสต์=''canyin/jsp/loginjudge.jsp''>
<tr>
<td width="100"><b>ชื่อเข้าสู่ระบบ:</b></td>
<td>
<อินพุตความยาวสูงสุด=16
ชื่อ = "ชื่อผู้ใช้" class = stedit value = "joard">
</td>
</tr>
<tr>
<td width="100"><b>รหัสผ่าน:</b></td>
<td>
<คลาสอินพุต=stedit ความยาวสูงสุด=16
name="userpass" type=password value="oddworld">
</td>
</tr>
</แบบฟอร์ม>
</ตาราง>
<br>
<เส้นขอบตาราง=0 เซลล์แพดดิ้ง=0 ระยะห่างเซลล์=0>
<tbody>
<tr>
<td>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="เข้าสู่ระบบ">
</td>
<td> </td>
<td>
<input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="เปลี่ยนรหัสผ่าน">
</td>
<td> </td>
</tr>
</tbody>
</ตาราง>
<br>
</td>
</tr>
</ตาราง>
</td>
</tr>
</ตาราง>
</div>
</ร่างกาย>
</html>
<ภาษาสคริปต์=จาวาสคริปต์>
-
แบบฟอร์มตรวจสอบฟังก์ชัน ()
-
var Checkblank = /^(s*|( )|(.))*$/;
ถ้า (Checkblank.test(dataform.username.value))
-
alert("ชื่อล็อกอินไม่สามารถเว้นว่างได้!");
กลับเท็จ;
-
ถ้า (Checkblank.test(dataform.userpass.value))
-
alert("รหัสผ่านไม่สามารถเว้นว่างได้!");
กลับเท็จ;
-
window.dataform.submit();
-
-
</สคริปต์>
คำแนะนำ: ส่งชื่อผู้ใช้และรหัสผ่านผู้ใช้ไปที่ /tomcat/webapps/canyin/jsp/loginjudge.jsp
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class (โค้ดคือไฟล์ java ที่เกี่ยวข้อง)
แพ็คเกจแคนอิน;
นำเข้า javax.servlet.http.HttpSession;
นำเข้า javax.servlet.http.HttpServletRequest;
checkSessionBean คลาสสาธารณะ {
บูลีนส่วนตัว bolCheckPass=false;
คำขอ HttpServletRequest ส่วนตัว = null;
checkSessionBean บูลีนสาธารณะ (คำขอ HttpServletRequest, สตริง strSessionName, สตริง strCheckValue) {
checkSessionBean บูลีนสาธารณะ (คำขอ HttpServletRequest) {
เซสชัน HttpSession = request.getSession (เท็จ);
กลับ(bolCheckPass);
ถ้า (strSessionName==null || strCheckValue==null){
กลับ(bolCheckPass);
}อื่น{
ถ้า (เซสชัน!=null && session.getValue(strSessionName)!=null){
bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);
-
กลับ(bolCheckPass);
-
-
-
คำอธิบาย: ตรวจสอบว่าค่าของชื่อเซสชันที่ส่งเข้ามาเป็นพารามิเตอร์และค่าของฟิลด์ที่ส่งเป็นพารามิเตอร์เท่ากันหรือไม่
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class
รหัส:
แพ็คเกจแคนอิน;
นำเข้า javax.xml.parsers.*;
นำเข้า javax.xml.transform.*;
นำเข้า javax.xml.transform.dom.DOMSource;
นำเข้า javax.xml.transform.stream.StreamResult;
นำเข้า org.w3c.dom.*;
คลาสสาธารณะ connXmlBean {
โรงงาน DocumentBuilderFactory ส่วนตัว = null;
ตัวสร้าง DocumentBuilder ส่วนตัว = null;
เอกสารส่วนตัว doc=null;
สาธารณะ connXmlBean(){}
สตริงสาธารณะ connXml (สตริง xmlFileName) {
สตริง strExc="";
พยายาม{
โรงงาน = DocumentBuilderFactory.newInstance();
builder=factory.newDocumentBuilder();
doc=builder.parse(xmlFileName);
doc.ทำให้เป็นมาตรฐาน();
} จับ (ข้อยกเว้นจ) {
strExc=e.toString();
-
กลับ(strExc);
-
เอกสารสาธารณะ getXmlDoc(){
กลับ (doc);
-
-
คำอธิบาย: เปิดไฟล์ xml ที่ระบุ
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class
รหัส:
แพ็คเกจแคนอิน;
นำเข้า javax.xml.parsers.*;
นำเข้า javax.xml.transform.*;
นำเข้า javax.xml.transform.dom.DOMSource;
นำเข้า javax.xml.transform.stream.StreamResult;
นำเข้า java.io.File;
นำเข้า org.w3c.dom.*;
คลาสสาธารณะ writeXmlBean {
สาธารณะ writeXmlBean(){}
สตริงสาธารณะ writeXml (เอกสารเอกสาร, สตริง xmlFileName) {
สตริง strExc="";
พยายาม{
TransformerFactory tfactory = TransformerFactory.newInstance();
หม้อแปลงไฟฟ้า หม้อแปลงไฟฟ้า = tfactory.newTransformer();
แหล่งที่มาของ DOMSource = แหล่งที่มาของ DOMSource ใหม่ (doc);
ผลลัพธ์ StreamResult = StreamResult ใหม่ (ไฟล์ใหม่ (xmlFileName));
Transformer.transform (แหล่งที่มาผลลัพธ์);
} จับ (ข้อยกเว้นจ) {
strExc=e.toString();
-
กลับ (strExc);
-
-
คำอธิบาย: เขียนเนื้อหาของ dom ไปยังไฟล์ xml ที่ระบุ
/tomcat/webapps/canyin/jsp/loginjudge.jsp
รหัส:
<%-- ระบบการจัดการการจัดเลี้ยงของ OddWorld (เวอร์ชันภาษาจีนตัวย่อ) 1 ธันวาคม 2545
คัดลอกขวาโดย joard ast
ฟังก์ชัน Loginjudge.jsp: การตรวจสอบตัวตนผู้ใช้ ตามข้อมูลประจำตัวที่แตกต่างกันของผู้ใช้ที่ทำเครื่องหมายในไฟล์ /data/user.xml
ตัดสินใจไปที่หน้าการจัดการแบ็กเอนด์หรือหน้าการสั่งซื้อของลูกค้า
-
<%@ หน้า contentType="text/html;charset=gb2312" %>
<%@ ภาษาหน้า = "java" import = "javax.xml.parsers.*" %>
<%@ หน้านำเข้า = "org.w3c.dom.*" %>
<%@ หน้า import="canyin.*" %>
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="หน้า" />
-
session.setMaxInactiveInterval(1800);
เอกสารเอกสาร;
ผู้ใช้ NodeList;
สตริง strExc="";
สตริง strUsername,strPassword;
strUsername=(String)request.getParameter("ชื่อผู้ใช้");
strPassword=(String)request.getParameter("userpass");
//ตรวจสอบว่าข้อมูลว่างเปล่าหรือไม่
ถ้า (strUsername=="" || strPassword=="" ){
out.println("<script language=''javascript''>");
out.println("alert(''ชื่อผู้ใช้หรือรหัสผ่านมีค่าเป็น null!'');");
out.println("window.location.href=''/index.html'';");
out.println("</script>");
กลับ;
-
xmlBean.connXml("webapps/canyin/data/users.xml");
doc=xmlBean.getXmlDoc();
พยายาม{
ผู้ใช้ =doc.getElementsByTagName("ผู้ใช้");
สำหรับ (int i=0;i<users.getLength();i++){
ผู้ใช้องค์ประกอบ = (องค์ประกอบ) users.item (i);
สตริง strAtrNameValue=user.getAttributeNode("name").getNodeValue();
สตริง strAtrPassWordValue=user.getAttributeNode("password").getNodeValue();
สตริง strAtrRoleValue=user.getAttributeNode("roles").getNodeValue();
ถ้า (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strPassword)){
ถ้า (strAtrRoleValue.equals("ผู้ดูแลระบบ")){
out.println("<script language=''javascript''>");
out.println("alert(''ยินดีต้อนรับผู้ดูแลระบบเพื่อเข้าสู่ระบบ!'');");
out.println("</script>");
//ตั้งค่าเซสชัน (sesUserRole) เพื่อระบุตัวตนของผู้ใช้ และข้อมูลระบุตัวตนของผู้ดูแลระบบคือผู้ดูแลระบบ
session.setAttribute("sesUserRole", "ผู้ดูแลระบบ");
//ข้ามไปยังหน้าการจัดการ
response.sendRedirect("admin/admin_rest.jsp");
กลับ;
}อื่น{
//ตั้งค่าเซสชัน (sesUserRole) เพื่อระบุตัวตนของผู้ใช้ และระบุตัวตนของผู้ดูแลระบบคือผู้ใช้
session.setAttribute("sesUserRole", "ผู้ใช้");
//ข้ามไปยังหน้าผู้ใช้ปกติ
response.sendRedirect("index.jsp");
กลับ;
-
}อื่น{
out.println("<script language=''javascript''>");
out.println("alert(''ชื่อผู้ใช้หรือรหัสผ่านผิด!'');");
out.println("history.go(-1);");
out.println("</script>");
กลับ;
-
-
} จับ (ข้อยกเว้นจ) {
strExc=e.toString();
-
-
อธิบาย:.......
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp
รหัส:
<%-- ระบบการจัดการการจัดเลี้ยงของ OddWorld (เวอร์ชันภาษาจีนตัวย่อ) 1 ธันวาคม 2545
คัดลอกขวาโดย joard ast
ฟังก์ชั่น admin_rest.jsp: หน้าการจัดการแบ็กเอนด์, หน้าการจัดการร้านอาหาร
-
<%@ หน้า contentType="text/html;charset=gb2312" %>
<%@ ภาษาหน้า = "java" import = "javax.xml.parsers.*" %>
<%@ เพจนำเข้า = "javax.xml.transform.*" %>
<%@ หน้านำเข้า = "org.w3c.dom.*" %>
<%@ หน้า import="canyin.*" %>
<%@ รวมไฟล์ = "../../include/sys_dialog.jsp" %>
<jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" scope="หน้า" />
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="หน้า" />
<jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean" scope="หน้า" />
<%//ตรวจสอบตัวตนของผู้ใช้เพื่อพิจารณาว่าเขาเป็นผู้ดูแลระบบหรือไม่
if(!checkSessionBean.checkSessionBean(คำขอ,"sesUserRole","ผู้ดูแลระบบ")){
out.print(showDialog("คุณไม่มีสิทธิ์ของผู้ดูแลระบบ!"/index.html"));
กลับ;
-
//รับข้อมูลที่เกี่ยวข้องจากไฟล์ข้อมูลร้านอาหาร rest.xml
เอกสารเอกสาร;
ร้านอาหาร NodeList;
สตริง strAct;
intintId=0;
สตริง strOperation="show";
//ยอมรับพารามิเตอร์ภายนอกที่ส่งเข้ามา
strAct=(String)request.getParameter("การกระทำ");
xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
ร้านอาหาร =doc.getElementsByTagName("ร้านอาหาร");
//กำหนดการทำงานของไฟล์ร้านอาหาร.xml ตามพารามิเตอร์ภายนอกที่ส่งผ่านเข้ามา
ถ้า (strAct!=null){
if(strAct.equals("เพิ่มใหม่ทำ")){
สตริง strName;
สตริง strPhone;
สตริง strAddress;
ข้อความ เช่น;
strName=(String)request.getParameter("ชื่อ").trim();
strPhone=(String)request.getParameter("โทรศัพท์").trim();
strAddress=(String)request.getParameter("ที่อยู่").trim();
//การตรวจสอบข้อมูล
ถ้า(strName==null){
out.print(showDialog("ชื่อร้านอาหารไม่สามารถเว้นว่างได้!"));
กลับ;
-
ถ้า(strPhone==null){
out.print(showDialog("หมายเลขโทรศัพท์ของร้านอาหารต้องไม่เว้นว่าง!"));
กลับ;
-
/*ถ้า(strที่อยู่==null){
out.print(showDialog("ที่อยู่ร้านอาหารไม่สามารถเว้นว่างได้!"));
กลับ;
-
//ตรวจสอบความเป็นเอกลักษณ์ของข้อมูล
สำหรับ(int i=0;i<ร้านอาหาร.getLength();i++){
ร้านอาหารองค์ประกอบ=(องค์ประกอบ) Restaurants.item(i);
if(((String)restaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().getNodeValue()).equals(strName)){
out.print(showDialog("ชื่อร้านอาหารซ้ำ!"));
กลับ;
}อื่น{
if(((String)restaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().getNodeValue()).equals(strPhone)){
out.print(showDialog("หมายเลขโทรศัพท์ร้านอาหารซ้ำ!"));
กลับ;
-
-
-
//รับจำนวนบันทึกที่มีอยู่และตั้งค่าแอตทริบิวต์รหัสส่วนเพิ่มที่ไม่ซ้ำกันสำหรับบันทึกร้านอาหารใหม่
intintNum=0;
องค์ประกอบ restNum=(องค์ประกอบ)doc.getElementsByTagName("ร้านอาหาร").item(0);
intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());
intNum+=1;
//บวก 1 เข้ากับค่าของแอตทริบิวต์ร้านอาหาร num
restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));
//เพิ่มโหนด
องค์ประกอบ newRestaurant=doc.createElement("ร้านอาหาร");
Attr newArrId=doc.createAttribute("id");
//แอตทริบิวต์ newArrId = แอตทริบิวต์ใหม่("id",String.valueOf(intNum));
textseg=doc.createTextNode(String.valueOf(intNum));
newArrId.setValue(String.valueOf(intNum));
newRestaurant.setAttributeNode (newArrId);
องค์ประกอบ newName=doc.createElement("ชื่อ");
textseg=doc.createTextNode(strName);
newName.appendChild(ข้อความ);
newRestaurant.appendChild (ชื่อใหม่);
องค์ประกอบ newPhone=doc.createElement("โทรศัพท์");
textseg=doc.createTextNode(strPhone);
newPhone.appendChild (ข้อความเช่น);
newRestaurant.appendChild (โทรศัพท์ใหม่);
องค์ประกอบ newAddress=doc.createElement("ที่อยู่");
textseg=doc.createTextNode(strAddress);
newAddress.appendChild (ข้อความเช่น);
newRestaurant.appendChild (ที่อยู่ใหม่);
doc.getDocumentElement().appendChild(ร้านอาหารใหม่);
//เรียก bean เพื่อเขียนไฟล์ xml ที่เกี่ยวข้อง
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
response.sendRedirect(request.getRequestURI());
กลับ;
-
ถ้า(strAct.equals("modiDo")){
สตริง strName;
สตริง strPhone;
สตริง strAddress;
ข้อความ เช่น;
int modiId;
//บันทึกว่ารายการใด (i) บันทึกที่จะแก้ไขคือ
อินท์อินไอ=0;
strName=(String)request.getParameter("ชื่อ").trim();
strPhone=(String)request.getParameter("โทรศัพท์").trim();
strAddress=(String)request.getParameter("ที่อยู่").trim();
modiId=Integer.parseInt(request.getParameter("recordId").trim());
//การตรวจสอบข้อมูล
ถ้า(strName==null){
out.print(showDialog("ชื่อร้านอาหารไม่สามารถเว้นว่างได้!"));
กลับ;
-
ถ้า(strPhone==null){
out.print(showDialog("หมายเลขโทรศัพท์ของร้านอาหารต้องไม่เว้นว่าง!"));
กลับ;
-
ถ้า(modiId==0){
out.print(showDialog("ไม่มีบันทึกร้านอาหารที่คุณต้องการแก้ไข!"));
กลับ;
-
/*ถ้า(strที่อยู่==null){
out.print(showDialog("ที่อยู่ร้านอาหารไม่สามารถเว้นว่างได้!"));
กลับ;
-
// ตั้งค่าสถานะแสดงบันทึกที่มีอยู่
บันทึกบูลีนมีอยู่ = false;
//ตรวจสอบความเป็นเอกลักษณ์ของข้อมูล
สำหรับ(int i=0;i<ร้านอาหาร.getLength();i++){
ร้านอาหารองค์ประกอบ=(องค์ประกอบ) Restaurants.item(i);
ถ้า(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){
บันทึกมีอยู่=จริง;
intI=ฉัน;
-
if(((String)restaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().getNodeValue()).equals(strName) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("ชื่อร้านอาหารซ้ำ!"));
กลับ;
}อื่น{
if(((String)restaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("หมายเลขโทรศัพท์ร้านอาหารซ้ำ!"));
กลับ;
-
-
-
ถ้า(!บันทึกมีอยู่){
out.print(showDialog("ไม่มีบันทึกร้านอาหารที่คุณต้องการแก้ไข!"));
กลับ;
}อื่น{
//ทำการเปลี่ยนแปลงบันทึก
พยายาม{
องค์ประกอบ modiRestaurant=(องค์ประกอบ) Restaurants.item(intI);
modiRestaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().setNodeValue(strName);
modiRestaurant.getElementsByTagName("โทรศัพท์").item(0).getFirstChild().setNodeValue(strPhone);
modiRestaurant.getElementsByTagName("ที่อยู่").item(0).getFirstChild().setNodeValue(strAddress);
//เรียก bean เพื่อเขียนไฟล์ xml ที่เกี่ยวข้อง
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
response.sendRedirect(request.getRequestURI());
กลับ;
}จับ(ข้อยกเว้นจ){}
-
-
//ดำเนินการลบ
ถ้า(strAct.เท่ากับ("เดล")){
int delId;
//บันทึกว่ารายการใด (i) บันทึกที่จะแก้ไขคือ
อินท์อินไอ=0;
delId=Integer.parseInt(request.getParameter("recordId").trim());
ถ้า(delId==0){
out.print(showDialog("ไม่มีบันทึกร้านอาหารที่คุณต้องการแก้ไข!"));
กลับ;
-
การตั้งค่าสถานะ file:// แสดงให้เห็นว่ามีบันทึกอยู่
บันทึกบูลีนมีอยู่ = false;
//ตรวจสอบความเป็นเอกลักษณ์ของข้อมูล
สำหรับ(int i=0;i<ร้านอาหาร.getLength();i++){
ร้านอาหารองค์ประกอบ=(องค์ประกอบ) Restaurants.item(i);
ถ้า(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
บันทึกมีอยู่=จริง;
intI=ฉัน;
-
-
ถ้า(!บันทึกมีอยู่){
out.print(showDialog("ไม่มีบันทึกร้านอาหารที่คุณต้องการลบ!"));
กลับ;
}อื่น{
//ดำเนินการลบบันทึก
พยายาม{
โหนด delNode=(โหนด)restaurants.item(intI);
doc.getElementsByTagName("ร้านอาหาร").item(0).removeChild(delNode);
//เรียก bean เพื่อเขียนไฟล์ xml ที่เกี่ยวข้อง
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
response.sendRedirect(request.getRequestURI());
กลับ;
}จับ(ข้อยกเว้นจ){}
-
-
-
//สถานะการประมวลผลที่เกี่ยวข้องของเพจถูกกำหนดโดยพารามิเตอร์ภายนอก
ถ้า (strAct==null){
strOperation="แสดง";
}อื่น{
ถ้า (strAct.equals("modi")){
strOperation="โมดี";
intId=Integer.parseInt(request.getParameter("recordId"));
}อื่น{
if(strAct.equals("เพิ่มใหม่")){
strOperation="เพิ่มใหม่";
}อื่น{
strOperation="แสดง";
-
-
-
//หากระเบียนว่างเปล่า ให้เปลี่ยนสถานะเพจเป็น "ใหม่"
ถ้า (restaurants.getLength()==0){
strOperation="เพิ่มใหม่";
-
-
<html>
<หัว>
<title>oddWorld Catering System</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta http-equiv="หมดอายุ" content="0">
<link rel="stylesheet" href="../../include/itsp.css" type="text/css">
</หัว>
<ร่างกาย>
<div align="center">
<table width="100%" border="0" cellspacing="0" cellpadding="0" height="22">
<tr>
<td width="1"><img src="../../images/top_r1.GIF" width="62" height="22"></td>
<td width=150 align="center"> การจัดการระบบการจัดเลี้ยง--การจัดการร้านอาหาร</td>
<td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
<td width=100 align="center"><a href="/index.html">[ออกจากระบบ]</a></td>
</tr>
</ตาราง>
<br>
<br>
<table bgcolor="#999999" align=center border=0 cellpadding=1 ระยะห่างของเซลล์=1
ความกว้าง="90%">
<tbody>
<tr bgcolor="#efefef" align="center" valign="middle">
<td class=ttTable height=30 width="20"> </td>
<td class=ttTable height=30 width="0">ชื่อร้านอาหาร</td>
<td class=ttTable height=30 width="0">หมายเลขโทรศัพท์ของร้านอาหาร</td>
<td class=ttTable height=30 width="0">
<div align="center">ที่อยู่ร้านอาหาร</div>
</td>
<td class=ttTable height=30 width="30">
<div align="center">แก้ไข</div>
</td>
<td class=ttTable height=30 width="30">
<div align="center">ลบ</div>
</td>
</tr>
-
สำหรับ(int i=0;i<restaurants.getLength();i++)
-
ร้านอาหารองค์ประกอบ=(องค์ประกอบ) Restaurants.item(i);
ถ้า (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
-
<%//แสดงรูปแบบที่แก้ไข%>
<tr align="center" bgcolor="#ffffff" valign="middle">
<form name=dataform action="<%=request.getRequestURI()%>?act=modiDo" method="post" onSubmit=''return checkform(this);'' >
<td class=tdsmall height=25 width="20">
<input type="hidden" name="recordId" value="<%=restaurant.getAttributeNode("id").getNodeValue()%>">
<%=(i+1)%></td>
<td class=tdsmall height=25>
<input name="name" class=stedit
style="HEIGHT: 22px; WIDTH: 150px" value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().getNodeValue());
-
" ความยาวสูงสุด = "40" >
</td>
<td class=tdsmall height=25>
<ชื่ออินพุต = "โทรศัพท์" class = stedit
style="HEIGHT: 22px; WIDTH: 100px" value="<%if(restaurant.getElementsByTagName("โทรศัพท์").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("โทรศัพท์").item(0).getFirstChild().getNodeValue());
}%>" ความยาวสูงสุด = "20" >
</td>
<td class=tdsmall height=25>
<input name="address" class=stedit
style="HEIGHT: 22px; WIDTH: 200px" value="<%
if(restaurant.getElementsByTagName("ที่อยู่").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("ที่อยู่").item(0).getFirstChild().getNodeValue());
}%>" ความยาวสูงสุด = "100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0
ความสูง=15 src="../../images/editok.gif" width=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</แบบฟอร์ม>
</tr>
<% }อื่น ๆ{
//แสดงรูปแบบปกติ %>
<tr align="center" bgcolor="#ffffff" valign="middle">
<td class=tdsmall height=25 width="20"><%=(i+1)%></td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("ชื่อ").item(0).getFirstChild().getNodeValue());
-
</td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("โทรศัพท์").item(0).getFirstChild().getNodeValue());
}%></td>
<td class=tdsmall height=25 width="0">
-
if(restaurant.getElementsByTagName("ที่อยู่").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("ที่อยู่").item(0).getFirstChild().getNodeValue());
-
</td>
<td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()% >"><img เส้นขอบ=0
ความสูง=15 src="../../images/edit.gif" width=15></a></td>
<td class=tdsmall height=25 width="30"><img border=0
ความสูง=15
onClick="javascript:if(confirm(''Are youแน่ใจที่จะลบบันทึกนี้? การลบจะทำให้บันทึกใช้ไม่ได้?'')){window.location.href=''<%=request.getRequestURI()%> ? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}"
src="../../images/delete.gif" style="CURSOR: มือ" width=15> </td>
</tr>
-
-
<% ถ้า (strOperation=="เพิ่มใหม่"){
//แสดงรูปแบบใหม่%>
<tr align="center" bgcolor="#ffffff" valign="middle">
<form name=dataform2 action="<%=request.getRequestURI()%>?act=addnewDo" method="post" onSubmit=''return checkform2(this);'' >
<td class=tdsmall height=25 width="20"></td>
<td class=tdsmall height=25>
<input name="name" class=stedit
style="HEIGHT: 22px; WIDTH: 150px" value="" maxlength="40" >
</td>
<td class=tdsmall height=25>
<ชื่ออินพุต = "โทรศัพท์" class = stedit
style="HEIGHT: 22px; WIDTH: 100px" value="" maxlength="20">
</td>
<td class=tdsmall height=25>
<input name="address" class=stedit
style="HEIGHT: 22px; WIDTH: 200px" value="" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0
ความสูง=15 src="../../images/editok.gif" width=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</แบบฟอร์ม>
</tr>
-
</tbody>
</ตาราง>
<br>
<table align=center border=0 cellpadding=0 cellspacing=2 width="95%">
<tbody>
<tr valign=center>
<td align=middle> <br>
<เส้นขอบตาราง=0 เซลล์แพดดิ้ง=0 ระยะห่างเซลล์=0>
<tr>
<td>
<% ถ้า (strOperation=="เพิ่มใหม่"){
-
<input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="อัพเดตบันทึก">
<% }อื่น ๆ{
ถ้า(strOperation=="โมดิ"){
-
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="อัพเดตบันทึก">
-
}อื่น{
-
<input class=stbtm type="button" name="Button" value="New" onClick="javascript:window.location.href=''<%=request.getRequestURI()%>?act=addnew'' ; "><%
-
-
</td>
<td>
<input class=stbtm type="button" name="Button" value="Return" onClick="javascript:window.location.href=''index.jsp'';">
</td>
</tr>
</ตาราง>
</td>
</tr>
</ตาราง>
<p> </p>
</div>
</ร่างกาย>
</html>
<ภาษาสคริปต์=จาวาสคริปต์>
-
ฟังก์ชันเช็คฟอร์ม2()
-
var Checkblank = /^(s*|( )|(.))*$/;
ถ้า (Checkblank.test(dataform2.name.value))
-
alert("ชื่อร้านอาหารไม่สามารถเว้นว่างได้!");
dataform2.name.focus();
กลับเท็จ;
-
ถ้า (Checkblank.test (dataform2.phone.value))
-
alert("หมายเลขโทรศัพท์ของร้านอาหารต้องไม่เว้นว่าง!");
dataform2.phone.focus();
กลับเท็จ;
-
window.dataform2.submit();
-
แบบฟอร์มตรวจสอบฟังก์ชัน ()
-
var Checkblank = /^(s*|( )|(.))*$/;
ถ้า (Checkblank.test(dataform.name.value))
-
alert("ชื่อร้านอาหารไม่สามารถเว้นว่างได้!");
dataform.name.focus();
กลับเท็จ;
-
ถ้า (Checkblank.test (dataform.phone.value))
-
alert("หมายเลขโทรศัพท์ของร้านอาหารต้องไม่เว้นว่าง!");
dataform.phone.focus();
กลับเท็จ;
-
window.dataform.submit();
-
-
</สคริปต์>
หมายเหตุ: การเขียนเอกสารนี้ไม่กระชับในหลาย ๆ ด้าน เนื่องจากในกระบวนการพัฒนาโปรแกรม โปรแกรมที่กระชับมากเกินไปมักจะนำมาซึ่งความยากลำบากในการบำรุงรักษาในภายหลัง
ประสบการณ์การพัฒนา:
ค่าที่ส่งคืนของ doc.getElementsByTagName("restaurants").item(int i) เป็นประเภทโหนด หากคุณไม่ต้องการเรียกค่าแอตทริบิวต์ ไม่จำเป็นต้องแปลงเป็นประเภทองค์ประกอบ สามารถดำเนินการได้โดยตรง เนื่องจากข้อผิดพลาดในเอกสารอ้างอิงการพัฒนา ระบบนี้จึงใช้การแปลงแบบบังคับ คุณสามารถพิจารณาใช้โหนดเพื่อดำเนินการโดยตรงในการพัฒนาในอนาคต
ทั้งฟังก์ชัน trim() และ Interger.parseInt() ไม่ยอมรับค่าว่าง
ไฟล์ด้านซ้ายและขวาภายใต้ Tomcat คือไดเรกทอรีที่เริ่มต้นจาก TOMCAT สำหรับรายละเอียด โปรดดูที่ webappscanyinjspuserjudge.jsp สำหรับการเขียนเส้นทาง xml
เพื่อนๆ ที่สนใจโค้ดต้นฉบับ โปรดติดต่อผมได้ตามอีเมลต่อไปนี้ [email protected]