Un ejemplo de desarrollo usando JSP + JAVABEAN + XML
Autor:Eve ColeFecha 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:
-
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:
- - Restaurante de comida rápida Shanghai Ting 021-76546726 Torre B de Broadway Plaza
- Hotel Shangri-La 021-2312134 No. 1023, calle Nanjing
Nota: El atributo 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 del recién agregado. El significado de otros campos es más obvio. /tomcat/webapps/ROOT/index.html (código HTML puro)
Código:
Sistema de catering de OddWorld
Inicio de sesión en el sistema de catering
Inicio de sesión en el sistema de catering
Nombre de inicio de sesión:
nombre="nombre de usuario" clase=stedit valor="joard">
Contraseña:
nombre="contraseña de usuario" tipo=contraseña valor="oddworld">
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)
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.*" %>
<% 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(""); out.println("alert(''¡El nombre de usuario o la contraseña tienen un valor nulo!'');"); out.println("window.location.href=''/index.html'';"); out.println(""); devolver; }
if (strAtrNameValue.equals(strUsername) && strAtrPassWordValue.equals(strContraseña)){
si (strAtrRoleValue.equals("admin")){ out.println(""); out.println("alert(''¡Bienvenido administrador para iniciar sesión en el sistema!'');"); out.println("");
//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(""); out.println("alert(''¡Nombre de usuario o contraseña incorrectos!'');"); out.println("historia.go(-1);"); out.println(""); devolver; }
<%//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";
//Determina el funcionamiento del archivo restaurant.xml en función de los parámetros externos pasados si (straAct!=null){ if(strAct.equals("addnewDo")){
//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 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));
//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;
//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 Elemento restaurante=(Elemento) restaurantes.item(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");
}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;
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);
// 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"; } %>
Sistema de catering de OddWorld
Gestión de sistemas de catering - gestión de restaurantes
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>
<%} }%> <% si (strOperación=="añadirnuevo"){ //Mostrar el nuevo formato%>
<% } %>
<% si (strOperación=="añadirnuevo"){ %>
<% }más{ if(strOperación=="modi"){ %>
<% }demás{ %> <% } }%>
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]