Código fuente de Parsewebxml
Problemas durante la ejecución: Problemas al ejecutar Hola
Si ves el siguiente mensaje de error:
'java' es no reconocido como comando interno o externo,...
o
java: comando no encontrado.
Entonces es posible que no tenga Java instalado o que la ruta del directorio java\bin no esté configurada en la variable de entorno. Verifique la instalación de Java y las variables de entorno para conocer la configuración correcta.
Si ve:
Excepción Java . noclassdeffounderror:hello
(nombre incorrecto: Hola) en el hilo "principal"...
Entonces probablemente no prestaste atención a las mayúsculas o escribiste mal las letras de tu nombre. Por ejemplo:
Hola java
Simplemente escriba el comando correcto y vuelva a ejecutarlo.
Si ve:
Excepción en el hilo "principal" Java . noclassdeffounderror:Hola
/categoría
Entonces, Necesito considerar si eliminarlo. La parte de clase 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 ¿qué pasa si ingresamos el nombre correcto y aún así tenemos el problema?
La versión JDK1.4.0 está instalada, JAVA_HOME, PATH, CLASSPATH están configurados. De la siguiente manera
JAVA_HOME=/home/jdk
ruta de clase = $ JAVA _ HOME/JRE/lib/tools . JAVA _ HOME/JRE/lib/:$ JAVA _ HOME/lib
PATH=$PATH:$JAVA_HOME/bin
Utilice el comando JAVAC para generar hello.class cuando utilice java hello , todavía aparece el mensaje:
Se produjo una excepción en el hilo "principal" Java noclassdeffounderror: XXX (nombre del error:
XXX)
Consejo de solución:
p>
(1), agregue (el directorio actual) a la ruta de clase o agregue public antes de la definición de clase.
(2) ¿Hay otro archivo java.exe en la ruta establecida en la variable de entorno de ruta? De forma predeterminada, se ejecuta java.exe en este directorio. Aunque la versión es consistente con java.exe del JDK, se producirá un error al ejecutarlo en este directorio.
Método:
Al instalar jdk, debe eliminar java.exe en winnt para asegurarse de que el java.exe llamado de forma predeterminada sea java.exe ubicado en el directorio bin de JDK.
(3) Si utiliza paquetes de datos.
Luego verifique si el paquete especificado no está incluido en el archivo java que está compilando.
3. Procesamiento habitual de captura de excepciones:
Una breve descripción de varias excepciones básicas en JAVA:
Cuando ocurre una condición aritmética anormal, se produce una excepción aritmética.
Se genera una excepción NullPointerException cuando la aplicación intenta utilizar el objeto requerido.
ArrayIndexOutOfBoundsException ocurre cuando el índice de la matriz está fuera de los límites.
ArrayStoreException se genera cuando un programa intenta almacenar datos del tipo incorrecto en una matriz.
Se produce una excepción FileNotFoundException cuando el archivo al que se intenta acceder no existe.
IOException es causada por fallas generales de E/S, como fallas de lectura de archivos.
Se genera una excepción NumberFormatException cuando falla la conversión de una cadena a datos numéricos.
OutOfMemoryException se genera cuando no hay memoria suficiente.
Se produce una excepción de seguridad cuando el subprograma intenta realizar una operación que no está permitida por la configuración de seguridad del navegador.
StackOverflowException se genera cuando el sistema se queda sin espacio en la pila.
StringIndexoutofBoundsException se genera cuando un programa intenta acceder a una posición de carácter que no existe en una cadena.
Las excepciones anteriores son básicamente las excepciones que podemos encontrar en JAVA.
La clase Throwable tiene dos subclases directas: Error y Excepción. Los objetos de clase de excepción son objetos que los programas Java procesan o descartan. Java proporciona dos modos de excepción, excepciones (excepciones de tiempo de ejecución) y excepciones (excepciones marcadas). 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 (de hecho, la superior). La capa de java.lang.RuntimeException también es java.lang.Exception). Tiene varias subclases correspondientes a diferentes tipos de excepciones. La clase RuntimeException representa la excepción generada por la máquina virtual Java en tiempo de ejecución. desde la perspectiva del mecanismo de ejecución del programa, las excepciones de tiempo de ejecución y las excepciones verificadas son diferentes. Desde un punto de vista lógico, el propósito del uso de las excepciones de tiempo de ejecución y las excepciones verificadas también es diferente.
En términos generales, son diferentes, la excepción marcada significa que esta excepción debe ser manejada, lo que significa que el programador ya debe saber que puede recibir una excepción (porque debe intentar detectarla), por lo que el programador debería poder manejar estas diferentes excepciones marcadas. de manera diferente. p>
Una excepción de tiempo de ejecución generalmente significa un error en el programa, lo que hará que el programador no pueda manejarlo y hará que el programa continúe ejecutándose
el manejo de excepciones controlable de Java. se implementa a través de cinco palabras clave: try, catch, throw, throws y finalmente la ayuda en línea de JB explica estas palabras clave de la siguiente manera:
Lanzamientos: enumera las excepciones que puede generar un método. p>Lanzar: Transferir el control del método al manejador de excepciones
Intentar: Abrir la declaración de manejo de excepciones
Finalmente: Código que ejecuta el programa antes de finalizarlo
declaración try
La declaración try especifica una sección de código entre llaves {}, que puede descartar una o más excepciones
declaración catch
Los parámetros. Las declaraciones de captura son similares a la declaración del método, incluido el tipo de excepción y el objeto de excepción. El tipo de excepción debe ser una subclase de la clase Throwable, lo que indica el tipo de excepción manejado por la declaración de captura Generado y capturado por el tiempo de ejecución. sistema en el bloque de código especificado por try, las llaves contienen el procesamiento del objeto, en el que se pueden llamar los métodos del objeto
Puede haber múltiples declaraciones catch, que manejan diferentes tipos de excepciones. El sistema de ejecución de Java detecta el tipo de excepción manejado por cada declaración catch de arriba a abajo hasta que se encuentra una declaración catch con un tipo coincidente. La coincidencia de tipos aquí significa que el tipo de excepción manejado por catch es completamente el mismo que el objeto de excepción generado o su. clase principal. Lo mismo, por lo que el orden de las declaraciones catch debe ser de especial a general.
También puede usar declaraciones catch para manejar múltiples tipos de excepción. En este caso, el parámetro de tipo de excepción debe ser el padre. clase de estos tipos de excepción, catch. El tipo de manejo de excepciones para una declaración debe elegirse en función de las circunstancias específicas de la programación.
Declaración final
En el código definido por try, cuando se descarta una excepción, el código posterior no se ejecutará. Puede especificar una sección de código mediante una declaración finalmente.
Independientemente de si la excepción se descarta en el bloque de programa especificado por try y si el tipo de excepción de la declaración catch es consistente con el tipo de excepción descartada, se ejecutará el código especificado por finalmente, lo que proporciona una salida unificada. Normalmente, los recursos se pueden borrar en una declaración final. Por ejemplo, cierre un archivo abierto. Independientemente de si ocurre una excepción, se ejecutarán las declaraciones finalmente.
declaración de lanzamientos
Los lanzamientos siempre aparecen en el encabezado de la función, lo que indica varias excepciones que pueden generar las funciones miembro. Para la mayoría de las subclases de Exception, 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 sus subclases, porque esto no es lo que esperan las partes normales del programa. Si desea lanzar RuntimeException explícitamente, debe declarar su tipo con la declaración throws.
Declaración de lanzamiento
El lanzamiento siempre aparece en el cuerpo de la función y genera una excepción. El programa finalizará inmediatamente después de la declaración de lanzamiento y las declaraciones posteriores no se podrán ejecutar. Luego, en todos los bloques try que lo contienen (posiblemente en la función de llamada de nivel superior), buscará desde adentro hacia afuera bloques try con cláusulas catch coincidentes. Todos los métodos utilizan la declaración "lanzar" para generar excepciones. La declaración Throw requiere un objeto arrojable separado, que es una subclase de cualquier clase Throwable.
Por ejemplo:
Boolean testEx() arroja una excepción {
boolean ret = true
Probar
{
ret = testex 1();
}
Captura (Excepción e)
{
System.out.println("testEx, captura excepción ");
ret = false
Lanzar e;
}
Finalmente
{
System.out.println("testEx, final; valor de retorno = "+ret);
Devolver ret
}
}
4. Error de JAVA: java.lang. Error
Causa:
1. por el cierre del sistema, lo que resulta en una gran cantidad de desperdicio de recursos externos, lo que eventualmente puede hacer 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. Los recursos externos a los que accede el sistema son anormales.
Solución:
1. Antes de acceder a recursos externos, primero verifique si los recursos (como las bases de datos) se pueden conectar o ejecutar normalmente.
2. Al acceder a recursos externos, si se establece una conexión, se debe cerrar y solo se puede cerrar una vez.
3. Intentar disfrutar de recursos externos en la misma operación para reducir el consumo de recursos de esta operación y mejorar la eficiencia de ejecución del programa.
5. Error de puntero nulo: java.lang.NullPointerException
Al utilizar tipos de datos JAVA básicos, el valor de la variable ya es el valor predeterminado. Sin una asignación normal, el programa no se compilará. Por lo tanto, el uso de tipos de datos JAVA básicos (doble, flotante, booleano, char, int, long) generalmente no causa excepciones de puntero nulo. Por lo tanto, la excepción del puntero nulo está relacionada principalmente con la operación de objetos.
A continuación se enumeran primero varias situaciones en las que puede ocurrir una excepción de puntero nulo y las soluciones correspondientes:
Comience a usarlo directamente independientemente de si el objeto es nulo o no.
(JSP) Fragmento de código 1:
out . println(request . getparameter("nombre de usuario"));
Descripción:
La función del segmento de código 1 es muy simple: generar el valor del campo de la tabla "nombre de usuario" ingresado por el usuario.
Descripción:
Parece que no se pueden encontrar errores gramaticales en la declaración anterior y, en la mayoría de los casos, no se encontrarán problemas. Sin embargo, si el usuario no proporciona el valor del campo del formulario "nombre de usuario" al ingresar datos, o directamente omite el formulario por algún medio, el valor de request.getParameter("nombre de usuario") es nulo (no es una cadena vacía, pero es el objeto vacío null. ), el método println del objeto de salida no puede operar directamente en el objeto vacío, por lo que la página JSP donde se encuentra el segmento de código 1 generará una excepción "java.lang.NullPointerException".
Incluso si el objeto puede estar vacío, se llamarán algunos métodos de java.lang.Object o del propio objeto, como toString(), equals(Object obj), etc.
(JSP) Fragmento de código 2:
cadena nombre de usuario = solicitud . getparameter(" nombre de usuario ");
If (nombre de usuario.equals("root ") )
{....}
Descripción:
La función del fragmento de código 2 es detectar el nombre de usuario proporcionado por el usuario. El nombre es "root", los usuarios realizarán algunas operaciones especiales.
Descripción:
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 está vacío, por lo que no se puede combinado directamente con Otro objeto con el que comparar. De manera similar, la página JSP donde se encuentra el segmento de código 2 también arrojará un error de puntero nulo (java.lang.NullPointerException).
(JSP) Fragmento de código 3:
cadena nombre de usuario = sesión obtener atributo(" sesión . nombre de usuario "). toString();
Descripción:
La función del segmento de código 3 es extraer el valor de session.userName de la sesión y asignar el valor al objeto de cadena userName.
Descripción:
En términos generales, si el usuario ya ha tenido una conversación, no habrá ningún problema, pero si el servidor de aplicaciones se reinicia en este momento, el usuario no inicia sesión; nuevamente (también puede ser El usuario cierra el navegador pero aún abre la página original). Luego, el valor de la sesión no es válido en este momento y el valor de session.username en la sesión está vacío. Realizar directamente la operación toString() en un objeto nulo hará que el sistema arroje java.lang.NullPointerException.
Solución:
Para asegurarnos de que el objeto a operar o referenciar no esté vacío, si queremos operar o hacer referencia a un objeto, primero debemos verificar si el objeto tiene ha sido instanciado y no está vacío; y agrega manejo al sistema cuando el objeto está vacío.
Por ejemplo, el objeto String se utiliza para guardar los resultados enviados por el usuario; si implica la operación de un objeto, primero verifique si está vacío y luego elija cualquiera de los siguientes métodos de procesamiento; comprobar si el objeto está vacío:
Método de procesamiento 1) Cuando se detecta que el objeto está vacío, establezca el valor del objeto en una cadena vacía o un valor predeterminado
Método de procesamiento; 2) Cuando se detecta que el objeto está vacío, no se realiza ninguna operación y salta directamente a otro procesamiento.
Procesamiento 3) Cuando el objeto de verificación está vacío, avise al usuario que hay un error en la operación.
Reescribe el segmento de código 2 de la forma anterior para obtener:
Modo 1:
cadena nombre de usuario = solicitud getparameter(" nombre de usuario ");
//Cuando el valor de la variable está vacío, se convertirá a la cadena vacía predeterminada.
If (nombre de usuario == vacío)
Nombre de usuario = " ";
If (nombre de usuario.equals("root "))
{..........}
Modo 2:
cadena nombre de usuario = solicitud. getparameter(" nombre de usuario ");
/ /Cuando el valor de la variable esté vacío, se convertirá a la cadena vacía predeterminada y no se realizarán operaciones relacionadas.
If (usreName!=null)
{
If (userName.equals("root"))
{.. ........}
}
Modo 3:
cadena nombre de usuario = solicitud getparameter(" nombre de usuario ");
//Cuando el valor de la variable esté vacío, se convertirá a la cadena vacía predeterminada y no se realizarán operaciones relacionadas.
If (usreName == null)
{
//Solicita al usuario que ingrese información que está vacía.
}
De hecho, los tres métodos de procesamiento proporcionados anteriormente también son aplicables a otros manejos de excepciones:
Modo de manejo de excepciones 1) detectar la aparición de excepciones y Establezca el valor del objeto en una cadena vacía o un valor predeterminado;
Método de manejo de excepciones 2) Cuando se detecta una excepción, no se realiza ninguna operación y salta directamente a otro procesamiento.
Método de manejo de excepciones 3) Cuando se detecta una excepción, se le informa al usuario que hay un error en la operación.
Resumen de errores comunes de Struts
Los siguientes nombres de archivo se utilizan de forma predeterminada, como struts-config.xml y propiedades de la aplicación. Si utiliza varios módulos o especifica diferentes nombres de archivos de recursos, estos nombres deben modificarse en consecuencia.
1, "El bean no se puede encontrar bajo la palabra clave de atributo XXX"
Se define un ActionForm en struts-config.xml, pero la clase especificada por el atributo de tipo no existe El atributo de tipo El valor debe ser el nombre completo de la clase de formulario. O, en la definición de Acción, el ActionForm especificado por el nombre o atributo de atributo no existe.
2. "Bean XXX no se puede encontrar en ningún ámbito"
Durante la operación, se solicitarán algunos objetos. setattribute(), estos objetos se obtendrán y mostrarán en el archivo jsp redirigido (usando la etiqueta o el método request.setAttribute()). Esta excepción significa que jsp quiere obtener un objeto, pero el objeto no se configuró en la solicitud (sesión o servletContext) en la operación anterior.
Quizás el nombre esté mal. Verifique que la etiqueta en jsp sea generalmente el atributo de nombre o el valor del parámetro del método getAttribute(). O hay un problema con la lógica de acción y el método setAttribute () no se ejecuta antes de transferirse.
Existe otra posibilidad, que es puramente un problema del archivo jsp, como
3. "Falta el mensaje de la clave "XXX""
Falta de requerido. recursos, verifique si los recursos requeridos están disponibles en el archivo jsp en los recursos de la aplicación. Archivo de propiedades, por ejemplo:
& ltbean:message key = "msg. name.prompt"/& gt;
Esta línea de código buscará msg.name.prompt recurso. Si esto Esta excepción ocurrirá si el recurso no está en las propiedades de los recursos de la aplicación. Cuando utilice varios módulos, preste atención a especificar el nombre del archivo de recursos que se utilizará en el archivo struts-config-xxx.xml. Por supuesto, no se encontrará el recurso. Este también es un error fácil de cometer.
4. "El atributo del maestro frijol Debes verificar el valor del atributo de propiedad de la etiqueta en el jsp. Por ejemplo, el cade en el siguiente código debe cambiarse a código:
& ltbean:write name = "teacher" property = "cade" filter = "true"/& gt;
5, "No se puede encontrar la colección ActionMappings o ActionFormBeans"
Por resolver.
6. "No se puede recuperar el mapeo para la operación XXX"
En. jsp
7. Estado HTTP 404 - /xxx/xxx.jsp
La página jsp apuntada por el atributo de ruta de avance no existe. Por favor verifique la ruta y los módulos. Para turnos de acción dentro del mismo módulo, la ruta no debe contener el nombre del módulo. Al realizar transferencias entre módulos, recuerde utilizar contextRelative="true".
8. No hay información de excepción y se muestra una página en blanco.
Puede ser que el nombre de reenvío utilizado en la operación no coincida con el nombre de reenvío definido en struts-config.xml
El tipo de elemento "XXX" debe terminar con un cierre coincidente etiqueta "XXX" .
Este es un error de formato en el archivo struts-config.xml. Verifique que sea un archivo xml bien formado. Con respecto al formato del archivo xml, no entraré en detalles aquí.
10, "El Servlet.init() de la operación del servlet generó una excepción"
Por lo general, esta excepción mostrará la información de la pila de excepciones sobre el ActionServlet, que indica dónde se produjo la excepción. ocurrió en una línea de código. Encontré el siguiente mensaje:
java.lang.NullPointerException
ubicado en org. Apache action. p>
Ubicado en org. Apache. struts.action servlet.initmoduleconfig(action servlet. Java:955)
Para resolver este problema, primero descargue el paquete de código fuente de struts. en ActionServlet.java Inserte un punto de interrupción en la línea 1003 para monitorear las variables. Desafortunadamente, perdí el archivo struts-config.xml, por lo que ocurrió la excepción anterior. Debería haberse eliminado accidentalmente al sincronizar con CVS.
11, "No hay ningún recurso definido para el validador"
Esta es una excepción que puede ocurrir al usar el complemento del validador. En este momento, debe verificar el archivo validation.xml para ver si los recursos utilizados en él están realmente definidos, si el nombre del formulario es correcto, etc.