Servlet rodando aplicação Java

Tenho uma aplicação em java que foi desenvolvida e baseada no modelo de arquitetura em camadas. Sendo assim, a aplicação possui as classes básicas, de dados, controlador, interface e repositório.

A classe TelaCliente.java (executa a aplicação), possui um atribulo do tipo ControladorCliente, algumas rotinas para os métodos de Controlador e uma instância de Controlador.

Eu quero fazer este programa funcionar pela web, sendo assim terei que fazer um Sevlet…mas qual é a estrutura do Servlet que devo usar para executar essa aplicação quando o cliente (browser) fizer a requisição da página?

Grato pela força! 8)

Acho que o melhor é redesenhar totalmente a aplicação para adaptá-la ao uso de servlets.

O problema é que aplicações servlet são essencialmente multi-usuário e aplicações desktop, mono.

Mesmo que você vá utilizar o mesmo data source, cuidado. Pode haver problema de acesso simultâneo (transactions).

Resumidamente uma aplicação servlet pode ser assim descrita:

  • O navegador envia um método http GET ou POST ao servidor via web;

  • Transparentemente, o servlet engine no servidor cria uma instância de servlet, disponibilizando um objeto HttpServletRequest ao código da servlet, doravante chamado req;

  • Uma sessão é aberta chamando o método req.getSession(). Isso permite salvar dados entre múltiplos GETs e POSTs, já que cada GET ou POST fecha a conexão http;

  • Os dados vindos do navegador são recuperados através dos métodos
    req.getParameter() e req.getParameterValues(), etc.;

  • a servlet processa esses dados, eventualmente consultando/atualizando o banco de dados;

  • a servlet envia a página resposta através do objeto HttpServletResponse (getOutputStream() ou getPrintWriter());

  • observações:

    • evitar ao máximo usar membros estáticos;
    • usar com precisão a palavra-chave synchronized;
    • se possível usar os comandos de transactions SQL (commit, etc);
    • repassar para o servlet-engine as exceções através de throw new ServletExcption(e);
    • usar o método finally para não deixar recursos abertos à-toa;
    • abusar de todos os métodos close() das classes usadas (java.sql.Connection, PrintWriter, etc.).
    • usar sempre os códigos SC_XXX da classe HttpServletResponse.
  • para melhorar a eficência:

    • usar uma connection pool;
    • usar páginas dinâmicas (velox, por exemplo);
    • fazer cache de dados do backend (soft references?);
    • vale a pena investir num framework (struts? EJB?);
    • usar também JSP;

Conclusão: criar aplicações web é uma tarefa muito mais árdua que
aplicações desktop.