java - El método getDispatcherType() no está definido para el tipo HttpServletRequest
maven servlets (2)
Cuando ejecuto mi aplicación desde Eclipse, se ejecuta sin errores para servlet api 3.1.0 y 3.0.1.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
</dependency>
Yo uso Tomcat 8.0.21 para eclipse. He configurado tomcat8 en la máquina ubuntu que se ejecuta en la versión estable de tomcat 8.0.14.
Desafortunadamente, recibo el siguiente mensaje de error si uso servlet api 3.1.0. Pero funciona para la versión anterior 3.0.1.
root cause
org.apache.jasper.JasperException: Unable to compile class for JSP:
An error occurred at line: [50] in the generated java file: [/var/lib/tomcat8/work/Catalina/localhost/ROOT/org/apache/jsp/WEB_002dINF/view/templates/login_002dtemplate_jsp.java]
The method getDispatcherType() is undefined for the type HttpServletRequest
Stacktrace:
org.apache.jasper.compiler.DefaultErrorHandler.javacError(DefaultErrorHandler.java:103)
org.apache.jasper.compiler.ErrorDispatcher.javacError(ErrorDispatcher.java:199)
org.apache.jasper.compiler.JDTCompiler.generateClass(JDTCompiler.java:450)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:361)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:564)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:357)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
¿Por qué obtengo este error? ¿Cómo arreglar esto?
Para los usuarios de Maven, hay varias buenas respuestas aquí que quizás desee verificar.
Todavía estoy en la edad media y no estoy usando un administrador de dependencias para mi proyecto Tomcat. Si eres como yo y tienes este problema, así es como lo resolví: parece que tomcat proporciona las clases javax.servlet, por lo que no es necesario que estén en el archivo lib de tu proyecto. (Originalmente tenía el servlet-api-2.5.jar
en mi directorio /WEB-INF/lib
). Sin embargo, probablemente aún lo necesite para compilar (lo hice), por lo que debería moverlo a una ubicación incluida en su java classpath. También es posible que necesite decirle a su IDE dónde buscar.
Espero que ayude.
Se supone que no debes proporcionar la API de Servlet junto con el archivo de la aplicación web si el tiempo de ejecución de destino ya proporciona la API fuera de la caja. Tomcat como JSP / Servletcontainer ya proporciona JSP, Servlet y EL APIs fuera de la caja. Cuando los proporciona junto con su aplicación web de todos modos, puede encontrarse con conflictos de carga de clases causados por clases duplicadas de versiones diferentes en el classpath en tiempo de ejecución que proviene tanto de la aplicación web como del servidor.
Agregue <scope>provided</scope>
a las dependencias ya proporcionadas por el tiempo de ejecución de destino.