sintaxis - servlets y jsps
Expresiones EL no evaluadas en JSP (2)
Sí, tengo doctype en web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "java.sun.com/dtd/web-app_2_3.dtd"; >
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "java.sun.com/dtd/web-app_2_3.dtd"; >
Elimine ese
<!DOCTYPE>
de
web.xml
y asegúrese de que
<web-app>
se declare conforme Servlet 2.4 o posterior y que todo esté bien.
Un Servlet 3.0 válido (Tomcat 7, JBoss AS 6/7, GlassFish 3, etc.) compatible con
web.xml
ve a continuación en
su totalidad
, sin ningún
<!DOCTYPE>
:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- Config here. -->
</web-app>
Para Servlet 3.1 (Tomcat 8, WildFly 8/9/10/11, GlassFish / Payara 4, etc.) se ve a continuación:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- Config here. -->
</web-app>
Para Servlet 4.0 (Tomcat 9, WildFly 12, GlassFish / Payara 5, etc.) se ve a continuación:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- Config here. -->
</web-app>
Al usar JSTL 1.1 o más reciente, debe asegurarse de que su
web.xml
se declare de tal manera que la aplicación web se ejecute al menos en el modo Servlet 2.4, de lo contrario, las expresiones EL no funcionarán en la aplicación web.
Cuando todavía tenga un Servlet 2.3 o anterior
<!DOCTYPE>
o
<web-app>
en
web.xml
, aunque ya tenga un Servlet 2.4 o una XSD más reciente, aún se vería obligado a ejecutarse en el modo Servlet 2.3 o anterior, haciendo que las expresiones EL fallen.
La razón técnica es que EL originalmente era parte de JSTL 1.0 y no estaba disponible en Servlet 2.3 / JSP 1.2 y versiones anteriores.
En JSTL 1.1, EL se eliminó de JSTL y se integró en JSP 2.0, que acompaña a Servlet 2.4.
Entonces, si se declara que su
web.xml
ejecuta la aplicación web en el modo Servlet 2.3 o anterior, entonces JSP esperaría encontrar EL en la biblioteca JSTL, pero esto a su vez fallaría si se trata de una versión JSTL más nueva, que carece de EL.
Ver también:
- Diferencia entre JSP EL, JSF EL y Unified EL
- Nuestra página wiki de JSTL
Hay un pequeño problema con mi aplicación web servlets / jsp. Estoy tratando de usar jstl en la página jsp. Cuando uso cualquier etiqueta, por ejemplo:
<c:out value="${command}"/>
me muestra
${command}
en mi navegador en lugar del valor del parámetro ''comando''. Estoy usando maven (y supongo que el problema está aquí). Aquí están las dependencias pom xml:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
mi etiqueta de declaración web.xml:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
y parte jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Parsing results</title>
<link type="text/css" rel="stylesheet" href="css/page.css"/>
<link type="text/css" rel="stylesheet" href="css/table.css"/>
</head>
<body>
<h2 align="center">Results of
parsing. Parsing method = <c:out value="${command}"/></h2>.......
EDITAR: El código, que establece el valor del comando, es simple:
request.setAttribute("command", parser.getName());
luego va
request.getRequestDispatcher(redir).forward(request, response);
¡Dime por favor, qué estoy haciendo mal! ¡Gracias!
En mi caso para el archivo web.xml (versión = "3.0") tuve que ejecutar la aplicación en el servidor Tomcat v.8 en lugar de v.7, de lo contrario tuve el mismo problema que usted. Espero que esto ayude a alguien...
<?xml version="1.0" encoding="ISO-8859-1" ?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">