Spring MVC新手求助:JSP中编写Java代码编译报错解决方案
解决JSP中混合JSTL与脚本代码的编译错误
嘿,作为Spring MVC新手碰到这个问题很正常,咱们先把最明显的错误解决掉,再给你一些实用的优化建议:
1. 先修正Java大小写问题(最可能的报错根源)
Java是严格区分大小写的!你代码里的system.out.println(i)里的system必须大写为System——因为Java的系统输出类是java.lang.System,小写的话编译器根本找不到这个类,这直接导致了编译失败。
修正后的脚本代码:
<% int i = 0; System.out.println(i); %>
2. 优化:用JSTL替代不必要的脚本代码
虽然你说必须写Java代码,但如果只是想输出循环相关的变量,完全可以用你已经定义的varStatus="loop"来实现,不用写脚本:
- 循环索引(从0开始):
${loop.index} - 循环计数(从1开始):
${loop.count}
比如你想在页面显示循环次数,直接写<td>${loop.index}</td>就行,省去脚本代码,也避免了脚本和JSTL的作用域冲突。
3. 检查JSTL的基础配置
如果修正大小写后还是报错,要确认两个关键配置:
- JSTL标签库导入:页面顶部必须添加标签库声明,否则
<c:forEach>本身就会报错:<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> - 依赖包是否正确引入:如果是Maven项目,确保pom.xml里有JSTL依赖:
非Maven项目的话,要把<dependency> <groupId>javax.servlet.jsp.jstl</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>jstl-1.2.jar放到WEB-INF/lib目录下。
4. 简化EL表达式写法
你的EL表达式${c.getRh_name()}可以简化成${c.rh_name}——EL会自动调用对应的getter方法(getRh_name()),这样代码更简洁易读。
最终修正后的完整代码示例
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 页面其他头部内容,比如<%@ page contentType="text/html;charset=UTF-8" language="java" %> --> <table> <c:forEach items="${dbEntries}" var="c" varStatus="loop"> <tr> <% int i = 0; System.out.println(i); %> <td>${c.rh_name}</td> <td>${c.ipm_name}</td> </tr> </c:forEach> </table>
内容的提问来源于stack exchange,提问作者Bidipta Dauka
相关产品推荐
相关产品推荐

