You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JSP页面中JSTL标签被忽略如何解决?GlassFish服务器无效果

解决GlassFish中JSTL标签不执行的问题

我来帮你排查这个问题——JSTL标签没执行也没显示,说明服务器根本没识别这些标签,大概率是依赖、配置或者URI的问题,按下面的优先级一步步试:

1. 先确认JSTL依赖包的位置和版本

JSTL要正常工作必须有对应的jar包支持,这是最容易踩坑的点:

  • 如果用Maven,确保依赖是适配Servlet 3.0+的JSTL 1.2(GlassFish 3及以上版本都支持):
<dependency>
    <groupId>javax.servlet.jsp.jstl</groupId>
    <artifactId>jstl</artifactId>
    <version>1.2</version>
</dependency>
  • 手动导包的话,一定要把jstl-1.2.jar放到项目的WEB-INF/lib目录下,别丢到GlassFish的全局lib里——新手这么做很容易搞出版本冲突,导致服务器找不到正确的标签处理类。

2. 检查web.xml的版本是否过时

如果你的项目还用着Servlet 2.3及以下的web.xml(比如开头是老式的DOCTYPE声明),JSTL标签会被当作普通文本忽略。赶紧升级到Servlet 3.0+的配置,比如:

<?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">
    <!-- 你的其他配置内容 -->
</web-app>

新版本的Servlet规范对JSTL的支持更完善,不会出现标签不解析的情况。

3. 修正标签库的URI

你页面里用的http://java.sun.com/jsp/jstl/core是旧版JSTL(1.0/1.1)的URI,虽然有些服务器兼容,但GlassFish对新版URI更友好。把标签库声明改成:

<%@ taglib prefix="c" uri="http://xmlns.jcp.org/jsp/jstl/core"%>

URI不匹配的话,服务器找不到对应的标签处理类,自然不会执行标签逻辑。

4. 确保EL表达式没有被禁用

如果页面设置了isELIgnored="true",不仅EL表达式会失效,JSTL标签也会罢工。检查页面开头的page指令,要么去掉这个属性,要么明确设置为false:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>

Servlet 3.0+的JSP默认是禁用这个属性的,但老项目可能被手动改过。

5. 排查GlassFish自带JSTL的冲突问题

有些GlassFish版本自带了旧版JSTL,和你项目里的jar包冲突。如果上面的步骤都没用,可以试试:

  • 先删除项目WEB-INF/lib里的JSTL jar包,看看GlassFish自带的能不能用(不推荐,版本差异可能导致其他问题)
  • 或者把最新的jstl-1.2.jar放到GlassFish的domains/domain1/lib/endorsed目录下,覆盖自带版本(记得备份原文件)

最后给你一个测试用的极简页面,用来验证JSTL是否正常工作:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false"%>
<%@ taglib prefix="c" uri="http://xmlns.jcp.org/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>JSTL测试</title>
</head>
<body>
    <h1>JSTL测试页面</h1>
    <c:set var="testVar" value="Hello JSTL!" />
    <p>测试变量值:${testVar}</p>
    <c:if test="${1==1}">
        <p>JSTL标签执行成功!</p>
    </c:if>
</body>
</html>

如果这个页面能显示出Hello JSTL!和JSTL标签执行成功!,说明问题解决了;要是还是只显示HTML内容,再回头检查上面的步骤。

内容的提问来源于stack exchange,提问作者hal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:18:43