Друзья, это единственное задание из текущей темы, которое потребует от Вас создания «нестандартных» сервлетов. Дело в том, что при разработке всех остальных задач от Вас в качестве ответа будет требоваться HTML документ, записанный в текстовый поток вывода. Но только сегодня, проездом в нашем городе, с единственным концертом и только для Вас… Неповторимое и леденящее кровь шоу… Вы готовы удивляться?.. Запись бинарного ответа в байтовый поток вывода!!! Ну а попутно мы рассмотрим еще два (а если пожелаете, то и три) практических момента, которые, возможно, пригодятся Вам в реальной работе. Хотя, нет, соврал – один из этих моментов точно не пригодиться, так что я бы на Вашем месте выбирал три, чтобы больше получилось.
В этой задаче от Вас потребуется создание автоматического генератора рекомендательных писем для наиболее трудолюбивых слушателей нашего курса. Вы уже знаете, что после того, как наш курс закончится, тем из Вас кто работал больше и лучше своих коллег, наряду с сертификатом будет выдано рекомендательное письмо, которое Вы сможете предъявить в качестве дополнительного, пусть и неявного, и не всегда эффективного, но все же свидетельства Вашего конкурентного преимущества.
Итак, обо всем по порядку. В рамках текущего задания, Вам необходимо реализовать сервлет, который отобразит для пользователя форму со следующими компонентами:
№ | Название | Тип компонента |
---|---|---|
1 | Фамилия слушателя | Текстовое поле |
2 | Имя слушателя | Текстовое поле |
3 | Отчество слушателя | Текстовое поле |
4 | Дата начала занятий | DatePicker |
5 | Дата окончания занятий | DatePicker |
6 | Список тем, изученных самостоятельно. | |
7 | Тема курсового проекта | Многострочное поле ввода – TextArea |
8 | Оценка курсового проекта |
Combobox со следующими вариантами:
|
9 | Фамилия преподавателя | Текстовое поле |
10 | Имя преподавателя | Текстовое поле |
11 | Отчество преподавателя | Текстовое поле |
12 | Упаковать в архив | CheckBox |
13 | Тип архива |
Радио кнопки со значениями:
|
14 | Сгенерировать письмо | Кнопка submit. |
Приведем некоторые комментарии к таблице компонентов.
Во-первых, не забывайте, пожалуйста, что любая качественная программа должна заботиться о валидации введенных пользователем значений. Я думаю, что мы уже достаточно поговорили с Вами о валидации данных в задаче №1, поэтому здесь ограничимся лишь короткими тезисами – валидация данных должна присутствовать в Вашем сервлете, и ее правила Вы должны продумать самостоятельно.
Во-вторых, пункт номер №6 – «Список тем, изученных самостоятельно» – не дает точного типа компонента. Я бы на Вашем месте рассматривал два варианта реализации:
В-третьих, обратите, пожалуйста, внимание на еще одно важное требование для пункта №6. Список тем не должен располагаться в Вашем исходном коде! Вместо этого, все темы должны загружаться из внешнего текстового файла, что позволит пользователям сервлета в любой момент изменить список предлагаемых тем либо дополнить его.
В-четвертых, пункт №12 – «Упаковать в архив». Это CheckBox, который не отправляется на сервер для обработки. Он служит только лишь для клиентской логики, и, если он выбран, то радио кнопки из пункта №13 становятся активными (enabled). И при помощи этих кнопок, пользователь может указать, что он хочет упаковать получившийся файл с рекомендацией в один из доступных архивов – ZIP или JAR
Вот здесь мы вплотную и подошли к результатам работы нашей системы. После того, как пользователь корректно заполняет форму и наживает кнопку «Сгенерировать письмо», управление передается сервлету, который:
- Считывает шаблон рекомендательного письма из внешнего файла (подробнее об этом будет рассказано ниже).
- Располагает в этом шаблоне все данные, которые он получил от формы, описанной выше.
- Записывает полученный результат в текстовый файл.
- И отправляет этот файл, как бинарную информацию по средствам байтового потока вывода.
- В результате чего на клиентской стороне браузер открывает пользователю стандартное диалоговое окно, которое спрашивает у пользователя, что он хочет сделать с полученным файлом – открыть его одной из стандартный программ либо сохранить на файловой системе.
Архивация файла с рекомендательным письмом. Как Вы могли видеть выше, у нас есть требование – результирующий файл может архивироваться либо в ZIP формат, либо в JAR. Это, кстати и есть первый из тех практических моментов, о которых мы говорили вначале. В общем-то, добавлен он был для того, чтобы Вы вспомнили немного Java SE и поработали с такими классами, как
java.util.zip.ZipEntry java.util.zip.ZipOutputStream java.util.jar.JarEntry java.util.jar.JarOutputStream |
Обратите внимание, все классы, приведенные выше, лежат в пакете java.util.*, а значит, для их использования не нужно предпринимать никаких дополнительных усилий кроме импорта. А еще обратите внимание на то, что в архивы в Java – это потоки вывода. Соответственно, хотите записать файл – пишите в файл, хотите записать в архив – пишите в архив, не забывайте только, что в обоих случаях писать нужно в поток .
Формат выходного файла – практический момент №2. Выше мы описали требование, что форматом выходного файла с рекомендательным письмом должен быть текстовый файл. Но в реальном мире текстовые файлы Вы вряд ли будете отдавать пользователям. Они потребуют от Вас PDF-ов, XSL-лей, и прочих Word-ов! Так почему бы ни подготовится к их требованиям заранее? В результате получаем новую редакцию требования:
Выходным форматом файла может быть и текстовый формат, но лучше, если это будет файл в формате Microsoft Word.И вот тут возникает вопрос – как этот Word файл создать? Ответ очень прост – для этого Вам потребуется использовать какой-либо сторонний API, например Apache POI, домашняя странница которого расположена по адресу http://poi.apache.org/. А дальше? А дальше сами и с гуглом – ведь это же не обязательное требование, а так – рекомендация.
Ну и наконец, мы подошли к основному требованию данной работы:
Текст рекомендательного письма не должен быть жестко определен в Вашем исходном коде. Вместо этого, шаблон текста должен загружаться из внешнего текстового файла, и наполняться теми данными, которые сервлет получил в качестве параметров.
В результате имеем классический подход при генерировании разного рода отчетов – получая некий шаблонный текст, программа должна наполнить его актуальными данными. Ниже я приведу Вам текст шаблона, который Вы можете использовать, но помните, Вы работаете над своим будущим рекомендательным письмом – не пожалейте времени и придумайте тот текст, который наиболее точно и красочно подчеркнет все Ваши достоинства . Итак текст рекомендательного письма может быть следующим:
Петров Сидор Иванович обучался на курсах по предмету «Java Enterprise Edition» в период с 1 января 2014 г. по 1 декабря 2017 г. За время обучения Сидор проявил большое желание стать специалистом по проектированию и разработке программного обеспечения.
К занятиям готовился ответственно. Всегда выполнял домашнее задание. Самостоятельно, с использованием дополнительных материалов, освоил темы не входящие в состав предлагаемого курса такие как:
- Тема 1:
- Тема 2:
- Тема 3:
- ...
и применил полученные знания, как при выполнении домашних заданий, так и во время разработки итогового проекта. Курсовой проект был выполнен по теме «Тема курсового проекта» и сдан с оценкой «отлично».
По стилю работы Сидор склонен к работе в команде, демонстрируя ответственность, внимательность к деталям, а так же способность быстро и чётко выражать свои мысли.
В целом Сидор характеризуется как прилежный слушатель и перспективный сотрудник. Я буду рад, если в будущем мы сможем работать не как «преподаватель-слушатель», но как коллеги.
Преподаватель______________________________Сидоров Иван Петрович