Как мне добавлять в проекте Java-код в jsp? — КиберПедия 

Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Как мне добавлять в проекте Java-код в jsp?

2022-10-10 52
Как мне добавлять в проекте Java-код в jsp? 0.00 из 5.00 0 оценок
Заказать работу

· «<%= выражение %>» - после «=» должна быть написана команда. Результат выполнения этой команды… ну функция по сути вызывается, а она будет подставлена в том месте, где будет написан этот серверный скрипт.

· «<%код%>» - вы можете написать просто %. Это будет код метода сервиса. Это единственный метод, который вы должны переопределять, когда пишете свой собственный класс сервлета. Ну это если руками. А здесь-то мы не пишем его. Поэтому нам дали специальные теги с «%». Вот вы туда написали код и этот кусок и станет частью метода-сервиса.

· «<%!код%>» - Когда вы пишете любой свой класс, то вы куда пишете код? Вы можете написать код в метод, а можете написать член класса. Правильно? Вдруг вы хотите объявить переменную член-класса? Или какой-то вспомогательный метод написать? Вот с этим синтаксисом это делается.«<%!» - это будет означать – часть класса. Это метод или какая-то переменная объявлена.

Сейчас этим и займемся.

Важно не увлекаться с данными членами класса. Всё дело в том, что объект вашего класса service-сервлет будет создаваться веб-сервером – одна штука. А обращаться к нему будут из разных потоков. Он будет гарантированно в многопотоковом варианте работать. Поэтому если вы не создаете данные внутри этого класса, то он потокобезопасный по определению. А если вы туда наложите разных данных, то тогда синхронизация – это ваша большая проблема. Первые два варианта понятны. Есть еще третий вариант.

· Первый вариант: Нету данных – нет проблем

· Второй вариант: Есть данные – значит пишете синхронизацию

· Третий вариант: Можно указать (надо разбираться как, если пишем руками) класс сервлета. Пишется implementsи имя интерфейса. Если это имя указать, то это будет означать – я хочу, чтобы это был однопотоковый вариант работы. И данное имя интерфейса, которое вы указываете, запрещает обращаться из разных потоков к объекту. Это приказ.

Давайте вернемся на jspстраничку и напишем какое-нибудь вычисление через «<%=». Допустим у меня закончился тег <h1>

<h1>HelloWorld!</h1>

Я после этого заголовка хочу вывести дату. Так и пишу. Это же HTML.

Я пишу «Data =».А дальше пишу угловые скобки, т.к. хочу чтобы это определялось на сервере. У нас есть простой класс, который отвечает за дату и время.

Всё! Смотрите! F6 нажимаем. И радуемся! Работает!

Окей! Давайте еще попробуем! Я хочу в этот класс, который генерируется, написать какую-то замечательную вспомогательную функцию. Простите, функция – это часть класса, а значит «<%!код%>».

Между этими двумя тегами вы можете писать обычный код на Java! Допустим я напишу метод, который будет называться getList(). Этот список чего-то будет у нас массивом строк. Мне проще с этим работать. А это значит здесь я напишу String []. Ну мне не откуда взять строки. Поэтому я поступлю так. Я создам hard-codedмассив с названиями и верну из этого метода.

Если сейчас запустить программу, то мы увидим этот список на экране? Нет. Я же эту функцию не вызвал. А где вызвать ее надо? Можно также вызвать. А давайте проверим, как сервер сумеет отфармотировать список, если мы вернем массив строк. Я напишу List, пробел, угловые скобки, процент, равно и здесь подставлю вызов метода getList().Обратите внимание, что в этом коротком синтаксисе вы в конце не пишете «;».

Он взял объект и toStringему сделал. А мы хотели увидеть наших людей. Так что согласитесь, что такой вариант получился не очень хороший. Но чтобы написать цикл, надо написать просто код на Java. Это будет как раз третий вариант.

Я убираю от сюда «=». У нас будет «<%!код%>». Вот в этом пустом блоке я вызову метод. Получу результат. И сделаю с ним, что я хочу.

Внутри цикла мы можем написать System.out.println? Это не годится. Мы хотим в браузер информацию отправить. Если я нажму Ctrl+Пробел, то среда выдает мне самые основные доступные объекты, которые я могу использовать.

Кстати, вот они и requestи response. Вы же сейчас где находитесь? Вы сейчас пишете часть метода сервиса. Представьте себе заголовок service. У него параметры requestи response. Открывается фигурная скобка. И вы туда пишете кусок своего кода. Поэтому requestи response– они вам доступны. Но из response можно вынуть out. Но он уже вынут, чтобы вам не надо было напрягаться. Это уже есть тот самый объект, который позволит собрать результат, чтобы отправить его клиенту. Поэтому вы пишете out.

Теперь я могу рассказать, как генерируются классы. Теперь на этом примере могу показать, что происходит с каждой штукой. Готовы? Слушайте и я буду пытаться рисовать!

1. Компилятор генерирует код. Он пишет classServlet, он кому-то наследует, открывается фигурная скобка. Потом он пишет метод service. Он генерирует два параметра: «request»и «response». Открывается фигурная скобка.

2. Дальше, каждый ваш HTML-тег оборачивается в такую запись: out. println(" html-код"); и т.д.

3. А когда дело доходит до «%!», он говорит: «Аааа! Это кусок класса!». И пишет этот метод куда? Он его пишет в класс. Часть метода service.

4. А когда он видит просто «%», ну он его как он есть и оставляет в том месте, где он как раз и написан.

Это и получается тот самый ужас, который вы видели в начале. Но здесь он немного скрыт и это хорошо. Зато мы можем дизайнера приглашать на работу. Вот они сервлеты.

