I am new to JSP and using Expression language. I am using Eclipse Galileo with version 2.5 and Tomcat 6 server . I just want to ask that my simple Expression Language is not printing the vale like if i write ${1>2}
which suppose to give false but it is displaying ${1>2}
only when it renders the page. But when i am using <c:out value="${1>2}"/>
it is printing false correctly. I think there is an issue with tag library. Please kindly suggest me the reason for this i am giving a sample code for this so that you can understand where I am going wrong:-
<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> <title>Expression Language Example</title> </head> <body> Is 1 greater than 2 using cout :<c:out value="${1>2}"/> Is 1 greater than 2 without using cout: ${1>2} </body> </html>
Update as per the answers, here is more information:
I am showing my web.xml
how it looks like:
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <display-name>ScriptLessJsp</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>ElServlet</display-name> <servlet-name>ElServlet</servlet-name> <servlet-class>com.servlet.El.ElServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>ElServlet</servlet-name> <url-pattern>/ElServlet</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>Collections</display-name> <servlet-name>Collections</servlet-name> <servlet-class>com.servlet.El.Collections</servlet-class> </servlet> <servlet-mapping> <servlet-name>Collections</servlet-name> <url-pattern>/go</url-pattern> </servlet-mapping> </web-app>
And in my lib folder I have added only jstl.jar
so that i can make use of <c:out>
tag to display but my EL for template text is not working.
1.1 Syntax of Expression Language (EL) To enable the EL expression in a JSP, developers need to use following page directive. To get a better idea, on how expression works in a JSP, we will see the below example where EL is used as an operator to add two numbers and get the output.
A JSP expression is used to insert the value of a scripting language expression, converted into a string, into the data stream returned to the client.
When the JSP compiler sees the ${} form in an attribute, it generates code to evaluate the expression and substitues the value of expresson. You can also use the JSP EL expressions within template text for a tag. For example, the <jsp:text> tag simply inserts its content within the body of a JSP.
A JSP expression element contains a scripting language expression that is evaluated, converted to a String, and inserted where the expression appears in the JSP file.
I'm quoting from an answer I provided before to the problem of EL not working:
With other words, the EL expression doesn't get evaluated? That can have one or more of the following causes:
- Application server in question doesn't support JSP 2.0.
- The
web.xml
is not declared as Servlet 2.4 or higher.- The
@page
is configured withisELIgnored=true
.- The web.xml is configured with
<el-ignored>true</el-ignored>
in<jsp-config>
.
In your particular case, EL works in taglibs, but not in template text, so I suspect it's caused by point 2. Ensure that your web.xml
is declared as at least Servlet 2.4. As Tomcat 6.0 supports Servlet 2.5, I would recommend to declare your web.xml
as Servlet 2.5:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="Your_WebApp_ID" version="2.5"> <!-- Here you go. --> </web-app>
Another rare cause I've seen on this is that there's a collision with EL JAR's in the classpath. Ensure that you have not copied any appserver-specific JAR files into your webapp's WEB-INF/lib
or, more worse, the JRE/lib
.
As you're already using Eclipse and Tomcat, I would review the development steps you used for this all. Ensure that you're using "Eclipse for Java EE developers" and that you've integrated the Tomcat instance in Eclipse's Servers view and that you've created a Dynamic Web Project set to "Servlet 2.5" which makes use of the Tomcat instance. This way everything should go automagically (Eclipse will take appserver's libraries in the build path itself and autogenerate a Servlet 2.5 compliant web.xml
).
Update: as per your update: those com.servlet.El
servlets look suspicious. What exactly do they do? Parsing EL? Remove them and retry.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With