servlet httpsessionevent httpservlet annotation java maven servlets artifacts

httpsessionevent - Diferencia entre javax.servlet-api.jar vs servlet-api.jar



maven jstl (4)

En mi repositorio principal, bajo GroupId javax.servlet tengo estos dos artefactos separados para los servlets. Estoy confundido, ¿cuál debo usar para construir una aplicación de servlet simple? ¿Cuál es la diferencia entre estos dos artefactos?


Necesitas agregar

<dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>

a tu proyecto. La versión que necesita puede diferir, depende de su contenedor de servlets, por ejemplo, Tomcat.

<scope>provided</scope> porque no lo necesita en tiempo de ejecución, ya está en su contenedor de servlets.


Para aquellos que usan Gradle ...

Si declaro mi dependencia usando compileOnly siguiente manera

compileOnly "javax.servlet:javax.servlet-api:3.1.0"

Entonces me sale un error de compilación:

error: package javax.servlet.http does not exist import javax.servlet.http.HttpServletRequest; ^

Si utilizo providedCompile como abajo, la compilación es exitosa.

providedCompile "javax.servlet:javax.servlet-api:3.1.0"

Para usar las dependencias de Compilación providedCompile , necesitas usar el plugin war.

apply plugin: ''war''


Vaya con javax.servlet-api.jar , muchos desarrolladores incluyen erróneamente servlet-api.jar en su carpeta WEB-INF / lib. Esto ya no causa una excepción porque Tomcat y otros servidores de aplicaciones lo reconocerán como un problema al implementar el archivo JAR. Sin embargo, hace que el contenedor ignore cualquier archivo JAR que contenga javax / servlet / Servlet.class.


javax.servlet-api versión 3.0.1 tiene una carpeta de anotaciones que contiene diferentes clases de anotaciones donde servlet-api versión 2.5 o inferior (es decir, la versión 2.4) no contiene anotaciones.

La anotación representa los metadatos. Si usa la anotación, no se requiere el descriptor de implementación, es decir, web.xml. Por ejemplo, si usa una anotación como @WebServlet("/hello") en su archivo de servlet, no necesita mencionar la asignación de servlet en el archivo web.xml.

Algunas de las anotaciones útiles son:

@HandlesTypes @HttpConstraint @HttpMethodConstraint @MultipartConfig @ServletSecurity @WebFilter @WebInitParam @WebListener @WebServlet