Ну и конечно, вы же понимаете, что если мы сейчас начнем в таком стиле программировать, то у вас будет на 3 строчки HTML10 строчек на Java. Это опять будет такой ужасный винегрет, в котором разбираться не айс. Поэтому нам надо стремиться к тому, чтобы кода на Java в принципе здесь было как можно меньше. Как это сделать? А не надо писать сюда развернутую бизнес-логику. Тем более, если вы здесь не дай Бог напишете обращение в БД на этой странице. Ну это уже совсем никуда не годится.

Я думаю, что вы понимаете, что страница JSP имеет много разных возможностей, и вот это просто одно из них. Но для нас это самое полезное и самое интересное. Я могу подключить к странице с помощью команды useBean объект вашего класса написанного на Java.Вот он и должен лезть в СУБД.

Что здесь за параметры? Естественно после атрибута class мы пишем полное имя класса. Какой объект создавать и какого типа? У объекта в программе должно быть имя. Вы потом к нему будете пытаться обращаться – id. idпозволяет задать ему имя – это имя ссылки? как мы привыкли. Т.е. если этот код писать обычным образом, то получится следующее:

Bookbook1 = newbook1;т.е. это ссылка на объект класса Book. И вот здесь есть один важный ньюанс. Параметр, к сожалению, здесь не показан, но если мы сами сейчас начнем программировать, то мы столкнемся с этим параметром. Дело в том, что используя настройки useBeanэтот вы можете опредилить область видимости объекта. Область видимости объекта book1 может быть от всего приложения Web-application–это значит, что он будет один для всех вообще; а может быть сессия и конкретная page-страница, тогда это будет один объект на один сеанс с пользователем и даже один объект без страницы. Если это один объект без страницы, то это значит, что он создается, страница возвращается клиенту, он разрушается на сервере и снова создается и снова разрушается. Поэтому смотрите. Выбирать вам.

Но если у вас сеанс с пользователем длится какое-то время, то именно тогда вы в этом объекте можете промежуточные результаты работы с пользователем сохранять. В первый раз, когда встретится команда useBeanи этот объект попытается найти. Например, область видимости – «сеанс», вот конкретный пользователь. Есть объект в book1? Нету. Значит создадут. А дальше он уже будет существовать. Любое повторное применение команды useBeanс именем book1, они будут искать объект book1. О! Есть! И значит будет использован старый вариант.

Класс нужно писать, в БД обращаться в этом классе! А уже на страничке создать объект, вызвать метод и получить свои данные. Вот и всё. Вот так легко и просто все должно выглядеть. Поэтому желательно, чтобы был практически один HTMLсо своими настройками и т.д.

Окей! Наша тогда задача! Написать класс, который получает данные из СУБД. Открываем проект. Находим в проекте папочку исходных кодов. Кликаем правой кнопочкой и выбираем «Новый пакет Java».

Назовем пакет «abc».

И в этот пакет мы поместим новый класс Java «Employee». У нас в packageabcлежит класс Employee, который в общем-то и должен работать с таблицей сотрудников в СУБД.

Это и будет наш Bean, который мы потом на странице подключим, с помощью специальной этой команды useBean. И пожалуйста, после этого он будет что-то делать. Давайте мы вначале протестируем, что все работает. Сейчас напишем кусочек кода без БД. Потому что если мы сразу весь код напишем, то потом у нас идет 20 минут отладки. Мы пытаемся понять, почему у нас вроде все работало, а мы же из предыдущего будем копировать, а здесь нет. Поэтому лучше мы сейчас допишем несколько тестовых функций, которые будут возвращать данные тестирования. Какой-то стандартный набор.

В БД надо залезть. Поэтому последний штрих к этой программе и JSP мы закрываем. Наша задача дальше такая. Мы сделали программу в текстовом режиме. Данные берутся с потолка. Соответственно, в этом getEmployeesдолжен возвращаться созданный массив сотрудников. А сотрудники вот эти из БД. Я понимаю, что там много было инфомации в БД. Менеджер и его имя, потом employee. Давайте только employeeбрать. Соответственно там должно быть четыре позиции email, fname, idне более чем. И еще что важно. Мы сейчас вместе скопипастим из ответов. Помните хранимую процедуру вызывали? Я возьму оттуда код. И сюда этот код подставим. А отладить и запустить программу – это каждый сам.

Давайте искать проект «sql3». Открываю sql, нахожу source, нахожу sql3.package. Вот она java. И ее в NotePadeоткрываю.

Копирую все что начинается с Class.forNameи заканчивается закрытием Connection. Да есть много лишнего, но мы это подредактируем. Всё. Сюда к нам в проект.

Вопрос остается только один. Как получить массив Employee? Массив имеет фиксированный размер. Мне нужно сформировать коллекцию, и поместим ее в while. А уже в returnя коллекцию превращу в массив.

Поповоду newEmployee[0] в return:

На самом деле этот параметр говорит методу toArray, что надо создать массив Employee. Потому что если взять версию toArrayбез параметров в круглых скобках, то он создает массив Object. А чтобы он знал какой тип создавать, мы ему говорим «Смотри, вот такой!». А мы же лишний объект создаем, который никому не нужен. Поэтому мы стараемся сделать этот объект, как можно меньше, а значит с 0 элементов.


Поделиться с друзьями:

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Наброски и зарисовки растений, плодов, цветов: Освоить конструктивное построение структуры дерева через зарисовки отдельных деревьев, группы деревьев...

Таксономические единицы (категории) растений: Каждая система классификации состоит из определённых соподчиненных друг другу...

История создания датчика движения: Первый прибор для обнаружения движения был изобретен немецким физиком Генрихом Герцем...



© cyberpedia.su 2017-2024 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.017 с.