解决jsp开发中不支持EL问题

在jsp开发中,有时会遇到EL表达式不被支持的问题。对此,下面是完整攻略:

在jsp开发中,有时会遇到EL表达式不被支持的问题。对此,下面是完整攻略:

问题背景

在jsp开发中,可以使用EL表达式来简化开发过程,但有时在使用EL表达式时会遭遇并发生“不支持EL表达式”的问题,通常会因为如下原因:

  • web.xml文件缺少支持EL表达式的配置;
  • 服务器版本过低,不支持EL表达式导致不生效;
  • 需要使用el-api和jstl(JSP标准标签库)两个JAR包提供的支持。

解决步骤

第一步:检查配置

首先,检查web.xml文件中是否包含以下配置:

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <el-enabled>true</el-enabled>
    </jsp-property-group>
</jsp-config>

如果缺少这个配置,就会导致EL表达式无法生效,添加完配置后重新运行程序即可。

第二步:添加相关JAR包

其次,需要添加el-api和jstl两个JAR包提供的支持,以下是Maven的依赖引用配置(以JSTL 1.2为例):

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.el</groupId>
    <artifactId>javax.el-api</artifactId>
    <version>3.0.0</version>
    <scope>compile</scope>
</dependency>

这里的javax.servlet-api依赖的作用是提供Servlet API相关的类,因此使用provided作用域,只在编译和测试时起作用。而javax.el-api依赖则是提供EL Expression相关的类。

添加好相关JAR包并重新编译、部署程序后,即可使用EL表达式。

示例说明

下面给出两个使用EL表达式的示例:

示例一

<c:set var="username" value="John"/>
<c:if test="${username eq 'John'}">
    <p>Welcome back, ${username}!</p>
</c:if>

以上示例会在运行时判断var为username的变量是否等于‘John’,若为真则运行if块中的内容,输出 “Welcome back, John!”。

示例二

<%
    pageContext.setAttribute("list", Arrays.asList(1, 2, 3, 4));
 %>
<c:forEach items="${list}" var="item">
    ${item}<br/>
</c:forEach>

以上示例将一个整型数组转换成List,赋值给pageContext上下文,而JSTL标签库中的forEach标签则会对List中的元素进行迭代输出,逐行输出 "1 2 3 4"。

总之,只要遵循配置检查和添加JAR包的步骤,EL表达式将可以顺畅地在jsp开发中使用。

本文标题为:解决jsp开发中不支持EL问题

基础教程推荐