Сервлет doPost () Настройка метода? - PullRequest
2 голосов
/ 28 марта 2010

Я заинтересован в создании веб-приложения, которое использует JSP, Servlets и XML.

На данный момент у меня есть следующее:

JSP - Форма ввода.

Servlet - извлечение данных формы и отправка этих данных в java object.

Java object (1) - преобразует данные в XML файл .... создает экземпляр java object (2).

Java object (2) - отправляет этот файл в database.

На обратной стороне database отправит обратно еще один XML file, который я затем обработаю, используя XSLT для отображения пользователю.

Могу ли я поместить этот XSLT код в метод Servlets doPost()? Так что мой метод doPost () `будет:

  1. Извлекать введенные пользователем данные из формы на моем JSP page.

  2. Создание java object для преобразования этих данных в XML, в свою очередь object создаст экземпляр другого object для отправки XML file в database.

  3. Преобразует результирующее XML file, отправленное из database, и отображает его для пользователя.

Может ли один servlet doPost() метод обработать все это? Если нет, то как мне настроить приложение и classes для обработки этого рабочего процесса?

Заранее спасибо

Ответы [ 3 ]

2 голосов
/ 28 марта 2010

Я бы не стал загружать XSLT в POST, потому что каждый метод должен это делать.

Считайте этот XSTL в методе init, прекомпилируйте и кэшируйте его. Просто убедитесь, что вы держите его в безопасности.

После того, как у вас есть XSLT, вы должны применить его к каждому XML-ответу, поэтому эти шаги принадлежат POST.

1 голос
/ 28 марта 2010

Ну, это не совсем специфично для сервлетов, но больше относится к Java / OOP (объектно-ориентированному программированию) в целом. Фактически вы можете сделать все в одном методе, даже в методе main(). Но сотни или более строк в одном методе на самом деле не читаемы, не обслуживаемы, не пригодны для повторного использования и не проверяются в течение длительного времени. Прямо сейчас вы, вероятно, только начинаете с Java, и вам, вероятно, не нужно ничего делать, кроме этого, но если вам когда-нибудь понадобится дублировать (почти) одинаковые строки кода, тогда пришло время провести рефакторинг. Извлеките переменные из повторяющихся строк кода и оберните эти строки новым методом, который принимает эти переменные в качестве аргументов и выполняет простую одношаговую задачу.

В общем, вы бы хотели заранее разбить большую задачу на отдельные подзадачи, используя отдельные и повторно используемые классы и методы. В вашем случае, например, вы можете иметь один класс DAO для всех задач взаимодействия с БД, общий вспомогательный класс XML для преобразования Javabeans в XML и наоборот с помощью XSL и (возможно) объекта домена для управления вводом / выводом. обработка (преобразование / проверка / обработка ошибок / ответ) и выполнение действий. Запишите на бумаге, как большая картина должна быть достигнута в маленьких одиночных задачах. Каждое задание часто можно так же хорошо выполнить одним методом. Сгруппируйте методы с одинаковыми обязанностями и / или одинаковыми общими данными в одном классе.

Чтобы пойти дальше, для нескольких задач могут быть доступны сторонние инструменты, облегчающие задачу. Я могу представить, например, XMLBeans и / или XStream , чтобы выполнить преобразование Javabean <-> XML. Это уже сэкономило бы много стандартного кода и, вероятно, также шаг XSL.

Тем не менее, предложение Даффимо загрузить XSL только один раз является очень хорошим. Вам не нужно повторно выполнять точно одну и ту же задачу, которая снова и снова не зависит от параметров запроса снова и снова для каждого запроса, это только неэффективно.

1 голос
/ 28 марта 2010

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

Однако, похоже, что ваше требование рендеринга отличается от вашего представления формы и требования к хранению.Поэтому я бы сделал ваш метод doPost() делегированным подходящему методу для рендеринга вывода.Таким образом, вы можете генерировать вывод из хранимых данных отдельно от отправки данных в базу данных.

...