Не удается устранить ошибку символа во время развертывания JSP - PullRequest
0 голосов
/ 28 июля 2010

Я только что изучил базовые технологии Servlets и JSP и создаю простой веб-сайт, используя его.

Целью сайта является продажа товаров. Детали продуктов хранятся в базе данных. Я хочу получить данные из базы данных и отобразить динамические страницы. Я использую подход MVC и пытаюсь сделать его как OO, как я могу.

У меня проблема со страницей категорий (которая предназначена для использования в качестве индекса для различных продуктов ... Я хочу получить категории, хранящиеся в БД, и отобразить их).

Подробности следующие:

  1. Я создал простой класс Java, который представляет таблицу. Имя таблицы - «Категории» в БД ... Этот класс называется CategoryTable и содержит поля экземпляра, представляющие различные атрибуты таблицы.

  2. POJO с именем CategoryRetriever действует как моя Модель. он вставляет данные определенной строки из таблицы в объект CategoryTable и, наконец, создает ArrayList из различных объектов CategoryTable. Этот ArrayList содержит все найденные данные.

  3. Контроллером проекта является сервлет с именами CategoryController. он создает объект ObjectRetriever и передает его в JSP с именем CategoryDisplayer.

  4. Все отлично компилируется. За исключением JSP. После развертывания с WEBLOGIC. JSP дает следующую ошибку.

G: \ bea \ weblogic81 \ server \ bin. \ Myserver.wlnotdelete \ extract \ myserver_MiniProject_build \ jsp_servlet__categorydisplayer.java: 173: не удается разрешить символ символа: класс КатегорияТаблица: класс jsp_servlet .__ categorydisplayer CategoryTable tp = (CategoryTable) categoryContent.get (i); // [/CategoryDisplayer.jsp; Строка: 35] ^

Из этого я могу сделать вывод, что JSP, находящийся непосредственно в корневом каталоге проекта, не может найти класс CategoryTable, находящийся в корневом каталоге >> WEB-INF >> source.

Требуется ли в моем JSP оператор включения или что-то еще? Если да, то как это сделать?

Ответы [ 2 ]

1 голос
/ 28 июля 2010

На первый взгляд, это потому, что вы не поместили класс в пакет.Классы без пакетов не видны и не импортируются из других классов внутри пакета.Файлы 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 {}

Обратите внимание, что сервлеты без пакетов будут работать с определенными сервлет-контейнерами определенных версий в определенных конфигурациях (например, Apache Tomcat), но это недопустимовыполнить, чтобы не помещать классы в пакет.


Это говорит о том, что вы используете scriptlets внутри файла JSP.Это плохая практика.Вместо этого используйте сервлет для подготовки данных для JSP, используйте теги вроде JSTL для управления потоком на странице JSP и используйте EL (Expression Language, эти ${} вещи) для доступа к внутренним данным.

См. Также


Обновление : так как вы упомянули об использованииnotepad / 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, он позаботится о автоматической компиляции и сборке.

0 голосов
/ 28 июля 2010

... не удается найти класс CategoryTable, находящийся внутри root >> WEB-INF >> source ...
Я думаю, что вы имеете в виду папку WEB-INF / classes .

Требуется ли в моем JSP оператор включения или что-то ... если да, то как это сделать?
Да. Чтобы импортировать отсутствующий класс:

<%@ page import="CategoryTable" %>
...