Un exemple de développement utilisant JSP + JAVABEAN + XML
Auteur:Eve Cole
Date de mise à jour:2009-07-02 17:12:18
Cet exemple fait référence à des documents pertinents sur les opérations JSP sur XML sur certains sites Web et combine quelques expériences personnelles. L'exemple concerne le développement d'une partie du code pour la gestion backend du système de commande interne d'une entreprise. La fonction est principalement axée sur la gestion des informations de base sur les restaurants.
L'exemple lui-même a été développé dans le cadre d'une blague que j'ai eue avec des collègues de mon ancienne entreprise. Je voudrais également exprimer mon désir envers ces amis qui ont travaillé ensemble.
L'exemple lui-même est un programme structuré B/S fonctionnant sous la plateforme TOMCAT4.01. La configuration de TOMCAT ne sera pas expliquée ici. Expliquez simplement la structure des répertoires des fichiers et dossiers associés.
Description de la structure du répertoire :
/tomcat/webapps/canyin/ -----Répertoire personnel
/tomcat/webapps/canyin/jsp/ -----Répertoire de fichiers JSP
/tomcat/webapps/canyin/jsp/admin/ -----Le répertoire de stockage des fichiers JSP qui implémentent la gestion en arrière-plan
/tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------Le répertoire de stockage des fichiers javabean
/tomcat/webapps/canyin/data/ -----répertoire de stockage de fichiers XML
/tomcat/webapps/ROOT/ -----Dossier de stockage du fichier de démarrage Tomcat, seul le fichier index.html est stocké
Brève description du fichier :
/tomcat/webapps/canyin/data/users.xml -----Enregistrer les informations utilisateur
/tomcat/webapps/canyin/data/restaurants.xml -----Enregistrer les informations de base des restaurants
/tomcat/webapps/ROOT/index.html -----Page d'accueil, une zone de saisie apparaît sur la page, demandant à l'utilisateur de saisir un nom d'utilisateur et un mot de passe.
/tomcat/webapps/canyin/jsp/loginjudge.jsp -----Page de jugement de l'identité de l'utilisateur En fonction du nom d'utilisateur et du mot de passe, il est décidé si la page sera transférée vers le terminal de gestion en arrière-plan ou vers le client frontal. . Dans cet exemple, une fois que l'identité de l'utilisateur est confirmée et qu'il dispose des droits de gestion, il peut accéder au terminal de gestion backend et accéder directement à la page de gestion des informations de base du restaurant, simplifiant ainsi le processus d'explication.
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----Page de gestion des informations de base du restaurant, gère le nom, le numéro de téléphone, l'adresse et d'autres informations du restaurant
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- Le terminal de gestion en arrière-plan détecte la valeur de session qui indique l'identité de l'utilisateur. S'il n'est pas un administrateur, il reviendra à l'utilisateur. page de connexion.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----Connecter le fichier XML
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----Écrire un fichier XML
Introduction détaillée du fichier et description du code qui l'accompagne.
/tomcat/webapps/canyin/data/users.xml
Code:
<?xml version="1.0" encoding="UTF-8" ?>
- <utilisateurs>
<user name="joard" password="joard" rôles="admin" />
<nom d'utilisateur="joard01" mot de passe="joard01" rôles="utilisateur" />
<nom d'utilisateur="joard02" mot de passe="joard02" rôles="utilisateur" />
</utilisateurs>
Description : La signification des champs est le nom d'utilisateur, le mot de passe et l'identité de l'utilisateur.
/tomcat/webapps/canyin/data/restaurants.xml
Code:
<?xml version="1.0" encoding="UTF-8" ?>
- <restaurants num="10">
- <identifiant du restaurant="1">
<nom>Restaurant de restauration rapide Shanghai Ting</nom>
<téléphone>021-76546726</téléphone>
<adresse>Tour B de Broadway Plaza</adresse>
</restaurant>
- <identifiant du restaurant="8">
<nom>Hôtel Shangri-La</nom>
<téléphone>021-2312134</téléphone>
<adresse>N° 1023, route de Nanjing</adresse>
</restaurant>
</restaurants>
Remarque : L'attribut <num> enregistre le nombre total d'enregistrements dans le fichier restaurants.xml. Chaque fois qu'un nouvel enregistrement est ajouté, la valeur augmentera de 1, qu'il soit supprimé ultérieurement, tout comme l'identifiant utilisé pour. augmente automatiquement de 1 dans l'élément de la base de données. Utilisé pour attribuer une valeur unique à l'attribut <id> du <restaurant> nouvellement ajouté. La signification des autres champs est plus évidente.
/tomcat/webapps/ROOT/index.html (code HTML pur)
Code:
<html>
<tête>
<title>Système de restauration OddWorld</title>
<méta http-equiv="Content-Type" content="text/html; charset=gb2312">
</tête>
<body onload="javascript:dataform.username.focus()">
<div align="centre">
<table width="100%" border="0" Cellpacing="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"> Connexion au système de restauration </td>
<td><img src="images/top_r2.GIF" width="294" height="22"></td>
</tr>
</table>
<br>
<br>
<table width="300" border="0" cellpacing="1" cellpadding="0" >
<tr>
<td height="200" valign="top" align="center">
<p align="center">
<table width="100%" border="0" cellpacing="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#efefef">Connexion au système de restauration</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="top" align="center">
<table width="100%" border="0" Cellpacing="0" cellpadding="0">
<form name=dataform method=post action=''canyin/jsp/loginjudge.jsp''>
<tr>
<td width="100"><b>Nom de connexion :</b></td>
<td>
<longueur maximale d'entrée = 16
name="nom d'utilisateur" class=stedit value="joard">
</td>
</tr>
<tr>
<td width="100"><b>Mot de passe :</b></td>
<td>
<classe d'entrée = stedit longueur maximale = 16
nom = "passe utilisateur" type = mot de passe valeur = "monde étrange">
</td>
</tr>
</form>
</table>
<br>
<table border=0 cellpadding=0 cellpacing=0>
<corps>
<tr>
<td>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="Connexion">
</td>
<td> </td>
<td>
<input class=stbtm name=Submit onClick="javascript:window.location.href=''index.asp?myjoke=1'';" type=button value="Changer le mot de passe">
</td>
<td> </td>
</tr>
</tbody>
</table>
<br>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</corps>
</html>
<langage SCRIPT=javascript>
<!--
formulaire de contrôle de fonction()
{
var Checkblank = /^(s*|( )|(.))*$/;
si (Checkblank.test(dataform.username.value))
{
alert("Le nom de connexion ne peut pas être vide!");
renvoie faux ;
}
si (Checkblank.test(dataform.userpass.value))
{
alert("Le mot de passe ne peut pas être vide !");
renvoie faux ;
}
window.dataform.submit();
}
-->
</SCRIPT>
Instructions : Soumettez le nom d'utilisateur et le mot de passe utilisateur à /tomcat/webapps/canyin/jsp/loginjudge.jsp
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class (le code est le fichier java correspondant)
paquet canyin;
importer javax.servlet.http.HttpSession ;
importer javax.servlet.http.HttpServletRequest ;
classe publique checkSessionBean {
privé booléen bolCheckPass=false ;
requête privée HttpServletRequest = null ;
public boolean checkSessionBean (requête HttpServletRequest, String strSessionName, String strCheckValue) {
public boolean checkSessionBean (requête HttpServletRequest) {
Session HttpSession = request.getSession(false);
return(bolCheckPass);
if (strSessionName==null || strCheckValue==null){
return(bolCheckPass);
}autre{
if (session!=null && session.getValue(strSessionName)!=null){
bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);
}
return(bolCheckPass);
}
}
}
Description : Vérifiez si la valeur du nom de session transmise en paramètre et la valeur du champ transmise en paramètre sont égales.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class
Code:
paquet canyin;
importer javax.xml.parsers.* ;
importer javax.xml.transform.* ;
importer javax.xml.transform.dom.DOMSource ;
importer javax.xml.transform.stream.StreamResult ;
importer org.w3c.dom.* ;
classe publique connXmlBean {
usine privée DocumentBuilderFactory=null ;
constructeur de DocumentBuilder privé = null ;
Document privé doc=null ;
public connXmlBean(){}
chaîne publique connXml(String xmlFileName){
Chaîne strExc="";
essayer{
usine = DocumentBuilderFactory.newInstance();
builder=factory.newDocumentBuilder();
doc=builder.parse(xmlFileName);
doc.normalize();
}attraper(Exception e){
strExc=e.toString();
}
retour(strExc);
}
Document public getXmlDoc(){
return(doc);
}
}
Description : ouvrir un fichier XML spécifié
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class
Code:
paquet canyin;
importer javax.xml.parsers.* ;
importer javax.xml.transform.* ;
importer javax.xml.transform.dom.DOMSource ;
importer javax.xml.transform.stream.StreamResult ;
importer java.io.File ;
importer org.w3c.dom.* ;
classe publique writeXmlBean {
public writeXmlBean(){}
public String writeXml (Document doc,String xmlFileName){
Chaîne strExc="";
essayer{
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformateur transformer = tfactory.newTransformer();
Source DOMSource = nouveau DOMSource(doc);
Résultat StreamResult = nouveau StreamResult (nouveau fichier (xmlFileName));
transformer.transform(source,résultat);
}attraper(Exception e){
strExc=e.toString();
}
retour(strExc);
}
}
Description : Écrivez le contenu de dom dans un fichier XML spécifié.
/tomcat/webapps/canyin/jsp/loginjudge.jsp
Code:
<%-- oddWorld Catering Management System (version chinoise simplifiée) 1er décembre 2002
copier à droite par joard ast
Fonction loginjudge.jsp : vérification de l'identité des utilisateurs, basée sur les différentes identités des utilisateurs marquées dans le fichier /data/user.xml
Décidez d’aller sur la page de gestion backend ou sur la page de commande client.
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="javax.xml.parsers.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="canyin.*" %>
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="page" />
<%
session.setMaxInactiveInterval(1800);
Documentation ;
Utilisateurs de liste de nœuds ;
Chaîne strExc="";
Chaîne strUsername,strPassword ;
strUsername=(String)request.getParameter("nom d'utilisateur");
strPassword=(String)request.getParameter("userpass");
//Vérifie si les données sont vides
if (strUsername=="" || strPassword=="" ){
out.println("<script langage=''javascript''>");
out.println("alert(''Le nom d'utilisateur ou le mot de passe a une valeur nulle !'');");
out.println("window.location.href=''/index.html'';");
out.println("</script>");
retour;
}
xmlBean.connXml("webapps/canyin/data/users.xml");
doc=xmlBean.getXmlDoc();
essayer{
utilisateurs =doc.getElementsByTagName("utilisateur");
pour (int i=0;i<users.getLength();i++){
Élément utilisateur = (Élément) utilisateurs.item (i);
String strAtrNameValue=user.getAttributeNode("name").getNodeValue();
String strAtrPassWordValue=user.getAttributeNode("password").getNodeValue();
String strAtrRoleValue=user.getAttributeNode("roles").getNodeValue();
if (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strPassword)){
if (strAtrRoleValue.equals("admin")){
out.println("<script langage=''javascript''>");
out.println("alert(''Bienvenue à l'administrateur pour vous connecter au système !'');");
out.println("</script>");
//Définissez la session (sesUserRole) indiquant l'identité de l'utilisateur et l'identité de l'administrateur est admin
session.setAttribute("sesUserRole","admin");
//Aller à la page de gestion
réponse.sendRedirect("admin/admin_rest.jsp");
retour;
}autre{
//Définit la session (sesUserRole) indiquant l'identité de l'utilisateur, et l'identité de l'administrateur est l'utilisateur
session.setAttribute("sesUserRole","user");
// Passer à la page utilisateur normale
réponse.sendRedirect("index.jsp");
retour;
}
}autre{
out.println("<script langage=''javascript''>");
out.println("alert(''Nom d'utilisateur ou mot de passe incorrect !'');");
out.println("history.go(-1);");
out.println("</script>");
retour;
}
}
}attraper(Exception e){
strExc=e.toString();
}
%>
illustrer:.......
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp
Code:
<%-- oddWorld Catering Management System (version chinoise simplifiée) 1er décembre 2002
copier à droite par joard ast
Fonction admin_rest.jsp : page de gestion backend, page de gestion du restaurant.
--%>
<%@ page contentType="text/html;charset=gb2312" %>
<%@ page language="java" import="javax.xml.parsers.*" %>
<%@ page import="javax.xml.transform.*" %>
<%@ page import="org.w3c.dom.*" %>
<%@ page import="canyin.*" %>
<%@include file="../../include/sys_dialog.jsp" %>
<jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" scope="page" />
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" scope="page" />
<jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean" scope="page" />
<%//Vérifier l'identité de l'utilisateur pour déterminer s'il est administrateur
if(!checkSessionBean.checkSessionBean(request,"sesUserRole","admin")){
out.print(showDialog("Vous n'avez pas de droits d'administrateur !","/index.html"));
retour;
}
//Obtenir les données pertinentes du fichier d'informations sur le restaurant rest.xml
Documentation ;
Restaurants de liste de nœuds ;
Chaîne strAct ;
int intId=0;
Chaîne strOperation="show";
// Accepter les paramètres externes transmis
strAct=(String)request.getParameter("act");
xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
restaurants =doc.getElementsByTagName("restaurant");
//Détermine le fonctionnement du fichier restaurant.xml en fonction des paramètres externes transmis
si (strAct !=null){
if(strAct.equals("addnewDo")){
Chaîne strName ;
Chaîne strPhone ;
Chaîne strAddress ;
Texte texte;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("phone").trim();
strAddress=(String)request.getParameter("adresse").trim();
//Vérification des données
si(strName==null){
out.print(showDialog("Le nom du restaurant ne peut pas être vide !"));
retour;
}
si(strPhone==null){
out.print(showDialog("Le numéro de téléphone du restaurant ne peut pas être vide !"));
retour;
}
/*if(strAddress==null){
out.print(showDialog("L'adresse du restaurant ne peut pas être vide !"));
retour;
}*/
//Vérifier l'unicité des données
for(int i=0;i<restaurants.getLength();i++){
Élément restaurant=(Élément) restaurants.item(i);
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strName)){
out.print(showDialog("Nom du restaurant en double !"));
retour;
}autre{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone)){
out.print(showDialog("Répéter le numéro de téléphone du restaurant !"));
retour;
}
}
}
//Obtenir le nombre d'enregistrements existants et définir un attribut d'identifiant incrémentiel unique pour le nouvel enregistrement de restaurant
int NuméroInt=0;
Élément restNum=(Element)doc.getElementsByTagName("restaurants").item(0);
intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());
numéroint+=1;
//Ajoutez 1 à la valeur de l'attribut restaurant num
restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));
//Ajouter un nœud
Élément newRestaurant=doc.createElement("restaurant");
Attr newArrId=doc.createAttribute("id");
//Attribut newArrId = new Attribute("id",String.valueOf(intNum));
textseg=doc.createTextNode(String.valueOf(intNum));
newArrId.setValue(String.valueOf(intNum));
newRestaurant.setAttributeNode(newArrId);
Élément newName=doc.createElement("name");
textseg=doc.createTextNode(strName);
newName.appendChild(textseg);
newRestaurant.appendChild(newName);
Élément newPhone=doc.createElement("téléphone");
textseg=doc.createTextNode(strPhone);
newPhone.appendChild(textseg);
nouveauRestaurant.appendChild(nouveauTéléphone);
Élément newAddress=doc.createElement("adresse");
textseg=doc.createTextNode(strAddress);
newAddress.appendChild(textseg);
newRestaurant.appendChild(newAddress);
doc.getDocumentElement().appendChild(newRestaurant);
//Appelle le bean pour écrire le fichier XML correspondant
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
réponse.sendRedirect(request.getRequestURI());
retour;
}
if(strAct.equals("modiDo")){
Chaîne strName ;
Chaîne strPhone ;
Chaîne strAddress ;
Texte texte;
int modId ;
//Enregistrez quel élément(i) est l'enregistrement à modifier
int intI=0;
strName=(String)request.getParameter("name").trim();
strPhone=(String)request.getParameter("phone").trim();
strAddress=(String)request.getParameter("adresse").trim();
modiId=Integer.parseInt(request.getParameter("recordId").trim());
//Vérification des données
si(strName==null){
out.print(showDialog("Le nom du restaurant ne peut pas être vide !"));
retour;
}
si(strPhone==null){
out.print(showDialog("Le numéro de téléphone du restaurant ne peut pas être vide !"));
retour;
}
si(modiId==0){
out.print(showDialog("La fiche du restaurant que vous souhaitez modifier n'existe pas !"));
retour;
}
/*if(strAddress==null){
out.print(showDialog("L'adresse du restaurant ne peut pas être vide !"));
retour;
}*/
// L'indicateur indique que l'enregistrement existe
booléen recordExist=false ;
//Vérifier l'unicité des données
for(int i=0;i<restaurants.getLength();i++){
Élément restaurant=(Élément) 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() )!=modId ){
out.print(showDialog("Nom du restaurant en double !"));
retour;
}autre{
if(((String)restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modId ){
out.print(showDialog("Répéter le numéro de téléphone du restaurant !"));
retour;
}
}
}
si(!recordExist){
out.print(showDialog("La fiche du restaurant que vous souhaitez modifier n'existe pas !"));
retour;
}autre{
// Effectuer des modifications d'enregistrement
essayer{
Élément modiRestaurant=(Élément) restaurants.item(intI);
modiRestaurant.getElementsByTagName("name").item(0).getFirstChild().setNodeValue(strName);
modiRestaurant.getElementsByTagName("phone").item(0).getFirstChild().setNodeValue(strPhone);
modiRestaurant.getElementsByTagName("adresse").item(0).getFirstChild().setNodeValue(strAddress);
//Appelle le bean pour écrire le fichier XML correspondant
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
réponse.sendRedirect(request.getRequestURI());
retour;
}attraper(Exception e){}
}
}
//Effectuer une opération de suppression
if(strAct.equals("del")){
int delId;
//Enregistrez quel élément(i) est l'enregistrement à modifier
int intI=0;
delId=Integer.parseInt(request.getParameter("recordId").trim());
si(delId==0){
out.print(showDialog("La fiche du restaurant que vous souhaitez modifier n'existe pas !"));
retour;
}
L'indicateur file:// indique que l'enregistrement existe
booléen recordExist=false ;
//Vérifier l'unicité des données
for(int i=0;i<restaurants.getLength();i++){
Élément restaurant=(Élément) restaurants.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
recordExist=true;
intI=i;
}
}
si(!recordExist){
out.print(showDialog("La fiche du restaurant que vous souhaitez supprimer n'existe pas !"));
retour;
}autre{
//Effectuer une opération de suppression d'enregistrement
essayer{
Node delNode=(Node)restaurants.item(intI);
doc.getElementsByTagName("restaurants").item(0).removeChild(delNode);
//Appelle le bean pour écrire le fichier XML correspondant
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
réponse.sendRedirect(request.getRequestURI());
retour;
}attraper(Exception e){}
}
}
}
//L'état de traitement correspondant de la page est déterminé par des paramètres externes.
si (strAct==null){
strOperation="show";
}autre{
if (strAct.equals("modi")){
strOperation="modi";
intId=Integer.parseInt(request.getParameter("recordId"));
}autre{
if(strAct.equals("addnew")){
strOperation="ajouternouveau";
}autre{
strOperation="show";
}
}
}
//Si l'enregistrement est vide, changez le statut de la page en "Nouveau"
si (restaurants.getLength()==0){
strOperation="ajouternouveau";
}
%>
<html>
<tête>
<title>Système de restauration OddWorld</title>
<méta http-equiv="Content-Type" content="text/html; charset=gb2312">
<méta http-equiv="expires" content="0">
<link rel="stylesheet" href="../../include/itsp.css" type="text/css">
</tête>
<corps>
<div align="centre">
<table width="100%" border="0" Cellpacing="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"> Gestion du système de restauration - gestion des restaurants</td>
<td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
<td width=100 align="center"><a href="/index.html">[Quitter le système]</a></td>
</tr>
</table>
<br>
<br>
<table bgcolor="#999999" align=center border=0 cellpadding=1 Cellpacing=1
largeur="90%">
<corps>
<tr bgcolor="#efefef" align="center" valign="middle">
<td class=ttTable height=30 width="20"> </td>
<td class=ttTable height=30 width="0">Nom du restaurant</td>
<td class=ttTable height=30 width="0">Numéro de téléphone du restaurant</td>
<td class=ttTable height=30 width="0">
<div align="center">Adresse du restaurant</div>
</td>
<td class=ttTable height=30 width="30">
<div align="center">Modifier</div>
</td>
<td class=ttTable height=30 width="30">
<div align="center">Supprimer</div>
</td>
</tr>
<%
pour(int i=0;i<restaurants.getLength();i++)
{
Élément restaurant=(Élément) restaurants.item(i);
if (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
%>
<%//Afficher le format modifié%>
<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 hauteur=25>
<input name="nom" class=stedit
style="HAUTEUR : 22 px ; LARGEUR : 150 px" value="<%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("name").item(0).getFirstChild().getNodeValue());
}%>
" longueur max="40" >
</td>
<td class=tdsmall hauteur=25>
<input name="téléphone" class=stedit
style="HAUTEUR : 22 px ; LARGEUR : 100 px" value="<%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%>" longueurmax="20" >
</td>
<td class=tdsmall hauteur=25>
<input name="adresse" class=stedit
style="HAUTEUR : 22 px ; LARGEUR : 200 px" value="<%
if(restaurant.getElementsByTagName("adresse").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("adresse").item(0).getFirstChild().getNodeValue());
}%>" longueurmax="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0
hauteur=15 src="../../images/editok.gif" largeur=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</form>
</tr>
<% }autre{
//Afficher le format normal %>
<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("name").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("phone").item(0).getFirstChild().getNodeValue());
}%></td>
<td class=tdsmall height=25 width="0">
<%
if(restaurant.getElementsByTagName("adresse").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("adresse").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()% >"><img border=0
hauteur=15 src="../../images/edit.gif" largeur=15></a></td>
<td class=tdsmall height=25 width="30"><img border=0
hauteur=15
onClick="javascript:if(confirm(''Êtes-vous sûr de supprimer cet enregistrement ? La suppression rendra l'enregistrement inutilisable ?'')){window.location.href=''<%=request.getRequestURI()%> ? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}"
src="../../images/delete.gif" style="CURSEUR : main" width=15> </td>
</tr>
<%}
}%>
<% if (strOperation=="addnew"){
//Afficher le nouveau format%>
<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 hauteur=25>
<input name="nom" class=stedit
style="HAUTEUR : 22 px ; LARGEUR : 150 px" value="" maxlength="40" >
</td>
<td class=tdsmall hauteur=25>
<input name="téléphone" class=stedit
style="HAUTEUR : 22 px ; LARGEUR : 100 px" value="" maxlength="20" >
</td>
<td class=tdsmall hauteur=25>
<input name="adresse" class=stedit
style="HAUTEUR : 22 px ; LARGEUR : 200 px" value="" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0
hauteur=15 src="../../images/editok.gif" largeur=15></a></td>
<td class=tdsmall height=25 width="25"> </td>
</form>
</tr>
<% } %>
</tbody>
</table>
<br>
<table align=center border=0 cellpadding=0 cellpacing=2 width="95%">
<corps>
<tr valign=centre>
<td align=middle> <br>
<table border=0 cellpadding=0 cellpacing=0>
<tr>
<td>
<% if (strOperation=="addnew"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform2()==false);" type=button value="Mettre à jour l'enregistrement">
<% }autre{
if(strOperation=="modi"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" type=button value="Mettre à jour l'enregistrement">
<%
}autre{
%>
<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>
</table>
</td>
</tr>
</table>
<p> </p>
</div>
</corps>
</html>
<LANGUE DU SCRIPT=javascript>
<!--
fonction checkform2()
{
var Checkblank = /^(s*|( )|(.))*$/;
si (Checkblank.test(dataform2.name.value))
{
alert("Le nom du restaurant ne peut pas être vide !");
dataform2.name.focus();
renvoie faux ;
}
si (Checkblank.test(dataform2.phone.value))
{
alert("Le numéro de téléphone du restaurant ne peut pas être vide !");
dataform2.phone.focus();
renvoie faux ;
}
window.dataform2.submit();
}
formulaire de contrôle de fonction()
{
var Checkblank = /^(s*|( )|(.))*$/;
si (Checkblank.test(dataform.name.value))
{
alert("Le nom du restaurant ne peut pas être vide !");
dataform.name.focus();
renvoie faux ;
}
si (Checkblank.test(dataform.phone.value))
{
alert("Le numéro de téléphone du restaurant ne peut pas être vide !");
dataform.phone.focus();
renvoie faux ;
}
window.dataform.submit();
}
-->
</SCRIPT>
Remarque : La rédaction de ce document n'est pas concise à de nombreux endroits, car dans le processus de développement de programmes, des programmes trop concis entraînent souvent des difficultés lors de la maintenance ultérieure.
Expérience de développement :
La valeur de retour de doc.getElementsByTagName("restaurants").item(int i) est de type nœud. Si vous ne souhaitez pas appeler sa valeur d'attribut, il n'est pas nécessaire de la convertir en type Element. Peut être utilisé directement. En raison d'erreurs dans les matériaux de référence de développement, ce système utilise une transformation forcée. Vous pouvez envisager d'utiliser node pour opérer directement dans le développement futur.
Ni les fonctions trim() ni Interger.parseInt() n'acceptent les valeurs nulles.
Les fichiers gauche et droit sous Tomcat sont des répertoires commençant par TOMCAT. Pour plus de détails, veuillez vous référer à webappscanyinjspuserjudge.jsp pour l'écriture du chemin XML.
Amis intéressés par le code original, veuillez me contacter via l'adresse e-mail suivante, [email protected]