使用 jstl <c:when> 标签未正确评估表达式

Using jstl <c:when> tag is not evaluating expression correctly

我正在尝试在以下代码中使用 c:choose 标记和 c:when jstl 标记,但未正确评估表达式。我有一个在会话范围内正确设置 bean Seller 的 servlet。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>    
<!DOCTYPE html>
<html lang="en">
    <c:choose>
        <c:when test="${not empty sessionScope.seller}">
            <c:out value="${seller.firstName}"/>
        </c:when>
        <c:otherwise>
            <c:out value="none"/>
        </c:otherwise>
    </c:choose>
</html>

servlet 代码如下:

package com.senachat.presentation;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.senachat.domain.Seller;

public class SenachatServlet extends HttpServlet{

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    resp.setContentType("text/html");

    Seller seller = new Seller();
    seller.setFirstName("John");

    HttpSession session = req.getSession();
    session.setAttribute("seller", seller);

    RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/jsp/index.jsp");
    dispatcher.forward(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    this.doGet(req, resp);
}

}

加载 index.jsp 页面时,打印值 "none" 而不是 firstName "John" 的值。我无法确定我在这里可能做错了什么?

经过进一步调查,我意识到表达式语言语句甚至没有被计算。

所以我在下面 link https://docs.oracle.com/javaee/1.4/tutorial/doc/JSPIntro7.html

找到了文档

它提到 EL 对于 servlet 规范 2.3 及更早版本默认是禁用的。果然我在 web.xml

中声明了旧版本的 servlet 规范 2.3