структура кода сервлета / идеи шаблонов? письменный ответ - PullRequest
1 голос
/ 09 июня 2011

У меня есть простой сервлет на данный момент. Мне нужно, чтобы он вызывал статический jar-метод и возвращал его ответ.

1) Может ли кто-нибудь порекомендовать подходящую структуру, т. Е. Нужно ли мне создавать фабрики и классы обработчиков и т. Д ...

2) Как мне закодировать хэш в ответе ... Можно ли просто записать в выходной поток что-нибудь еще? Т.е. пишите в заголовки и т.д .. Другое приложение будет читать ответ.

3) Не уверен насчет обработки нулей и т. Д.

package myproj.servlet;

//Std imports
//Serlet imports
import myproj.hash.HashGenerator;

public class MyServlet extends HttpServlet{

String hashcode;

protected void doPost(HttpServletRequest req, HttpServletResponse resp)
        throws ServletException, IOException {

    String accountName = req.getParameter("accountName");

    try {
        hashcode = HashGenerator.hash(accountName);
        resp.setContentType("text/plain");
        PrintWriter out = resp.getWriter(); 
        //[EDIT] was returning accountName by accident
        out.print(hashcode );

    } catch (Exception e) {
        //Some logging code
    }

}

Ответы [ 2 ]

1 голос
/ 09 июня 2011

При работе с сервлетами напрямую помогает создать класс BaseServlet для наследования, который предоставляет удобные методы для:

  • обработки / проверки параметров
  • анализа информации о пути
  • сопоставление исключений Java с кодами результатов HTTP
  • и т. Д. *

Обычно вы хотите определить один handle(HttpRequest req, HttpResponse) метод, вызываемый из doGet / doPost,так что вы можете переместить всю общую обработку ошибок за пределы своего реализующего класса.В зависимости от того, насколько сложны ваши ответы, вы можете даже захотеть сделать handle(PrintWriter out), чтобы вам не приходилось каждый раз возиться с вещами io.

Наличие фабрик ради фабрик - это очень Javaчто делать, но я не понимаю, как это могло бы принести вам пользу.

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

3) вы определенно хотите проверить свои параметры и отправить обратно код состояния 400, если у вас нет действительного ввода.

Адил уже указал на явную проблему с hashcode.

Если вы ожидаете, что это станет более сложным, Jersey является отличной платформой для реализации удаленных сервисов между приложениями (даже если они, строго говоря, не RESTful).

1 голос
/ 09 июня 2011

Прежде всего, ваш hashcode не является поточно-ориентированным.

  1. После просмотра предоставленного фрагмента.Я так не думаю.Это довольно простая вещь.

  2. Вы получаете accountName в качестве параметра, а затем записываете его обратно.Это ты хочешь?Или вы имеете в виду ответить хешированной версией.

  3. Возможно, вы захотите проверить параметр accountName, так как это ввод, предоставленный пользователем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...