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
相关产品推荐
相关产品推荐

