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?
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.