Этот пример относится к соответствующим документам по операциям 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/restaurants.xml
Код:
- <рестораны num="10"> - <идентификатор ресторана="1"> Шанхайский ресторан быстрого питания Ting 021-76546726 <адрес>Бродвей Плаза Тауэр Бадрес> ресторан> - <идентификатор ресторана="8"> Отель Шангри-Ла 021-2312134 <адрес>№ 1023, Нанкинская дорогаадрес> ресторан> рестораны> Примечание. Атрибут записывает общее количество записей в файле Restaurants.xml. Каждый раз, когда добавляется новая запись, значение увеличивается на 1 независимо от того, будет ли она удалена позже, точно так же, как и идентификатор, который используется для этого. автоматически увеличивается на 1 в элементе базы данных. Используется для присвоения уникального значения атрибуту вновь добавленного <ресторана>. Значение остальных полей более очевидно. /tomcat/webapps/ROOT/index.html (чистый HTML-код)
Код:
<голова> Система общественного питанияoddWorld
голова>
<тр>
Вход в систему кейтеринга
таблица>
<тр>
<тр>
Вход в систему общественного питания
<тр>
<имя формы=метод формы данных=post action=''canyin/jsp/loginjudge.jsp''> <тр>
Описание: Запишите содержимое dom в указанный XML-файл.
/tomcat/webapps/canyin/jsp/loginjudge.jsp
Код: <%--oddWorld Catering Management System (версия на упрощенном китайском языке), 1 декабря 2002 г. копия права от jard ast
Функция loginjudge.jsp: проверка личности пользователя на основе различных личностей пользователей, отмеченных в файле /data/user.xml. Решите перейти на страницу управления серверной частью или на страницу заказа клиентов. --%>
<%@ include file="../../include/sys_dialog.jsp" %>
<%//Проверьте личность пользователя, чтобы определить, является ли он администратором if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){ out.print(showDialog("У вас нет прав администратора!","/index.html")); возвращаться; }
//Получаем соответствующие данные из файла информации о ресторане rest.xml Документ-документ; NodeList рестораны;
//Проверка данных если(strName==ноль){ out.print(showDialog("Название ресторана не может быть пустым!")); возвращаться; } если (strPhone == ноль) { out.print(showDialog("Номер телефона ресторана не может быть пустым!")); возвращаться; } /*if(strAddress==null){ out.print(showDialog("Адрес ресторана не может быть пустым!")); возвращаться; }*/
//Проверяем уникальность данных for(int i=0;i Элемент ресторан=(Элемент) Restaurants.item(i); if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){ out.print(showDialog("Повторяющееся название ресторана!")); возвращаться; }еще{ if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){ out.print(showDialog("Повторите номер телефона ресторана!")); возвращаться; } }
}
//Получаем количество существующих записей и устанавливаем уникальный инкрементный атрибут id для новой записи ресторана интервал intNum = 0; Элемент restNum=(Element)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(textseg); новыйРесторан.appendChild(новоеИмя);
Элемент newPhone=doc.createElement("телефон"); textseg=doc.createTextNode(strPhone); newPhone.appendChild(textseg); новыйРесторан.appendChild(новыйТелефон);
Элемент newAddress=doc.createElement("адрес"); textseg=doc.createTextNode(strAddress); newAddress.appendChild(textseg); новыйРесторан.appendChild(новыйАдрес);
//Вызов компонента для записи соответствующего XML-файла writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
ответ.sendRedirect(request.getRequestURI()); возвращаться; } if(strAct.equals("modiDo")){ Строка имя_строки; Строка стрФоне; Строка стрАдрес; Текстовый сегмент; int modId; //Запишите, какой элемент(i) представляет собой изменяемая запись интервал intI=0;
//Проверка данных если(strName==ноль){ out.print(showDialog("Название ресторана не может быть пустым!")); возвращаться; } если (strPhone == ноль) { out.print(showDialog("Номер телефона ресторана не может быть пустым!")); возвращаться; } если(modiId==0){ out.print(showDialog("Запись о ресторане, который вы хотите изменить, не существует!")); возвращаться; } /*if(strAddress==null){ out.print(showDialog("Адрес ресторана не может быть пустым!")); возвращаться; }*/
// Флаг показывает, что запись существует логическое значение RecordExist = false;
//Проверяем уникальность данных for(int i=0;i Элемент ресторан=(Элемент) Restaurants.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){ записьExist = истина; intI = я;
если(!recordExist){ out.print(showDialog("Запись о ресторане, который вы хотите изменить, не существует!")); возвращаться; }еще{ //Выполняем изменения записи пытаться{ Элемент modiRestaurant=(Элемент) Restaurants.item(intI); modiRestaurant.getElementsByTagName("имя").item(0).getFirstChild().setNodeValue(strName); modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone); modiRestaurant.getElementsByTagName("адрес").item(0).getFirstChild().setNodeValue(strAddress);
//Вызов компонента для записи соответствующего XML-файла writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
}catch(Исключение е){} } } //Выполняем операцию удаления if(strAct.equals("del")){ int delID; //Запишите, какой элемент(i) представляет собой изменяемая запись интервал intI=0;
если(delId==0){ out.print(showDialog("Запись о ресторане, который вы хотите изменить, не существует!")); возвращаться; }
Флаг file:// показывает, что запись существует. логическое значение RecordExist = false;
//Проверяем уникальность данных for(int i=0;i Элемент ресторан=(Элемент) Restaurants.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){ записьExist = истина; intI = я;
} }
если(!recordExist){ out.print(showDialog("Запись о ресторане, который вы хотите удалить, не существует!")); возвращаться; }еще{ //Выполняем операцию удаления записи пытаться{ Узел delNode=(Node)restaurants.item(intI);
высота=15 onClick="javascript:if(confirm(''Вы уверены, что удалите эту запись? Удаление сделает запись непригодной для использования?'')){window.location.href=''<%=request.getRequestURI()%> ? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}" src="../../images/delete.gif" style="КУРСОР: рука" width=15>
<%} }%> <% if (strOperation=="addnew"){ //Показать новый формат%>
<% } %>
таблица>
<тело>
<граница таблицы=0 cellpadding=0 cellspace=0> <тр> <тд> <% if (strOperation=="addnew"){ %>
<% }еще{ если(strOperation=="моди"){ %>
<% }еще{ %> <% } } %>
<тд>
таблица>
таблица>
тело>
<ЯЗЫК СКРИПТА=javascript>
СКРИПТ> Примечание. Написание этого документа во многих местах не является кратким, поскольку в процессе разработки слишком лаконичные программы часто создают трудности при дальнейшем сопровождении.
Опыт разработки:
Возвращаемое значение doc.getElementsByTagName("restaurants").item(int i) имеет тип узла. Если вы не хотите вызывать значение его атрибута, нет необходимости приводить его к типу элемента. Может работать напрямую. Из-за ошибок в справочных материалах разработки в данной системе используется принудительное преобразование. Вы можете рассмотреть возможность использования узла для непосредственного использования в будущей разработке.
Ни функции Trim(), ни Interger.parseInt() не принимают нулевые значения.
Левый и правый файлы tomcat — это каталоги, начинающиеся с TOMCAT. Подробную информацию о написании пути xml можно найти в webappscanyinjspuserjudge.jsp.
Друзья, которых интересует оригинальный код, свяжитесь со мной по следующему адресу электронной почты: [email protected].