Una colección de errores cometidos en el desarrollo de aplicaciones WEB JSP (más puntos, el plagio está estrictamente prohibido)
Problema de ejecución: ejecutando Hola
Si ve el siguiente mensaje de error:
'java' no ha sido reconocido como un comando interno o externo,...
o
java:
Entonces tal vez no tengas Java instalado, o Java no esté configurado en tu variables de entorno \bin ruta del directorio. Verifique su instalación de Java y configure las variables de entorno correctamente.
Si ve:
Excepción en el hilo "principal" java.lang.NoClassDefFoundError: hola
(nombre incorrecto: Hola)... p >
Entonces lo más probable es que no hayas prestado atención a las mayúsculas o hayas escrito letras incorrectas en el nombre. Por ejemplo,
java hola
Ingrese el comando correcto y vuelva a ejecutarlo.
Si ve:
Excepción en el hilo "principal" java.lang.NoClassDefFoundError: Hola
/class
Entonces considere eliminando la parte .class del nombre.
2. Analice las circunstancias específicas de la excepción java.lang.NoClassDefFoundError
Este problema ocurrió al depurar la primera rutina anterior, pero si el nombre que ingresamos es correcto, pero ¿qué debería hacer? ¿Qué hago cuando este problema todavía aparece?
La versión 1.4.0 de JDK está instalada y JAVA_HOME, PATH y CLASSPATH están configurados.
JAVA_HOME=/home/jdk
CLASSPATH=$JAVA_HOME/jre/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/jre/lib/: $JAVA_HOME/lib
PATH=$PATH:$JAVA_HOME/bin
Utilice el comando JAVAC para generar hola Cuando utilice el comando JAVAC para generar hello.class, cuando utilice java hello. , todavía Consejos:
Se produjo una excepción java.lang.NoClassDefFoundError en el hilo "principal": XXX (nombre de error:
XXX)
Consejos de solución: p >
(1), agregue (directorio actual) a la ruta de clase o agregue público antes de la definición de clase
(2), si hay otro archivo java.exe en la ruta establecida por variable de entorno de ruta, java.exe se ejecuta en este directorio de forma predeterminada. Aunque la versión y JDK están en java.exe, se producirá un error cuando se ejecute en este directorio.
Método:
Si se ha instalado el JDK, debe eliminar java.exe en winnt y asegurarse de que el java.exe predeterminado esté ubicado en java.exe en el directorio bin de el jdk.
(3) Si utiliza el paquete
, compruebe si ha compilado el paquete especificado en el archivo.
3. Captura y manejo de excepciones comunes:
Una breve introducción a varias excepciones básicas en JAVA:
Excepción aritmética (ArithmeticException) Cuando ocurre una condición aritmética anormal Ocurre
NullPointerException) Ocurre cuando una aplicación intenta usar un objeto que necesita ser nulo
ArrayIndexOutOfBoundsException) Ocurre cuando una aplicación intenta Lanzar cuando se almacena el tipo incorrecto de datos en un array
ArrayStoreException Se lanza cuando una aplicación intenta acceder a un archivo que no existe
FileNotFoundException.
IOException es causada por una falla general de E/S y se genera cuando falla la conversión de cadena a datos numéricos
OutOfMemoryException se genera cuando no hay suficiente memoria
SecurityException se lanza cuando el subprograma se lanza al intentar realizar una operación que no está permitida por la configuración de seguridad del navegador
StrutsException
StackOverflowException se lanza cuando el sistema se queda sin espacio en la pila
StringIndexOutOfBoundsException cuando un programa intenta acceder a una cadena Ocurre cuando la posición del carácter no existe en
Las excepciones anteriores son básicamente las excepciones que podemos encontrar en JAVA.
La clase Throwable tiene dos subclases directas: Java proporciona dos modos de excepción, uno es una excepción generada durante la ejecución (excepción de tiempo de ejecución) y el otro es una excepción controlada. Java proporciona dos modos de excepción, uno es una excepción generada durante la ejecución (Runtime Exception) y el otro es una excepción controlada (Checked Exception). Todas las excepciones marcadas heredan de java.lang.Exception, mientras que las excepciones de tiempo de ejecución heredan de java.lang.RuntimeException o java.lang.Error (en realidad, una capa por encima de java.lang.RuntimeException). RuntimeException también está precedida por java.lang.Exception). Tiene varias subclases correspondientes a diferentes tipos de excepciones. Una de las clases, RuntimeException, representa una excepción de tiempo de ejecución generada por la máquina virtual Java.
Runtime Exception y Checked Exception no son lo mismo en la forma en que se ejecuta el programa. Lógicamente hablando, Runtime Exception y Checked Exception también son diferentes en el propósito de uso.
En términos generales, la excepción marcada significa que esta excepción debe ser manejada, es decir, el programador ya debe saber que se puede recibir una excepción (porque intenta detectarla), por lo que el programador debe ser diferente. Las excepciones marcadas se pueden manejar de manera diferente.
Las excepciones en tiempo de ejecución generalmente significan errores de programa que el programador no puede manejar y el programa no puede continuar ejecutándose.
El manejo controlado de excepciones de Java se completa mediante cinco palabras clave: try, catch, throw, throws y finalmente. Estas cinco palabras clave se explican en la ayuda en línea de JB:
Lanzamientos: enumera las excepciones que pueden. ser lanzado por el método: transferir el control del método al controlador de excepciones.
Intente: active las declaraciones de manejo de excepciones.
Catch: excepción de captura:
Finalmente:
declaración -try
La declaración try usa llaves {} para especificar una pieza del código. El código puede generar una o más excepciones.
declaración -catch
Los parámetros de la declaración catch son similares a la declaración del método, incluidos los tipos de excepción y los objetos de excepción. El tipo de excepción debe ser una subclase de la clase Throwable, que especifica el tipo de excepción manejado por la declaración catch. El objeto de excepción es generado por el sistema de ejecución y capturado en el bloque de código especificado por try. objeto. En este código, los métodos de objeto se pueden llamar dentro de bloques.
Una declaración catch puede tener múltiples excepciones para manejar diferentes categorías. El sistema de ejecución de Java verificará el tipo de excepción manejada por cada declaración catch de arriba a abajo hasta que se encuentre una declaración catch coincidente. Aquí, la coincidencia de tipos significa que el tipo de excepción manejado por catch es exactamente el mismo que el tipo del objeto de excepción generado o su superclase, por lo que las declaraciones catch deben ordenarse de especial a general.
También puede utilizar una declaración catch para manejar múltiples tipos de excepción. El parámetro de tipo de excepción debe ser la clase principal de múltiples tipos de excepción. El programa debe elegir el tipo de excepción de la declaración catch de acuerdo con la situación específica. .
- declaración finalmente
Cuando se lanza una excepción en el código calificado por prueba, el código posterior no se ejecutará. La declaración finalmente puede especificar un bloque de código. Independientemente de si la excepción se descarta en el bloque de código especificado por try y de si el tipo de excepción en la declaración catch es consistente con el tipo de excepción descartado, se ejecutará el código especificado por finalmente, que proporciona un método de salida unificado; Normalmente, la limpieza de recursos se puede realizar en una declaración final. Por ejemplo, cerrar archivos abiertos, etc. Independientemente de si ocurre una excepción, se ejecutará la declaración finalmente.
- instrucción throws
throws siempre aparece en el encabezado de la función y se usa para marcar varias excepciones que puede generar la función miembro. Para la mayoría de las subclases de excepción, el compilador de Java le obliga a declarar el tipo de excepción generada en la función miembro. Esta regla no tiene efecto si el tipo de excepción es Error o RuntimeException o una de sus subclases, porque la parte normal del programa no espera que esto suceda. Si desea lanzar una RuntimeException explícitamente, debe declarar su tipo mediante la declaración throws.
- instrucción throw
throw siempre aparece en el cuerpo de la función y se usa para lanzar excepciones. El programa termina inmediatamente después de la declaración throw, sin ejecutar las declaraciones posteriores, y luego busca un bloque try que contenga una cláusula catch que coincida con ella en todos los bloques try que lo contienen (y posiblemente en la función de llamada encima de él). Todos los métodos utilizan una declaración "throw" para lanzar excepciones; la declaración throw requiere un único objeto throwable que sea una subclase de cualquier clase Throwable.
Por ejemplo:
boolean testEx() arroja una excepción{
boolean ret = true;
prueba
{
ret = testEx1();
}
captura (Excepción e)
{
Sistema .out.println("testEx, captura de excepción");
ret = false
throw e; finalmente
{
System.out.println("testEx, finalmente; return value=" ret
return ret; > }
}
4.Error de JAVA: java.lang.testEx1()().
Causa:
1. Los recursos externos a los que accede el sistema no están cerrados, lo que genera una gran cantidad de desperdicio de recursos externos, lo que eventualmente puede provocar que el sistema no funcione. normalmente;
2. Los recursos externos a los que accede el sistema se cierran demasiadas veces y el sistema externo no puede manejarlos normalmente;
3. anormal.
Solución:
1. Antes de acceder a recursos externos, primero verifique si los recursos (como las bases de datos) se pueden conectar u operar normalmente.
2. Al acceder a recursos externos, si se ha establecido una conexión, asegúrese de realizar una operación de apagado y solo realice la operación de apagado una vez.
3. Intentar disfrutar de recursos externos en la misma operación tanto como sea posible para reducir el consumo de recursos por parte de la operación y mejorar la eficiencia de ejecución del programa.
5. En el proceso de acceso a recursos externos, debemos hacer todo lo posible para disfrutar de recursos externos en la misma operación para reducir el consumo de recursos por parte de la operación y mejorar la eficiencia de ejecución del programa. Error de puntero nulo: java.lang.NullPointerException
Cuando se utilizan tipos de datos JAVA básicos, el valor de la variable ya es el valor predeterminado. Si no se le asigna un valor, el programa no se compilará, por lo que. El uso de tipos de datos JAVA básicos (double, float, boolean, char, int, long) generalmente no causa una excepción de puntero nulo. Como puede ver, NullPointerException está relacionada principalmente con operaciones sobre objetos.
La siguiente es una lista de situaciones en las que puede ocurrir una excepción de puntero nulo y las soluciones correspondientes:
No importa si el objeto es nulo, siempre y cuando comiences a usarlo. él.
Segmento de código (JSP) 1:
out.println(request.getParameter("username"));
Descripción:
El segmento de código 1 es muy simple: genera el valor del campo "nombre de usuario" de la tabla de entrada del usuario.
Descripción:
La declaración anterior no parece tener ningún error gramatical y no encontrará ningún problema en la mayoría de los casos. Sin embargo, si el usuario no proporciona un valor para el campo del formulario "nombre de usuario" al ingresar datos, o de alguna manera omite el formulario y lo ingresa directamente, el valor de request.getParameter("nombre de usuario") estará vacío (no una cadena vacía). , pero es un objeto vacío (nulo). El método println del objeto out no puede operar directamente en el objeto nulo, por lo que la página JSP donde se encuentra el fragmento de código 1 generará una excepción "java.lang.NullPointerException".
Aunque el objeto puede ser nulo, algunos métodos (como toString(), equals(Object obj), etc.) se llamarán en la excepción java.lang.NullPointerException.
Fragmento de código (JSP) 2:
String userName = request.getParameter("username");
If (userName.equals("root")); )
{....}
Explicación:
La función del segmento de código 2 es detectar el nombre de usuario proporcionado por el usuario. El nombre es usuario "root", realice ciertas operaciones especiales.
Nota:
En el fragmento de código 2, si el usuario no proporciona un valor para el campo del formulario "nombre de usuario", el objeto de cadena nombre de usuario es un valor nulo y el valor nulo El objeto no se puede usar directamente con Se compara otro objeto, por lo que la página JSP donde se encuentra el fragmento de código 2 arrojará nuevamente un error de puntero nulo (java.lang.NullPointerException).
Fragmento de código (JSP) 3:
String userName = session.getAttribute("session.username").toString();
Descripción.session. El valor del nombre de usuario se genera y se asigna al objeto de cadena nombre de usuario.
Descripción:
En general, si el usuario ya está participando en una sesión específica, esto no será un problema, sin embargo, si el servidor de aplicaciones se reinicia en este momento, y el usuario no ha vuelto a iniciar sesión (o es posible que el usuario haya cerrado el navegador pero aún tenía abierta la página original). En este punto, el valor de la sesión no será válido y el valor de session.username en la sesión estará vacío. La ejecución directa de la operación toString() en un objeto nulo hará que el sistema genere una excepción de puntero nulo (java.lang.NullPointerException).
Solución:
Para garantizar que el objeto que se manipula o al que se hace referencia no sea un objeto nulo, si queremos operar o hacer referencia a un objeto, primero verificaremos si el objeto se ha creado una instancia y no es un objeto nulo; luego agregaremos un controlador del sistema para manejar cuando el objeto sea nulo;
Por ejemplo: use un objeto de cadena para guardar los resultados enviados por el usuario; en operaciones que involucran el objeto, primero verifique si el objeto está vacío y luego, después de verificar que el objeto está vacío, puede elegir. para realizar cualquiera de las siguientes operaciones:
Procesamiento 1) Cuando el objeto está vacío, establezca el valor del objeto en una cadena vacía o un valor predeterminado
Procesamiento 2) Cuando el objeto; está vacío, no establezca ningún valor del objeto;
Cuando el objeto está vacío, no se realiza ninguna operación y salta directamente a otro procesamiento.
Procesamiento 3) Cuando se detecta que el objeto está vacío, avisa al usuario que la operación es incorrecta.
Vuelva a escribir el fragmento de código 2 como se muestra arriba para obtener:
Método 1:
String userName = request.getParameter("username"); p> p>
//Cuando el valor de la variable esté vacío, se convertirá a la cadena vacía predeterminada
If (userName == null)
userName = ""
p>
Si (nombredeusuario.equals("raíz"))
{.........}
Método 2:
String userName = request.getParameter("username");
// Si el valor de esta variable está vacío, se convertirá a la cadena vacía predeterminada y no se realizará ninguna operación.
If (usreName ! = null)
{
If (userName.equals("root"))
{.. ........}
}
Método 3:
Cadena nombre de usuario = request.getParameter("nombre de usuario"
);// Si el valor de esta variable está vacío, se convertirá a la cadena vacía predeterminada y no se realizará ninguna operación.
If (usreName == null)
{
// Preguntar al usuario que la entrada está vacía
}
De hecho, los tres tipos de controladores anteriores también son adecuados para manejar otras excepciones:
Manejo de excepciones 1) Verifique la excepción y establezca el objeto en una cadena vacía o un valor predeterminado
Manejo de excepciones 2) La detección de excepciones no realiza ninguna operación, sino que salta directamente a otro procesamiento.
Manejo de excepciones 3) Se detecta una excepción, lo que indica que la operación del usuario cometió un error.
Resumen de errores comunes de Struts
Los siguientes nombres de archivos struts-config.xml y ApplicationResources.properties se utilizan de forma predeterminada, si se utilizan varios módulos o se especifican diferentes nombres de archivos de recursos. estos nombres de archivos deben cambiarse en consecuencia.
1. "No se encontró ningún bean en la clave de atributo XXX"
Se define un ActionForm en struts-config.xml, pero la clase especificada por el atributo de tipo no existe. O bien, el ActionForm especificado por el nombre o atributo no existe en la definición de la Acción.
2. "No se puede encontrar el método bean .getAttribute()) y mostrarlos. Esta excepción indica que jsp debe obtener un objeto, pero en la Acción anterior, el objeto no se configuró en la solicitud (posiblemente sesión, servletContext).
El nombre puede ser incorrecto. Compruebe si las etiquetas en jsp son generalmente atributos de nombre o valores de parámetros del método getAttribute () o si hay un problema con la lógica de la acción. y el método setAttribute () no se ejecuta primero.
Existe otra posibilidad, es puramente un problema con el archivo jsp. Por ejemplo, lt;logic:iterategt;especificará un valor de identificación y luego en el buclelt;bean:writegt;use este valor. como el valor de nombre, esta excepción también ocurrirá si estos dos valores son diferentes. (Es lo mismo, no hay ningún objeto correspondiente en la solicitud)
3. "Falta mensaje para la clave "XXX""
Faltan los recursos necesarios, verifique el Archivo ApplicationResources.properties ¿Existen los recursos requeridos por el archivo jsp? Por ejemplo:
lt; message key="msg.name.prompt"/gt; p> Esta línea de código busca el recurso msg.name.prompt y genera una excepción si no está en el archivo AppliationResources.properties. Cuando utilice varios módulos, tenga cuidado de especificar el nombre del archivo de recursos que se utilizará en struts-config-xxx.xml del módulo; de lo contrario, por supuesto, no se encontrará nada, lo que también es un error fácil de cometer.
4. "No hay método getter para la propiedad XXX del bean profesor"
Este mensaje de excepción muestra claramente que jsp quiere obtener un atributo del bean, pero el bean no tiene este atributo. Debes verificar el valor del atributo de la etiqueta en jsp. Por ejemplo, el cade en el siguiente código debe cambiarse a código:
lt; bean: write name="teacher" property="cade" filter="true"/gt; p> 5. "No se puede encontrar la colección ActionMappings o ActionFormBeans"
Por resolver.
6. "No se puede recuperar la asignación de la acción. No existe tal acción en .
7. Estado HTTP 404 - /xxx/xxx.jsp
La página jsp apuntada por el atributo de ruta de Reenvío no existe. Verifique la ruta y el módulo. mismo módulo en Action Steering, el nombre del módulo no debe incluirse en la ruta; recuerde usar contextRelative="true" al cambiar entre módulos.
8. No hay ningún mensaje de excepción y se muestra una página en blanco.
Puede ser que el reenvío utilizado en Acción no sea coherente con el nombre de reenvío definido en struts-config.xml. .
9. "El tipo de elemento "XXX" debe terminar con una etiqueta de cierre coincidente "XXX".
Este es un error de formato de archivo struts-config.xml; verifique cuidadosamente si es un archivo xml bien estructurado. No entraré en detalles sobre el formato del archivo xml aquí.
10. "Servlet.init() para la acción del servlet generó una excepción"
<. p> En términos generales, esta excepción se mostrará detrás de la información de la pila de excepciones de ActionServlet, que señala el código específico donde ocurrió la excepción.La excepción que encontré es la siguiente:
java.lang.NullPointerException
en org.apache.struts.action.ActionServlet.parseModuleConfigFile(ActionServlet.java:1003)
en org.apache.struts.action.ActionServlet.initModuleConfigFile(ActionServlet.java:1003)