如何在JSP页面访问Java Resources下的类?新手遇对象调用报错
解决Servlet与JSP中属性获取及类导入的问题
嘿,刚上手Servlet和JSP遇到这种问题真的很常见,我来一步步帮你排查解决:
1. 先搞清楚作用域的问题——你拿错地方了!
你提到在Servlet里把属性添加到request中,但在JSP里却用request.getSession().getAttribute("schoolschedule")来获取,这是核心错误:
- Servlet里如果是
request.setAttribute("schoolschedule", scheduleObj),那这个属性只存在于当前请求的request作用域,JSP里必须用request.getAttribute("schoolschedule")获取 - 如果你想把属性存在session作用域(跨请求可用),那Servlet里得改成:
这时候JSP里用request.getSession().setAttribute("schoolschedule", scheduleObj);request.getSession().getAttribute()才是对的
2. 解决类导入无法解析的问题
导入类时一定要注意这几点:
- 必须用全限定类名:比如你的
SchoolSchedule类在com.example包下,JSP里的导入语句应该是:
别只写类名,除非类在默认包(但强烈不推荐用默认包,Servlet容器对默认包的类加载有问题)<%@page import="com.example.SchoolSchedule" %> - 确认类已正确编译部署:
- 手动编译的话,要把编译后的
.class文件放到WEB-INF/classes目录下对应包路径里(比如WEB-INF/classes/com/example/SchoolSchedule.class) - 用IDE(IDEA/Eclipse)的话,检查项目部署配置,确保编译后的类已经被打包到war包或者部署到服务器中
- 手动编译的话,要把编译后的
- 类的访问修饰符要是public:如果你的
SchoolSchedule类是default访问权限(没写public),JSP是无法访问到的
3. 获取属性后记得类型转换
getAttribute()方法返回的是Object类型,必须转成你的实体类才能调用方法,比如在JSP里:
<% // 先获取并强转 SchoolSchedule schedule = (SchoolSchedule) request.getAttribute("schoolschedule"); // 现在就能调用方法了 out.println(schedule.getCourseName()); %>
4. 更简单的方式:用EL表达式
新手其实可以试试EL表达式,不用显式强转和导入类(只要类在正确的包下),直接通过属性名调用getter方法:
<!-- 假设你的类有getCourseName()方法 --> ${schoolschedule.courseName}
这样代码更简洁,也不容易出错
内容的提问来源于stack exchange,提问作者trickster
相关产品推荐
相关产品推荐

