Форум программистов, компьютерный форум, киберфорум
Java EE (J2EE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82

Диплом по JSP JAVABEAN (или EJB)

14.07.2010, 10:25. Показов 4394. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Мужики (и не только), такая ситуация:
j2ee прога для тестирования учащихся.
клиенты через jsp считывают тест из xml-файла
(БД нету и не надо) по id-номеру (имя файла),который
находится на сервере и по SAX-у разбиают этот файл
на составляющие. обработка в обычном классе (javabean) и
наверное соответственно поэтому нет возможности работу нескольких
клиентов , а надо!!!! т.к. переменные переопределяются и
предыдущим пользователем (они работают как один пользователь:
первый зашел на первый вопрос второй пользователь сразу после
регистрации на второй вопрос )
Думаю надо использовать session ejb (т.к. БД нет), думаю stateful!!!
но не получается переменные все равно не сохраняются за пользователем.

Также думаю можно в jsp по session.setAttribute закрепить определенное значение за определенным клиентом.
Я уже не знаю что делеть... помогите ... люди...
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2010, 10:25
Ответы с готовыми решениями:

Можно ли на JSP создать массив JavaBean'ов?
собственно сабж...вопрос вот в чем: можно ли на JSP создать массив JavaBean'ов.

WAR = EJB + SERVLET,JSP
Доброй ночи, изначально создавался проект для каталога товаров с помощью сервлетов и jsp, сейчас надо добавить SessionBean, возможно ли все...

EJB+JSP+MySQL+NetBeans IDE
Посоветуйте, пожалуйста, литературу по JavaEE с использованием технологий JSP, EJB, JDBC(MySQL). Желательно, чтобы было с примерами и лучше...

22
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
14.07.2010, 11:20
Если пойдет залипуха, можно сделать класс, в котором есть static переменная - Map, в котором хранятся JavaBeans, в каждом из которых хранится разобранный XML-файл. Там же минимальная рулежка: проверять, есть ли уже готовый бин для имени файла, если нет, создавать, etc. Пользовать можно как в web-приложении, так и через EJB фасад.
Если залипуха не пойдет, нужно сделать Entity EJB с BMP, и написать persistance layer, который будет работать с вашими XML файлами.
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
14.07.2010, 12:04  [ТС]
Дмитрий, а можно по подробней про тот класс со
satic переменной (если можно распиши немножко)
это т.е. надо создать массив бинов например так:
MyBean[] mb = new MyBean[10]; // на 10 клиентов
...
mb[i].getXXX; //а как же чтоб i не переопределялась

или это даже близко не прото???
распиши, а!!!
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
14.07.2010, 13:03
Массив бинов создавать как раз не нужно. Если несколько клиентов будут работать с одним и тем же экземпляром бина, то будут видеть результаты работы друг друга. Вот классы:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
package something;
 
import java.util.Map;
import java.util.HashMap;
 
public abstract class SomeCache {
 
    /**
     * Здесь создать бин, разобрать XML, заполнить бин из XML.
     */
    abstract protected SomeBean createAndPopulate(String id);
 
    public final static SomeBean find(String id) {
        return getInstance().findEntity(id);
    }
 
    public synchronized final static boolean setImplementationClassName(String className) {
        if (instance == null) {
            implementationClassName = className;
            return true;
        } else {
            return false;
        }
    }
 
    /////////////////////////////////////////////////
 
    private static SomeCache instance;
    private static String implementationClassName = 'something.SomeCache';
 
    private static final SomeCache getInstance() {
        if (instance == null) synchronized(SomeCache.class) {
            if (instance == null) {
                try {
                    instance = (SomeCache) Class.forName(implementationClassName).newInstance();
                } catch (Exception e) {
                    // Здесь вероятно придется сделать что-то другое, в соответствии со способом
                    // обработки ошибок, принятом в твоей программе.
                    e.printStackTrace();
                }
            }
        }
        return instance;
    }
 
    private Map cache = new HashMap();
 
    private final SomeBean findEntity(String id) {
        SomeBean bean = (SomeBean) cache.get(id);
        if (bean == null) synchronized(this) {
            bean = (SomeBean) cache.get(id);
            if (bean == null) {
                bean = createAndPopulate(id);
                cache.put(id, bean);
            }
        }
        return bean;
    }
}
 
package something;
 
public class SomeBean {
    private String name;
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public SomeBean(String name) {
        this.name = name;
    }
 
}
 
package something;
 
public class MyCache extends SomeCache {
 
    protected SomeBean createAndPopulate(String id) {
        System.out.println('=== Creation bean for id ' + id);
        return new SomeBean(id);
    }
}
 
package something;
 
public class Test {
 
    static {
        SomeCache.setImplementationClassName('something.MyCache');
    }
 
    public static void main(String argc[]) {
        String vals[] = {'qwe', 'asd', 'qwe', 'zxc', 'wer', 'zxc', 'asd'};
        SomeBean sb;
        for (int i = 0, bound = vals.length; i < bound; i++) {
            sb = SomeCache.find(vals[i]);
            System.out.println(sb.getName());
        }
    }
 
}
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
14.07.2010, 13:33  [ТС]
Дмитрий!!! Я потрясен (в коды еще не въезжал, но...)
неужели ты ради меня все это набивал СПАСИБО ТЕБЕ БОЛЬШОЕ за труд!!!
Может конечно там все верно , но вот более примерное сотояние на данный
момент:

клиент --> web-сервер --> XML-файл

start.html - там клиент вводит имя ,id теста... нажимает кнопку

test.jsp - данная устанавливает в бине те значения которые ввел клиент

...
mybean.setIDTheme(request.getParameter(' id'));
...

и перенаправляет зарос на

main.jsp - которая выводит из бина (тему, вопросы...) при нажатии там на кнопку сессия я так понимаю начиная с test.jsp и main.jsp обновляется со значением счетчика вопросов Count++;

когда конец вопросов (результат также из бина т.е. из XMLа) выводится резальтат.

Если ты имел ввиду ту же самую задачу то ОГРОМНОЕ ТЕБЕ СПАСИБО.
P.S. я ВПЕРВЫЕ сегодня в форуме поэтому еще ОГРОМНОЕ ТЕБЕ СПАСИБО.
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
14.07.2010, 14:37
1.Я не имел в виду никакой конкретной прикладной задачи, а только способ доступа к общим ресурсам из разных классов.
2.Задачу в том виде, как она выглядит после уточнения, можно решить разными способами, в том числе и тем, который был предложен.
Но более адекватно в твоем случае было бы просто складывать бины в контекст приложения. С точки зрения сервлета это getServletConfig().getServletContext().s et/getAttribute(...), а с точки зрения JSP - <jsp:useBean id='...' class='...' scope='application'/>.
Хотя задача до конца все равно не ясна и, возможно, потребуется еще что-то. Конкретно, неясно следующее: если один пользователь проходит тест X, то сколько бы пользователей еще ни захотело пройти тот же тест, все они будут работать на один общий результат.
По-моему, постановка задачи странная.
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
14.07.2010, 15:41  [ТС]
Я благодарен тебе что Ты находишь время помочь мне!
И был бы еще более благодарен чтоб Ты остался в online еще.

Попробую объяснить задачу:

1.На машине админа стоит Web-server который управляет JSP.
2.Клиенты конектются к нему, например: ttp:\server:8080start.html
3.Там форма для регистрации (Имя, ID - теста) и кнока при нажатии на которую происходит ...action='test.jsp'>...
4.Страница Test.jsp не визуальная она отлавливает запросы со start.html и устанавливает их в бине, например:
<% mybean.setUserName(request.getParameter( 'username')); %> и делает forward на страницу main.jsp
5.Страница main.jsp (сновная) содержит форму с на которой :Темf теста, чекбоксы и наротив каждого вариант ответа,
и кнопка (тоже submit) ,при нажатии на нее происходит следующее: счетчик вопросов устанавливается на 1 больше,
проверяется значение верности ответа пользователя (верные суммируются для оценки).
Если значение кол-ва вопосов mybean.setAllQuestions()==Cout где Count - счетчик числа вопросов (их номер), то
...<jsp:forward page='/result.jsp' />...

надо чтобы пользователи работали совершенно независимо от начала и до конца, если один закончил
посмотрел свои результаты (а все результаты пишутся в один файл append'ом, но это уже другая история )
и пошел покурить, в то время как другие еще отвечают или пиво пьют - это не важно интернет ведь.
НУЖНА СТРОГО НЕЗАВИСИМАЯ РАБОТА ПОЛЬЗОВАТЕЛЕЙ!

СПАСИБО, ЧТО ПОМОГАЕШЬ (а то я один (никто в java не шарит и даже Пахан который тут рядом со мной сидит!))
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
14.07.2010, 16:48
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Задача ясна. Сказать можно следующее:
1. Test.jsp должна была родиться сервлетом.
2. Строго корректное решение задачи будет сложновато, учитывая, что некому толком помочь. Поэтому, я думаю, будет правильно сделать упрощенный вариант. Его ограничение - не будет работать на кластерах, поэтому он на самом деле не J2EE-compliant.
3. Предлагаемое решение: 
  3.1. Сеанс тестирования представлен Stateful EJB. Он хранит:
    3.1.1. Описание теста
    3.2.2. Текущее состояние процесса тестирования.
  3.2. Ссылки на сеансы тестирования хранятся в статическом кэше, пример кэша - смотри выше. Обрати внимание на следующее:
    3.2.1. Ключом в кэше должен являться какой-л. объект, представляющий имя пользователя и id теста. Чтобы не заморачиваться, можно сделать строку userName + '|' + testId.
    3.2.2. Значениями в кэше будут являться ссылки на home-интерфейсы бинов. Если бины будут экспонироваться через remote интерфейсы, то в кэше нужно хранить handles: myBeanRef.getHandle().
    3.2.3. Класс кэша кладется в war - файл. 
  3.3. Последовательность состояний:
    3.3.1. Контроллер (сервлет, бывший Test.jsp) получает запрос на подключение пользователя A для прохождения теста X. 
    3.3.2. контроллер формирует ключ: 'A|X', и ищет в кэше home interface бина, представляющего сеанс тестирования. Если такого нет, кэш его создает и инициализирует, а при инициализации бин загружает описание теста и устанавливается в начальное состояние.
    3.3.3. Контроллер берет из Stateful Bean даные, необходимые для формирования страницы, кладет в JavaBean (который не EJB), кладет этот bean в HttpSession, делает redirect на JSP, которая будет формировать нужный экран.
    3.3.4. Дальше ты знаешь.
В результате, если, например, сеанс тестирования прервался, и потом пользователь входит снова с тем же именем и id теста, попадет в свой незавершенный тест. Если же регистрируются другие пользователи для выполнения того же теста, у них будут отдельные сеансы тестирования.
Обрати внимание, когда ты будешь уничтожать бины. Проще всего в последней форме (просмотр результатов) сделать кнопку 'сброс результата тестирования'. Но в любом случае, сеанс тестирования не переживет рестарта сервера (для большинства серверов), поэтому в принципе можно вообще на эту тему не заморачиваться.
 
Творческих успехов.
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
14.07.2010, 16:50
Прошу прощения, пункт 3.3.2 читать
контроллер формирует ключ: 'A|X', и ищет в кэше local interface бина, ...
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
14.07.2010, 17:15  [ТС]
Вопрос обычный.
Тебе сколько лет-то?
Небось в Sun'e работаешь?
Ты случайно с Д.Гослингом или Б.Джоем не знаком?

Я не смеюсь, просто очень неожидано что чел из нета
мне решил конкретно помочь.

В 17.00 конец рабочего дня , попрусь домой, так что забей до завтра, попробую твои советы!!!
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
14.07.2010, 17:59
35
не работал
не знаком
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
15.07.2010, 10:47  [ТС]
Вчера к сожалению не смог воплотить твои идеи
(насчет Stateful EJB и кеша (так и не понял как его реализовать))
Но это еще впереди.
А можно -ли так (если задача тобой еще не забыта):

1. Все остается такое же кривое как сейчас, но
2. т.к. сессия является (в какой-то степени) идентификатором клиента
при каждом переходе на новый вопрос в начале кода что-то типа:
..........
out.print(session.getAttribute('theme')) ;
............
// а в конце jsp-кода
session.setAttribute('theme',bean.getThe me()); // но тут проблемы с bean.getTheme()

и так же про номер count вопроса тоже в сессию забивать...

где-то рядом... но физически не получается .... немного.... или много....

если эта идея полная лажа
распиши ПОЖАЛУЙСТА в кодах, про там что у тебя так супер начинается -- 'Задача ясна...'
ты там еще много разных пунктов описывал... все это круто... йоу...
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
15.07.2010, 11:26
Так сделать можно, но тогда состояние сеанса тестирования будет видно, по определению, только в той же HTTP сессии. Когда клиент зарегистрируется в следующий раз, сессия будет новая, а увидеть из сервлетов/JSP не свои сессии невозможно. Если нужно реализовать сеанс, который живет дольше HTTP-сессии (или просто виден из нескольких сессий), придется делать кэш в том или ином виде. То, что было предложено - почти самый простой вариант. Еще проще - заменить Stateful EJB на обычные Java классы, и хранить их непосредственно в кэше. Но это будет уже совсем не-J2EE подход, потому что при большом количестве пользователей такая программа будет съедать много памяти, в то время как EJB могут быть пассивированы сервером, если он посчитает нужным. Расписать все в кодах не получится: великоват объем, как кода так и работ. Внимательно прочти предложенное решение и пример реализации кэша, там все достаточно подробно описано.
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
15.07.2010, 11:47  [ТС]
Правильн-ли я понял:
В stefule переписываю весь свой бин (разбор xml'a и растаскивание его по методам (всякие так set/getXXX и ...void Разбор(){...} )
после чего из jsp обращаемя к этому stateful'у и выдираем от туда методы
а фигней (в jsp) create(параметры) зада ем начальнае параметры данной хрени... так не получается ... не могу... блин... ему (stateful'у) по барабану и переменные он у меня не сохраняет за конкретным пользователем...
0
1 / 1 / 2
Регистрация: 07.01.2010
Сообщений: 128
15.07.2010, 14:35
1.Вообще-то, я видел это иначе: stateful bean не используется непосредственно из JSP,
вместо этого диспетчер - сервлет создает обычный JavaBean, заполняет его данными из Stateful EJB,
кладет в HTTP session, а JSP использует уже его.
2.Stateful bean сохраняет все, что нужно. Правда пользователь ему действительно 'по барабану'.
Если у тебя это не работает, значит, ты что-то делаешь неправильно.
Боюсь, придется прочесть спецификации сервлетов и EJB перед тем как продолжать.
Невозможно оба эти документа пересказать здесь.
0
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
15.07.2010, 15:27  [ТС]
СПАСИБО ДМИТРИЙ ТЕБЕ ЗА ВСЕ!!!!
ТЫ НАСТОЯЩИЙ МУЖИК!!!!
поробу все... что говорил... но тему пока оставля открытой
(на случай если еще прийдут новые мыси)
....А ТАК ВСЕ КРУТО... БУДЕМ РАБОТАТЬ!!!! СПАСИБО!!!
0
0 / 0 / 0
Регистрация: 11.02.2010
Сообщений: 111
16.07.2010, 00:05
А чем тебе СУБД не угодили?
0
mishgun
16.07.2010, 00:21
ya vot ne poymu a kto vam meshaet sdelat javaBean sessionnym?Zachem lepit tsepochku jsp ->javabean->EJB?
-10 / 0 / 0
Регистрация: 14.07.2010
Сообщений: 82
19.07.2010, 10:19  [ТС]
за выходные немного подумал!!! плюнул на все (или почти все!!!)
и сделал через session.set/getXXX . теперь тема теста (и соответственно вопросы закрепляются за соответствующей сессией (т.е. клиентом)) теперь остается закрепить счетчик вопросов (думаю это будет также)!!!
я понимаю что это полная ЛАЖА, но я уже конкретно задолбался с этим. Но тем не менее на JAVA ишу уже давно (просто видимо я такой глупый), и вот что я Вам скажу:'JAVA ЭТО КРУТО!!!'
0
mishgun
19.07.2010, 17:50
Goda poltora nazad ya napisal takoy test dlya svoey zheny.Kupila glupaya CD s testom po igloterapii (razrabotchiki kitaytsy sootvetstvenno) tak vot na kitayskom test pahal a na angliyskom net(Front end - VB).Ya vidral ottuda bazu(Access of course) i napisal test pod resinoy.JSP+JavaBeans .Vsyo rabotalo... I ya ne soglasen chto eto koryavo.... A na Java pishut kak raz ne glupie ludi.Znaval ya ludey kotorie snachala shli uchit Java a potom brosali i sadilis za VB tak kak on legche.Ne v obidu ludyam pishushim na VB budet skazano....
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.07.2010, 17:50
Помогаю со студенческими работами здесь

Jsp-Servlet-XXX-EJB. Кто что использует в ХХХ?
Как вопрос, кто что использует, или использует ли что нибудь вместо XXX в этой цепочке. У нас в прокете исторически там используются...

Java или JavaBean в чём отличие ?
Подскажите новечку чем отличается JavaBean от Java Что лучше начать учить ?

JSP или SWING+JSP или иное
Добрый день. Ведется разработка web приложения используя pojo, доменная архитектура, которая должна будет вручную позволить (создать...

Форма-почтой через сервлет или javabean
Форма-почтой через сервлет или javabean. Вообще такое возможно? Если да, то, пожалуйста, поделитесь исходничком.

Исходники книги "Буди Курняван - Создание web-приложений на языке java с помощью сервлетов jsp и ejb"
Здравствуйте! Как то наталкивался в сети на исходники книги Буди Курняван - Создание web-приложений на языке java с помощью сервлетов jsp и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru