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.