Un ejemplo de desarrollo usando JSP + JAVABEAN + XML
Autor:Eve Cole
Fecha de actualización:2009-07-02 17:12:18
Este ejemplo hace referencia a documentos relevantes sobre operaciones JSP en XML en algunos sitios web y combina algunas experiencias personales. El ejemplo implica el desarrollo de parte del código para la gestión backend del sistema de pedidos interno de una empresa. La función se centra principalmente en la gestión de información básica sobre restaurantes.
El ejemplo en sí se desarrolló como parte de una broma que tuve con colegas de mi antigua empresa. También me gustaría expresar mi añoranza por aquellos amigos que han trabajado juntos.
El ejemplo en sí es un programa estructurado B/S que se ejecuta bajo la plataforma TOMCAT4.01. La configuración de TOMCAT no se explicará aquí. Simplemente explique la estructura de directorios de archivos y carpetas relacionados.
Descripción de la estructura del directorio:
/tomcat/webapps/canyin/ -----Directorio de inicio
/tomcat/webapps/canyin/jsp/ -----directorio de archivos JSP
/tomcat/webapps/canyin/jsp/admin/ -----El directorio de almacenamiento para archivos JSP que implementan la gestión en segundo plano
/tomcat/webapps/canyin/WEB-INF/classes/canyin/ ------El directorio de almacenamiento de archivos javabean
/tomcat/webapps/canyin/data/ -----directorio de almacenamiento de archivos xml
/tomcat/webapps/ROOT/ -----Carpeta de almacenamiento del archivo de inicio de Tomcat, solo se almacena el archivo index.html
Breve descripción del archivo:
/tomcat/webapps/canyin/data/users.xml -----Registrar información del usuario
/tomcat/webapps/canyin/data/restaurants.xml -----Registrar información básica de restaurantes
/tomcat/webapps/ROOT/index.html -----Página de inicio, aparece un cuadro de entrada en la página que requiere que el usuario ingrese un nombre de usuario y contraseña.
/tomcat/webapps/canyin/jsp/loginjudge.jsp -----Página de evaluación de identidad del usuario según el nombre de usuario y la contraseña, se decide si la página se transferirá al terminal de administración en segundo plano o al cliente front-end. . En este ejemplo, una vez que se confirma que la identidad del usuario tiene derechos de administración, puede ingresar al terminal de administración backend y saltar directamente a la página de administración de información básica del restaurante, simplificando el proceso de explicación.
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp -----Página de gestión de información básica del restaurante, gestiona el nombre, número de teléfono, dirección y otra información del restaurante
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class ----- El terminal de administración en segundo plano detecta el valor de la sesión que indica la identidad del usuario. Si no es un administrador, volverá al. página de inicio de sesión.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class -----Conectar archivo xml
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class -----Escribir archivo xml
Introducción detallada al archivo y descripción del código adjunto.
/tomcat/webapps/canyin/data/users.xml
Código:
<?xml versión="1.0" codificación="UTF-8" ?>
- <usuarios>
<nombre de usuario="joard" contraseña="joard" roles="admin" />
<nombre de usuario="joard01" contraseña="joard01" roles="usuario" />
<nombre de usuario="joard02" contraseña="joard02" roles="usuario" />
</usuarios>
Descripción: El significado de los campos es nombre de usuario, contraseña e identidad del usuario.
/tomcat/webapps/canyin/data/restaurants.xml
Código:
<?xml versión="1.0" codificación="UTF-8" ?>
- <restaurantes num="10">
- <id del restaurante="1">
<nombre>Restaurante de comida rápida Shanghai Ting</nombre>
<teléfono>021-76546726</teléfono>
<address>Torre B de Broadway Plaza</address>
</restaurante>
- <restaurante id="8">
<nombre>Hotel Shangri-La</nombre>
<teléfono>021-2312134</teléfono>
<dirección>No. 1023, calle Nanjing</dirección>
</restaurante>
</restaurantes>
Nota: El atributo <num> registra el número total de registros en el archivo restaurantes.xml. Cada vez que se agrega un nuevo registro, el valor aumentará en 1 independientemente de si se elimina más tarde, al igual que la identificación que se utiliza para. aumenta automáticamente en 1 en el elemento de la base de datos. Se utiliza para asignar un valor único al atributo <id> del <restaurante> recién agregado. El significado de otros campos es más obvio.
/tomcat/webapps/ROOT/index.html (código HTML puro)
Código:
<html>
<cabeza>
<title>Sistema de catering de OddWorld</title>
<meta http-equiv="Tipo de contenido" content="text/html; charset=gb2312">
</cabeza>
<body onload="javascript:dataform.username.focus()">
<div align="centro">
<table width="100%" border="0" cellspace="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"> Inicio de sesión en el sistema de catering </td>
<td><img src="images/top_r2.GIF" width="294" height="22"></td>
</tr>
</tabla>
<br>
<br>
<table width="300" border="0" cellspace="1" cellpadding="0" >
<tr>
<td altura="200" valign="superior" align="centro">
<p align="centro">
<table width="100%" border="0" cellspace="1" cellpadding="5" bgcolor=#999999 class=a9px>
<tr>
<td bgcolor="#efefef">Inicio de sesión en el sistema de catering</td>
</tr>
<tr>
<td bgcolor="#FFFFFF" valign="superior" align="centro">
<table width="100%" border="0" cellspace="0" cellpadding="0">
<nombre del formulario=método del formulario de datos=acción posterior=''canyin/jsp/loginjudge.jsp''>
<tr>
<td width="100"><b>Nombre de inicio de sesión:</b></td>
<td>
<longitud máxima de entrada=16
nombre="nombre de usuario" clase=stedit valor="joard">
</td>
</tr>
<tr>
<td width="100"><b>Contraseña:</b></td>
<td>
<clase de entrada=stedit longitud máxima=16
nombre="contraseña de usuario" tipo=contraseña valor="oddworld">
</td>
</tr>
</formulario>
</tabla>
<br>
<borde de la tabla = 0 relleno de celdas = 0 espacio entre celdas = 0>
<tcuerpo>
<tr>
<td>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" tipo=valor del botón="Iniciar sesión">
</td>
<td> </td>
<td>
<input class=stbtm name=Enviar onClick="javascript:window.location.href=''index.asp?myjoke=1'';" tipo=valor del botón="Cambiar contraseña">
</td>
<td> </td>
</tr>
</tbody>
</tabla>
<br>
</td>
</tr>
</tabla>
</td>
</tr>
</tabla>
</div>
</cuerpo>
</html>
<Idioma SCRIPT=javascript>
<!--
formulario de verificación de función()
{
var Cheque en blanco = /^(s*|( )|(.))*$/;
si (Checkblank.test(dataform.username.value))
{
alert("¡El nombre de inicio de sesión no puede estar vacío!");
devolver falso;
}
si (Checkblank.test(dataform.userpass.value))
{
alert("¡La contraseña no puede estar vacía!");
devolver falso;
}
ventana.dataform.submit();
}
-->
</SCRIPT>
Instrucciones: envíe el nombre de usuario y la contraseña de usuario a /tomcat/webapps/canyin/jsp/loginjudge.jsp
/tomcat/webapps/canyin/WEB-INF/classes/canyin/checkSessionBean.class (el código es el archivo java correspondiente)
paquete canyin;
importar javax.servlet.http.HttpSession;
importar javax.servlet.http.HttpServletRequest;
clase pública checkSessionBean {
booleano privado bolCheckPass=false;
solicitud HttpServletRequest privada = nula;
checkSessionBean booleano público (solicitud HttpServletRequest, cadena strSessionName, cadena strCheckValue) {
checkSessionBean booleano público (solicitud HttpServletRequest) {
Sesión HttpSession = request.getSession(false);
retorno(bolCheckPass);
if (strSessionName==null || strCheckValue==null){
retorno(bolCheckPass);
}demás{
if (sesión!=null && session.getValue(strSessionName)!=null){
bolCheckPass=session.getValue(strSessionName).equals(strCheckValue);
}
retorno(bolCheckPass);
}
}
}
Descripción: compruebe si el valor del nombre de la sesión pasado como parámetro y el valor del campo pasado como parámetro son iguales.
/tomcat/webapps/canyin/WEB-INF/classes/canyin/connXmlBean.class
Código:
paquete canyin;
importar javax.xml.parsers.*;
importar javax.xml.transform.*;
importar javax.xml.transform.dom.DOMSource;
importar javax.xml.transform.stream.StreamResult;
importar org.w3c.dom.*;
clase pública connXmlBean {
fábrica privada de DocumentBuilderFactory = nulo;
constructor de DocumentBuilder privado = nulo;
Documento privado doc=null;
conexión públicaXmlBean(){}
cadena pública connXml(String xmlFileName){
Cadena strExc="";
intentar{
fábrica = DocumentBuilderFactory.newInstance();
constructor=factory.newDocumentBuilder();
doc=builder.parse(xmlFileName);
doc.normalizar();
}catch(Excepción e){
strExc=e.toString();
}
retorno(cadenaExc);
}
Documento público getXmlDoc(){
retorno(doc);
}
}
Descripción: abre un archivo xml especificado
/tomcat/webapps/canyin/WEB-INF/classes/canyin/writeXmlBean.class
Código:
paquete canyin;
importar javax.xml.parsers.*;
importar javax.xml.transform.*;
importar javax.xml.transform.dom.DOMSource;
importar javax.xml.transform.stream.StreamResult;
importar java.io.File;
importar org.w3c.dom.*;
clase pública writeXmlBean {
escritura públicaXmlBean(){}
cadena pública writeXml (documento doc, cadena xmlFileName) {
Cadena strExc="";
intentar{
TransformerFactory tfactory = TransformerFactory.newInstance();
Transformador transformador = tfactory.newTransformer();
Fuente DOMSource = nueva DOMSource(doc);
Resultado de StreamResult = nuevo StreamResult (nuevo archivo (xmlFileName));
transformador.transformar(fuente,resultado);
}catch(Excepción e){
strExc=e.toString();
}
retorno(cadenaExc);
}
}
Descripción: escribe el contenido de dom en un archivo xml específico.
/tomcat/webapps/canyin/jsp/loginjudge.jsp
Código:
<%-- oddWorld Catering Management System (versión en chino simplificado) 1 de diciembre de 2002
copia derecha por joard ast
Función loginjudge.jsp: verificación de identidad del usuario, basada en las diferentes identidades de los usuarios marcados en el archivo /data/user.xml
Decida ir a la página de administración de backend o a la página de pedidos del cliente.
--%>
<%@ página contentType="text/html;charset=gb2312" %>
<%@ idioma de la página="java" import="javax.xml.parsers.*" %>
<%@ página import="org.w3c.dom.*" %>
<%@ página import="canyin.*" %>
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" alcance="página" />
<%
sesión.setMaxInactiveInterval(1800);
Documento de documento;
Usuarios de la lista de nodos;
Cadena strExc="";
Cadena strNombre de usuario, strContraseña;
strUsername=(String)request.getParameter("nombre de usuario");
strPassword=(String)request.getParameter("contraseña de usuario");
//Comprueba si los datos están vacíos
if (strNombre de usuario=="" || strContraseña=="" ){
out.println("<lenguaje de escritura=''javascript''>");
out.println("alert(''¡El nombre de usuario o la contraseña tienen un valor nulo!'');");
out.println("window.location.href=''/index.html'';");
out.println("</script>");
devolver;
}
xmlBean.connXml("webapps/canyin/data/users.xml");
doc=xmlBean.getXmlDoc();
intentar{
usuarios =doc.getElementsByTagName("usuario");
para (int i=0;i<usuarios.getLength();i++){
Elemento usuario=(Elemento) usuarios.item(i);
String strAtrNameValue=user.getAttributeNode("nombre").getNodeValue();
String strAtrPassWordValue=user.getAttributeNode("contraseña").getNodeValue();
String strAtrRoleValue=user.getAttributeNode("roles").getNodeValue();
if (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strContraseña)){
si (strAtrRoleValue.equals("admin")){
out.println("<lenguaje de escritura=''javascript''>");
out.println("alert(''¡Bienvenido administrador para iniciar sesión en el sistema!'');");
out.println("</script>");
//Establece la sesión (sesUserRole) indicando la identidad del usuario, y la identidad del administrador es admin
session.setAttribute("sesUserRole","admin");
//Saltar a la página de administración
respuesta.sendRedirect("admin/admin_rest.jsp");
devolver;
}demás{
//Establece la sesión (sesUserRole) indicando la identidad del usuario, y la identidad del administrador es usuario
session.setAttribute("sesUserRole","usuario");
//Saltar a la página de usuario normal
respuesta.sendRedirect("index.jsp");
devolver;
}
}demás{
out.println("<lenguaje de escritura=''javascript''>");
out.println("alert(''¡Nombre de usuario o contraseña incorrectos!'');");
out.println("historia.go(-1);");
out.println("</script>");
devolver;
}
}
}catch(Excepción e){
strExc=e.toString();
}
%>
ilustrar:.......
/tomcat/webapps/canyin/jsp/admin/admin_rest.jsp
Código:
<%-- oddWorld Catering Management System (versión en chino simplificado) 1 de diciembre de 2002
copia derecha por joard ast
Función admin_rest.jsp: página de administración de backend, página de administración de restaurante.
--%>
<%@ página contentType="text/html;charset=gb2312" %>
<%@ idioma de la página="java" import="javax.xml.parsers.*" %>
<%@ página import="javax.xml.transform.*" %>
<%@ página import="org.w3c.dom.*" %>
<%@ página import="canyin.*" %>
<%@ incluir archivo="../../include/sys_dialog.jsp" %>
<jsp:useBean id="checkSessionBean" class="canyin.checkSessionBean" alcance="página" />
<jsp:useBean id="xmlBean" class="canyin.connXmlBean" alcance="página" />
<jsp:useBean id="writeXmlBean" class="canyin.writeXmlBean" alcance="página" />
<%//Verificar la identidad del usuario para determinar si es administrador
if(!checkSessionBean.checkSessionBean(solicitud,"sesUserRole","admin")){
out.print(showDialog("¡No tienes derechos administrativos!","/index.html"));
devolver;
}
//Obtener datos relevantes del archivo de información del restaurante rest.xml
Documento de documento;
restaurantes NodeList;
Cadena de cadena;
int intId=0;
Cadena strOperation="mostrar";
//Aceptar parámetros externos pasados
strAct=(String)request.getParameter("actuar");
xmlBean.connXml("webapps/canyin/data/restaurants.xml");
doc=xmlBean.getXmlDoc();
restaurantes =doc.getElementsByTagName("restaurante");
//Determina el funcionamiento del archivo restaurant.xml en función de los parámetros externos pasados
si (straAct!=null){
if(strAct.equals("addnewDo")){
Cadena strName;
Cadena strPhone;
Cadena strAddress;
Texto textseg;
strName=(String)request.getParameter("nombre").trim();
strPhone=(String)request.getParameter("teléfono").trim();
strAddress=(String)request.getParameter("dirección").trim();
//verificación de datos
si(cadenaNombre==nulo){
out.print(showDialog("¡El nombre del restaurante no puede estar vacío!"));
devolver;
}
si(strPhone==nulo){
out.print(showDialog("¡El número de teléfono del restaurante no puede estar vacío!"));
devolver;
}
/*if(strDirección==null){
out.print(showDialog("¡La dirección del restaurante no puede estar vacía!"));
devolver;
}*/
//Verificar la unicidad de los datos
for(int i=0;i<restaurantes.getLength();i++){
Elemento restaurante=(Elemento) restaurantes.item(i);
if(((String)restaurant.getElementsByTagName("nombre").item(0).getFirstChild().getNodeValue()).equals(strName)){
out.print(showDialog("¡Nombre de restaurante duplicado!"));
devolver;
}demás{
if(((String)restaurant.getElementsByTagName("nombre").item(0).getFirstChild().getNodeValue()).equals(strPhone)){
out.print(showDialog("¡Repita el número de teléfono del restaurante!"));
devolver;
}
}
}
//Obtiene la cantidad de registros existentes y establece un atributo de identificación incremental único para el nuevo registro de restaurante
int númeroint=0;
Elemento restNum=(Element)doc.getElementsByTagName("restaurantes").item(0);
intNum=Integer.parseInt(restNum.getAttributeNode("num").getNodeValue());
númeroint+=1;
//Suma 1 al valor del atributo del restaurante num
restNum.getAttributeNode("num").setNodeValue(String.valueOf(intNum));
//Agregar nodo
Elemento newRestaurant=doc.createElement("restaurante");
Attr newArrId=doc.createAttribute("id");
//Atributo newArrId = nuevo Atributo("id",String.valueOf(intNum));
textseg=doc.createTextNode(String.valueOf(intNum));
newArrId.setValue(String.valueOf(intNum));
newRestaurant.setAttributeNode(newArrId);
Elemento newName=doc.createElement("nombre");
textseg=doc.createTextNode(strName);
nuevoNombre.appendChild(textseg);
nuevoRestaurante.appendChild(nuevoNombre);
Elemento newPhone=doc.createElement("teléfono");
textseg=doc.createTextNode(strPhone);
newPhone.appendChild(textseg);
nuevoRestaurante.appendChild(nuevoTeléfono);
Elemento newAddress=doc.createElement("dirección");
textseg=doc.createTextNode(strAddress);
nuevaAddress.appendChild(textseg);
nuevoRestaurante.appendChild(nuevaDirección);
doc.getDocumentElement().appendChild(nuevoRestaurante);
//Llama al bean para escribir el archivo xml correspondiente
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
respuesta.sendRedirect(request.getRequestURI());
devolver;
}
if(strAct.equals("modiDo")){
Cadena strName;
Cadena strPhone;
Cadena strAddress;
Texto textseg;
int modificado;
// Registre qué elemento (i) es el registro a modificar
int intI=0;
strName=(String)request.getParameter("nombre").trim();
strPhone=(String)request.getParameter("teléfono").trim();
strAddress=(String)request.getParameter("dirección").trim();
modiId=Integer.parseInt(request.getParameter("recordId").trim());
//verificación de datos
si(cadenaNombre==nulo){
out.print(showDialog("¡El nombre del restaurante no puede estar vacío!"));
devolver;
}
si(strPhone==nulo){
out.print(showDialog("¡El número de teléfono del restaurante no puede estar vacío!"));
devolver;
}
si(modiId==0){
out.print(showDialog("¡El registro del restaurante que desea modificar no existe!"));
devolver;
}
/*if(strDirección==null){
out.print(showDialog("¡La dirección del restaurante no puede estar vacía!"));
devolver;
}*/
// La bandera muestra que el registro existe
registro booleanoExist=false;
//Verificar la unicidad de los datos
for(int i=0;i<restaurantes.getLength();i++){
Elemento restaurante=(Elemento) restaurantes.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==modiId){
recordExist=verdadero;
intI=i;
}
if(((String)restaurant.getElementsByTagName("nombre").item(0).getFirstChild().getNodeValue()).equals(strName) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("¡Nombre de restaurante duplicado!"));
devolver;
}demás{
if(((String)restaurant.getElementsByTagName("nombre").item(0).getFirstChild().getNodeValue()).equals(strPhone) && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue() )!=modiId ){
out.print(showDialog("¡Repita el número de teléfono del restaurante!"));
devolver;
}
}
}
si(!recordExist){
out.print(showDialog("¡El registro del restaurante que desea modificar no existe!"));
devolver;
}demás{
//Realizar cambios de registro
intentar{
Elemento modiRestaurant=(Elemento) restaurantes.item(intI);
modiRestaurant.getElementsByTagName("nombre").item(0).getFirstChild().setNodeValue(strName);
modiRestaurant.getElementsByTagName("teléfono").item(0).getFirstChild().setNodeValue(strPhone);
modiRestaurant.getElementsByTagName("dirección").item(0).getFirstChild().setNodeValue(strAddress);
//Llama al bean para escribir el archivo xml correspondiente
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
respuesta.sendRedirect(request.getRequestURI());
devolver;
}captura(Excepción e){}
}
}
//Realizar operación de eliminación
si(strAct.equals("del")){
int delId;
// Registre qué elemento (i) es el registro a modificar
int intI=0;
delId=Integer.parseInt(request.getParameter("recordId").trim());
si(delId==0){
out.print(showDialog("¡El registro del restaurante que desea modificar no existe!"));
devolver;
}
El indicador file:// muestra que el registro existe.
registro booleanoExist=false;
//Verificar la unicidad de los datos
for(int i=0;i<restaurantes.getLength();i++){
Elemento restaurante=(Elemento) restaurantes.item(i);
if(Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==delId){
recordExist=verdadero;
intI=i;
}
}
si(!recordExist){
out.print(showDialog("¡El registro del restaurante que desea eliminar no existe!"));
devolver;
}demás{
//Realizar operación de eliminación de registros
intentar{
Nodo delNodo=(Nodo)restaurantes.item(intI);
doc.getElementsByTagName("restaurantes").item(0).removeChild(delNode);
//Llama al bean para escribir el archivo xml correspondiente
writeXmlBean.writeXml(doc,"webapps/canyin/data/restaurants.xml");
respuesta.sendRedirect(request.getRequestURI());
devolver;
}captura(Excepción e){}
}
}
}
// El estado de procesamiento correspondiente de la página está determinado por parámetros externos.
si (strAct==nulo){
strOperación="mostrar";
}demás{
si (strAct.equals("modi")){
strOperación="modi";
intId=Integer.parseInt(request.getParameter("recordId"));
}demás{
if(strAct.equals("agregarnuevo")){
strOperación="añadirnuevo";
}demás{
strOperación="mostrar";
}
}
}
//Si el registro está vacío, cambia el estado de la página a "Nuevo"
si (restaurantes.getLength()==0){
strOperación="añadirnuevo";
}
%>
<html>
<cabeza>
<title>Sistema de catering de OddWorld</title>
<meta http-equiv="Tipo de contenido" content="text/html; charset=gb2312">
<meta http-equiv="caduca" contenido="0">
<enlace rel="hoja de estilo" href="../../include/itsp.css" type="text/css">
</cabeza>
<cuerpo>
<div align="centro">
<table width="100%" border="0" cellspace="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"> Gestión de sistemas de catering - gestión de restaurantes</td>
<td><img src="../../images/top_r2.GIF" width="294" height="22"></td>
<td width=100 align="center"><a href="/index.html">[Salir del sistema]</a></td>
</tr>
</tabla>
<br>
<br>
<table bgcolor="#999999" align=center border=0 cellpadding=1 cellspace=1
ancho="90%">
<tcuerpo>
<tr bgcolor="#efefef" align="centro" valign="medio">
<td class=ttAltura de la tabla=30 ancho="20"> </td>
<td class=ttAltura de la tabla=30 ancho="0">Nombre del restaurante</td>
<td class=ttTable height=30 width="0">Número de teléfono del restaurante</td>
<td class=ttAltura de la tabla=30 ancho="0">
<div align="center">Dirección del restaurante</div>
</td>
<td class=ttAltura de la tabla=30 ancho="30">
<div align="center">Modificar</div>
</td>
<td class=ttAltura de la tabla=30 ancho="30">
<div align="center">Eliminar</div>
</td>
</tr>
<%
for(int i=0;i<restaurantes.getLength();i++)
{
Elemento restaurante=(Elemento) restaurantes.item(i);
if (strOperation=="modi" && Integer.parseInt(restaurant.getAttributeNode("id").getNodeValue())==intId){
%>
<%//Mostrar formato modificado%>
<tr align="centro" bgcolor="#ffffff" valign="medio">
<form name=dataform action="<%=request.getRequestURI()%>?act=modiDo" método="post" onSubmit=''return checkform(this);'' >
<td clase=tdpequeño alto=25 ancho="20">
<input type="hidden" name="recordId" value="<%=restaurant.getAttributeNode("id").getNodeValue()%>">
<%=(i+1)%></td>
<td clase=tdpequeña altura=25>
<nombre de entrada="nombre" clase=stedit
style="ALTO: 22px; ANCHO: 150px" value="<%if(restaurant.getElementsByTagName("nombre").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("nombre").item(0).getFirstChild().getNodeValue());
}%>
"maxlength="40" >
</td>
<td clase=tdpequeña altura=25>
<nombre de entrada="teléfono" clase=stedit
style="ALTO: 22px; ANCHO: 100px" value="<%if(restaurant.getElementsByTagName("teléfono").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("teléfono").item(0).getFirstChild().getNodeValue());
}%>" maxlength="20" >
</td>
<td clase=tdpequeña altura=25>
<nombre de entrada="dirección" clase=stedit
estilo="ALTO: 22px; ANCHO: 200px" valor="<%
if(restaurant.getElementsByTagName("dirección").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("dirección").item(0).getFirstChild().getNodeValue());
}%>" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform()==false);"><img border=0
altura=15 src="../../images/editok.gif" ancho=15></a></td>
<td clase=tdpequeño alto=25 ancho="25"> </td>
</formulario>
</tr>
<% }más{
//Mostrar formato normal %>
<tr align="centro" bgcolor="#ffffff" valign="medio">
<td clase=tdpequeño alto=25 ancho="20"><%=(i+1)%></td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("name").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("nombre").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="0"><%if(restaurant.getElementsByTagName("phone").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("teléfono").item(0).getFirstChild().getNodeValue());
}%></td>
<td clase=tdpequeño alto=25 ancho="0">
<%
if(restaurant.getElementsByTagName("dirección").item(0).hasChildNodes()){
out.print(restaurant.getElementsByTagName("dirección").item(0).getFirstChild().getNodeValue());
}%>
</td>
<td class=tdsmall height=25 width="30"><a href="<%=request.getRequestURI()%>?act=modi&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()% >"><img borde=0
altura=15 src="../../images/edit.gif" ancho=15></a></td>
<td class=tdsmall altura=25 ancho="30"><img border=0
altura=15
onClick="javascript:if(confirm(''¿Está seguro de eliminar este registro? ¿La eliminación dejará el registro inutilizable?'')){window.location.href=''<%=request.getRequestURI()%>? act=del&recordId=<%=restaurant.getAttributeNode("id").getNodeValue()%>'';}"
src="../../images/delete.gif" style="CURSOR: mano" width=15> </td>
</tr>
<%}
}%>
<% si (strOperación=="añadirnuevo"){
//Mostrar el nuevo formato%>
<tr align="centro" bgcolor="#ffffff" valign="medio">
<form name=dataform2 action="<%=request.getRequestURI()%>?act=addnewDo" método="post" onSubmit=''return checkform2(this);'' >
<td clase=tdpequeño alto=25 ancho="20"></td>
<td clase=tdpequeña altura=25>
<nombre de entrada="nombre" clase=stedit
estilo="ALTO: 22px; ANCHO: 150px" valor="" maxlength="40" >
</td>
<td clase=tdpequeña altura=25>
<nombre de entrada="teléfono" clase=stedit
estilo="ALTO: 22px; ANCHO: 100px" valor="" maxlength="20" >
</td>
<td clase=tdpequeña altura=25>
<nombre de entrada="dirección" clase=stedit
estilo="ALTO: 22px; ANCHO: 200px" valor="" maxlength="100" >
</td>
<td class=tdsmall height=25 width="25"><a href="javascript:if (checkform2()==false);"><img border=0
altura=15 src="../../images/editok.gif" ancho=15></a></td>
<td clase=tdpequeño alto=25 ancho="25"> </td>
</formulario>
</tr>
<% } %>
</tbody>
</tabla>
<br>
<table align=center border=0 cellpadding=0 cellspaceing=2 width="95%">
<tcuerpo>
<tr valign=centro>
<td align=middle> <br>
<borde de la tabla = 0 relleno de celdas = 0 espacio entre celdas = 0>
<tr>
<td>
<% si (strOperación=="añadirnuevo"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform2()==false);" tipo=button value="Actualizar registro">
<% }más{
if(strOperación=="modi"){
%>
<input class=stbtm name=update onClick="javascript:if (checkform()==false);" tipo=button value="Actualizar registro">
<%
}demás{
%>
<input class=stbtm type="botón" nombre="Botón" valor="Nuevo" onClick="javascript:window.location.href=''<%=request.getRequestURI()%>?act=addnew''; "><%
}
}%>
</td>
<td>
<input class=stbtm type="botón" nombre="Botón" valor="Retorno" onClick="javascript:window.location.href=''index.jsp'';">
</td>
</tr>
</tabla>
</td>
</tr>
</tabla>
<p> </p>
</div>
</cuerpo>
</html>
<IDIOMA DE ESCRITURA=javascript>
<!--
función formulario de verificación2()
{
var Cheque en blanco = /^(s*|( )|(.))*$/;
si (Checkblank.test(dataform2.name.value))
{
alert("¡El nombre del restaurante no puede estar vacío!");
formulario de datos2.nombre.enfoque();
devolver falso;
}
si (Checkblank.test(dataform2.phone.value))
{
alert("¡El número de teléfono del restaurante no puede estar vacío!");
formulario de datos2.phone.focus();
devolver falso;
}
ventana.dataform2.submit();
}
formulario de verificación de función()
{
var Cheque en blanco = /^(s*|( )|(.))*$/;
si (Checkblank.test(dataform.name.value))
{
alert("¡El nombre del restaurante no puede estar vacío!");
formulario de datos.nombre.enfoque();
devolver falso;
}
si (Checkblank.test(dataform.phone.value))
{
alert("¡El número de teléfono del restaurante no puede estar vacío!");
formulario de datos.teléfono.focus();
devolver falso;
}
ventana.dataform.submit();
}
-->
</SCRIPT>
Nota: La redacción de este documento no es concisa en muchos lugares, porque en el proceso de desarrollo del programa, los programas demasiado concisos a menudo traen dificultades en el mantenimiento posterior.
Experiencia de desarrollo:
El valor de retorno de doc.getElementsByTagName("restaurants").item(int i) es de tipo nodo. Si no desea llamar a su valor de atributo, no es necesario convertirlo al tipo de Elemento. Se puede operar directamente. Debido a errores en los materiales de referencia de desarrollo, este sistema utiliza transformación forzada. Puede considerar utilizar el nodo para operar directamente en desarrollos futuros.
Ni las funciones trim() ni Interger.parseInt() aceptan valores nulos.
Los archivos izquierdo y derecho en Tomcat son directorios que comienzan desde TOMCAT. Para obtener más información, consulte webappscanyinjspuserjudge.jsp para escribir la ruta xml.
Amigos que estén interesados en el código original por favor contácteme a través de la siguiente dirección de correo electrónico, [email protected]