Giter Club home page Giter Club logo

belhard-servlet-laba-2's Introduction

Belhard-Servlet-Laba-2

Servlet API.

Задание-2.

Генератор рекомендательных писем.

Друзья, это единственное задание из текущей темы, которое потребует от Вас создания «нестандартных» сервлетов. Дело в том, что при разработке всех остальных задач от Вас в качестве ответа будет требоваться HTML документ, записанный в текстовый поток вывода. Но только сегодня, проездом в нашем городе, с единственным концертом и только для Вас… Неповторимое и леденящее кровь шоу… Вы готовы удивляться?.. Запись бинарного ответа в байтовый поток вывода!!! Ну а попутно мы рассмотрим еще два (а если пожелаете, то и три) практических момента, которые, возможно, пригодятся Вам в реальной работе. Хотя, нет, соврал – один из этих моментов точно не пригодиться, так что я бы на Вашем месте выбирал три, чтобы больше получилось.

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

Итак, обо всем по порядку. В рамках текущего задания, Вам необходимо реализовать сервлет, который отобразит для пользователя форму со следующими компонентами:

Название Тип компонента
1 Фамилия слушателя Текстовое поле
2 Имя слушателя Текстовое поле
3 Отчество слушателя Текстовое поле
4 Дата начала занятий DatePicker
5 Дата окончания занятий DatePicker
6 Список тем, изученных самостоятельно.
7 Тема курсового проекта Многострочное поле ввода – TextArea
8 Оценка курсового проекта Combobox со следующими вариантами:
  • Отлично
  • Хорошо
  • Удовлетворительно
9 Фамилия преподавателя Текстовое поле
10 Имя преподавателя Текстовое поле
11 Отчество преподавателя Текстовое поле
12 Упаковать в архив CheckBox
13 Тип архива Радио кнопки со значениями:
  • zip
  • jar
  • 14 Сгенерировать письмо Кнопка submit.

    Приведем некоторые комментарии к таблице компонентов.

    Во-первых, не забывайте, пожалуйста, что любая качественная программа должна заботиться о валидации введенных пользователем значений. Я думаю, что мы уже достаточно поговорили с Вами о валидации данных в задаче №1, поэтому здесь ограничимся лишь короткими тезисами – валидация данных должна присутствовать в Вашем сервлете, и ее правила Вы должны продумать самостоятельно.

    Во-вторых, пункт номер №6 – «Список тем, изученных самостоятельно» – не дает точного типа компонента. Я бы на Вашем месте рассматривал два варианта реализации:

    В-третьих, обратите, пожалуйста, внимание на еще одно важное требование для пункта №6. Список тем не должен располагаться в Вашем исходном коде! Вместо этого, все темы должны загружаться из внешнего текстового файла, что позволит пользователям сервлета в любой момент изменить список предлагаемых тем либо дополнить его.

    В-четвертых, пункт №12 – «Упаковать в архив». Это CheckBox, который не отправляется на сервер для обработки. Он служит только лишь для клиентской логики, и, если он выбран, то радио кнопки из пункта №13 становятся активными (enabled). И при помощи этих кнопок, пользователь может указать, что он хочет упаковать получившийся файл с рекомендацией в один из доступных архивов – ZIP или JAR

    Вот здесь мы вплотную и подошли к результатам работы нашей системы. После того, как пользователь корректно заполняет форму и наживает кнопку «Сгенерировать письмо», управление передается сервлету, который:

    1. Считывает шаблон рекомендательного письма из внешнего файла (подробнее об этом будет рассказано ниже).
    2. Располагает в этом шаблоне все данные, которые он получил от формы, описанной выше.
    3. Записывает полученный результат в текстовый файл.
    4. И отправляет этот файл, как бинарную информацию по средствам байтового потока вывода.
    5. В результате чего на клиентской стороне браузер открывает пользователю стандартное диалоговое окно, которое спрашивает у пользователя, что он хочет сделать с полученным файлом – открыть его одной из стандартный программ либо сохранить на файловой системе.

    Архивация файла с рекомендательным письмом. Как Вы могли видеть выше, у нас есть требование – результирующий файл может архивироваться либо в 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:
        ...

    и применил полученные знания, как при выполнении домашних заданий, так и во время разработки итогового проекта. Курсовой проект был выполнен по теме «Тема курсового проекта» и сдан с оценкой «отлично».

    По стилю работы Сидор склонен к работе в команде, демонстрируя ответственность, внимательность к деталям, а так же способность быстро и чётко выражать свои мысли.

    В целом Сидор характеризуется как прилежный слушатель и перспективный сотрудник. Я буду рад, если в будущем мы сможем работать не как «преподаватель-слушатель», но как коллеги.

    Преподаватель______________________________Сидоров Иван Петрович


    Recommend Projects

    • React photo React

      A declarative, efficient, and flexible JavaScript library for building user interfaces.

    • Vue.js photo Vue.js

      🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

    • Typescript photo Typescript

      TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

    • TensorFlow photo TensorFlow

      An Open Source Machine Learning Framework for Everyone

    • Django photo Django

      The Web framework for perfectionists with deadlines.

    • D3 photo D3

      Bring data to life with SVG, Canvas and HTML. 📊📈🎉

    Recommend Topics

    • javascript

      JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

    • web

      Some thing interesting about web. New door for the world.

    • server

      A server is a program made to process requests and deliver data to clients.

    • Machine learning

      Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

    • Game

      Some thing interesting about game, make everyone happy.

    Recommend Org

    • Facebook photo Facebook

      We are working to build community through open source technology. NB: members must have two-factor auth.

    • Microsoft photo Microsoft

      Open source projects and samples from Microsoft.

    • Google photo Google

      Google ❤️ Open Source for everyone.

    • D3 photo D3

      Data-Driven Documents codes.