0

我刚刚学习了基本的 Servlet 和 JSP 技术,并且正在使用它设计一个简单的网站。

该网站的目的是销售产品。产品的详细信息存储在数据库中。我想从数据库中检索数据并显示动态页面。我正在使用 MVC 方法并尝试尽可能地使其成为 OO。

我遇到了类别页面的问题(它旨在充当各种产品的索引……我想检索存储在数据库中的类别并显示它们)。

详细情况如下:

  1. 我创建了一个代表表的简单 java 类。该表的名称是 DB 中的“Categories”...这个类被命名为 CategoryTable 并包含表示表的各种属性的实例字段。

  2. 一个名为 CategoryRetriever 的 POJO 充当我的模型。它将表中特定行的数据插入到 CategoryTable 的对象中,最后创建各种 CategoryTable 对象的 ArrayList。此 ArrayList 包含所有检索到的数据。

  3. 设计的控制器是一个名为 CategoryController 的 Servlet。它创建 CategoryRetriever 的对象并将其传递给名为 CategoryDisplayer 的 JSP。

  4. 所有的东西都编译得很好。除了 JSP。使用 WEBLOGIC 部署后。jsp 给出以下错误。

G:\bea\weblogic81\server\bin.\myserver.wlnotdelete\extract\myserver_MiniProject_build\jsp_servlet__categorydisplayer.java:173:无法解析符号符号:类 CategoryTable 位置:类 jsp_servlet.__categorydisplayer CategoryTable tp = (CategoryTable)categoryContent.get(i ); //[ /CategoryDisplayer.jsp; 行:35] ^

由此我可以推断,根项目目录下的JSP找不到root>>WEB-INF>>source里面的CategoryTable类。

我的 JSP 是否需要包含语句或其他内容?如果是,该怎么做?

4

2 回答 2

1

乍一看,这是因为您没有将类放在一个包中。无包类在包内的其他类中不可见/不可导入。JSP 文件即被编译并转换为一个类扩展JspServlet,该类被放置在特定于 servletcontainer 的包中。从那里它看不到/导入无包类。

每当您希望能够在其他地方重用/导入类时,请始终将其放入包中。

例如

package com.shahensha.model;

public class Category {}

package com.shahensha.dao;

public class CategoryDAO {}

package com.shahensha.controller;

public class CategoryController extends HttpServlet {}

请注意,无包 servlet 将在特定配置中的特定版本的特定 servlet 容器上工作(例如 Apache Tomcat),但这不是避免将类放入包中的有效执行。


也就是说,这表明您在JSP 文件中使用scriptlet 。这是一个不好的做法。而是使用 servlet 为 JSP 准备数据,使用 JSTL 之类的标记库来控制 JSP 页面中的流程,并使用 EL(表达式语言,那些${}东西)来访问后端数据。

也可以看看


更新:既然你提到使用记事本/cmd,我只会强调 Saheed 的答案:你不应该将类(*.class)文件与源()文件保存在同一文件夹中*.java,而应保存在/WEB-INF/classes. 使用上述包示例时,应将类放置在以下位置:

  • /WEB-INF/classes/com/shahensha/model/Category.class
  • /WEB-INF/classes/com/shahensha/dao/CategoryDAO.class
  • /WEB-INF/classes/com/shahensha/controller/CategoryController.class

如果您使用的是 IDE,它将负责自动编译和构建。

于 2010-07-28T11:27:31.447 回答
0

...找不到根>>WEB-INF>>source中的CategoryTable类...
我认为您的意思是WEB-INF/classes文件夹。

我的 JSP 是否需要包含语句或其他内容...如果需要,该怎么做?
是的。要导入您缺少的课程:

<%@ page import="CategoryTable" %>
于 2010-07-28T09:15:40.080 回答