我们用idea开发java web时常常会遇到jsp的EL表达式不起作用的问题。造成的该问题的因素的可能有很多,
1.有的是因为web.xml中的web-app只配置了<web-app>。。。。。。。。。。</web-app>,而没有在里面配置xlmn,xsi等内容,2.还有的可能是web-app的配置的version的版本过低,导致不支持EL表达式
3.也有的是没有导入相应的jstl的依赖包。。。。
统一解决方案是:
1.确保maven中添加了以下依赖:
<!-- 添加jstl依赖,使其支持<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>jstl语法 -->
<!-- jstl标签库相关 -->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.taglibs/taglibs-standard-impl -->
<dependency>
<groupId>org.apache.taglibs</groupId>
<artifactId>taglibs-standard-jstlel</artifactId>
<version>1.2.5</version>
</dependency>
2.尽量将web-app的version版本设成最高,(例如2.3版本的web-app的 <el-ignored>true</el-ignored>默认设置就是true,忽略EL表达式,idea默认创建的jsp的格式是:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
</web-app>
我们需要将其改成如下格式)
目前我的是2.5的版本,它默认是支持jsp的EL表达式的。并且将web-app的配置写完整:我的文件如下:
<?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"
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>Archetype Created Web Application</display-name>
<!-- 配置前端控制器springmvc-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.单个jsp设置其是否忽略EL表达式:(false表示支持,true表示不支持)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@page isELIgnored="false" %>
4.全局配置jsp支持EL表达式:
网上说在web.xml中加入以下代码即可:
<jsp-config>
<jsp-property-group>
<url-pattern>*</url-pattern>
<el-ignored>false</el-ignored>
</jsp-property-group>
</jsp-config>
但我测试,它并没有效果,无论 <el-ignored>false</el-ignored>是false,还是true,它最终都是false的效果,并且 <url-pattern>*.*</url-pattern>代码这样写还会报错,说路径无效,将其改成 <url-pattern>*.*</url-pattern>就可以了,但是不能解决问题啊,也许是高版本的web-app默认支持EL表达式,且不允许你全局更改其jsp的EL的设置吧。
5.如果还不行,那就是缓存的因素作怪了。尝试在maven的build节点下添加maven依赖:
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.0.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.20.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
点击右侧的maven project,并执行clean maven,install maven操作,清楚缓存:
再点击rebuild project重构项目 ,然后打开chrome,按shift+ctrl+delete,清楚浏览器的缓存,经过彻底的缓存清理后,启动项目,检测EL表达式是否生效:检测代码是:index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%--<%@page isELIgnored="false"%>--%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>EL表达式测试</title>
</head>
<body>
<c:if test="${3>2}">
<p>yes</p>
</c:if>
</body>
</html>
如果页面显示yes,则支持,啥都没有,则不支持。