Desenvolvimento Web Java

Data de postagem: 09/06/2020 01:03:11

Conceitos de desenvolvimento web com Java

Com o avanço da tecnologia sobre redes de computadores e com o crescimento da internet, as páginas web estão se tornando cada vez mais atraentes e cheias de recursos que aumentam a interatividade com o usuário.

Quando falamos em aplicações web, estamos nos referindo a sistemas ou sites onde grande parte da programação fica hospedada em servidores na internet, e o usuário (cliente) normalmente não precisa ter nada instalado em sua máquina para utilizá-las, além de um navegador (browser).

O acesso às páginas desses sistemas é feita utilizando o modelo chamado de request- response, ou seja, o cliente solicita que alguma ação seja realizada (request) e o servidor a realiza e responde para o cliente (response).

Na plataforma Java, esse modelo foi implementado através da API de Servlets. Um Servlet estende a funcionalidade de um servidor web para servir páginas dinâmicas aos navegadores, utilizando o protocolo HTTP.

No mundo Java, os servidores web são chamados de Servlet Container, pois implementam a especificação de Servlet. O servidor converte a requisição em um objeto do tipo HttpServletRequest. Este objeto é então passado aos componentes web, que podem executar qualquer código Java para que possa ser gerado um conteúdo dinâmico. Em seguida, o componente web devolve um objeto HttpServletResponse, que representa a resposta ao cliente. Este objeto é utilizado para que o conteúdo gerado seja enviado ao navegador do usuário.

Containers

Containers são interfaces entre componentes e funcionalidades de baixo nível específicas de uma plataforma. Para uma aplicação web desenvolvida em Java ou um componente corporativo ser executado, eles precisam ser implantados em um container.

Os containers também são chamados de servidores de objetos, ou servidores de aplicação, pois oferecem serviços de infra-estrutura para execução de componentes.

O EJB Container suporta Enterprise JavaBeans (EJB), que são componentes corporativos distribuídos. Os Servlets, JSP, páginas JSF e arquivos estáticos (HTML, CSS, imagens e etc) necessitam de um Web Container para ser executado.

Existem diversas organizações que desenvolvem containers Java EE, por exemplo: Oracle, IBM, Red Hat, Apache, etc. Apesar de tantas ofertas gratuitas, algumas empresas ainda vendem licenças de seus próprios servidores, pois oferecem suporte diferenciado ao cliente e normalmente implementam funcionalidades que os servidores gratuitos talvez não possuam.

Para nossos projetos, usaremos o Apache Tomcat, pois é leve, gratuito e muito popular.

O processo de instalação do Apache Tomcat é simples, basta descompactar o arquivo baixado no local desejado.

Para verificar se a instalação foi bem sucedida, no Windows, acesse o diretório bin e execute o arquivo startup.bat para iniciar o servidor. Você já deve ter a JDK (Java Development Kit) instalado em seu computador para executar este passo.

No Linux ou Mac, acesse o diretório bin do Tomcat e digite: $ chmod +x *.sh

$ ./startup.sh; tail -f ../logs/catalina.out

Abra um browser e acesse o endereço http://localhost:8080.

Ferramentas Build

Durante o aprendizado, todo desenvolvedor Java acaba entrando em situações um tanto quanto complexas em seus projetos, seja de estudo, trabalhos acadêmicos ou até mesmo no trabalho.

Dentre elas, temos alguns exemplos de cenários comuns no dia a dia:

    • Estruturar arquivos fonte
    • Uso de uma nova biblioteca
    • Realização de testes
    • Incompatibilidade entre IDEs
    • Empacotamento e distribuição da aplicação
    • Considerando todos esses cenários entre outros, percebemos que se trata de tarefas
      • comuns em diversos projetos da atualidade, mas, ao mesmo tempo, vemos que são rotinas um tanto quanto trabalhosas, ainda mais se percebemos que que elas tendem a ser executadas constantemente.
      • Pensando justamente no trabalho que temos nessas tarefas que não podemos simplesmente descartar, foram criadas algumas ferramentas que automatizam todos esses processos, essas ferramentas são conhecidas como build tools ou, no português bem forçado, ferramentas de construção.
      • As principais são:
      • ANT – uma das primeiras mas ainda exigia muitas configurações manuais;
      • Maven – é um gerenciador de projeto automatizado que se utiliza de repositórios de
      • dependências.
      • Fonte: https://medium.com/@alex.felipe/entenda-o-que-s%C3%A3o-build-tools-do-mundo-java-682a26e38ff2
      • Apache Maven
      • Maven é uma ferramenta da Apache Software Foundation para gerenciamento de dependências e automação de build, principalmente em projetos Java.

Um projeto que usa Maven possui um arquivo XML (pom.xml) que descreve o projeto, suas dependências, detalhes do build, diretórios, plugins requeridos, etc. Este arquivo é conhecido como POM (Project Object Model).

Persistência de dados

A maioria dos sistemas desenvolvidos em uma empresa precisa de dados persistentes, portanto persistência é um conceito fundamental no desenvolvimento de aplicações. Se um sistema de informação não preservasse os dados quando ele fosse encerrado, o sistema não seria prático e usual.

Quando falamos de persistência de dados com Java, normalmente falamos do uso de sistemas gerenciadores de banco de dados relacionais e SQL, porém existem diversas outras alternativas para persistir dados, como em arquivos XML, arquivos texto e etc.

Mapeamento Objeto Relacional (ORM)

Mapeamento objeto relacional (object-relational mapping, ORM, O/RM ou O/R mapping) é uma técnica de programação para conversão de dados entre banco de dados relacionais e linguagens de programação orientada a objetos.

Em banco de dados, entidades são representadas por tabelas, que possuem colunas que armazenam propriedades de diversos tipos. Uma tabela pode se associar com outras e criar relacionamentos diversos.

Em uma linguagem orientada a objetos, como Java, entidades são classes, e objetos dessas classes representam elementos que existem no mundo real. Por exemplo, um sistema de faturamento possui a classe NotaFiscal, que no mundo real existe e todo mundo já viu alguma pelo menos uma vez, além de possuir uma classe que pode se chamar Imposto, que infelizmente todo mundo sente no bolso. Essas classes são chamadas de classes de domínio do sistema, pois fazem parte do negócio que está sendo desenvolvido.

Em banco de dados, podemos ter as tabelas nota_fiscal e também imposto, mas a estrutura de banco de dados relacional está longe de ser orientado a objetos, e por isso a ORM foi inventada para suprir a necessidade que os desenvolvedores têm de visualizar tudo como objetos para programarem com mais facilidade.

Podemos comparar o modelo relacional com o modelo orientado a objetos conforme a tabela abaixo:

Essa comparação é feita em todo o tempo que se está desenvolvendo usando algum mecanismo de ORM. O mapeamento é feito usando metadados que descrevem a relação entre objetos e banco de dados.

Uma solução ORM consiste de uma API para executar operações CRUD simples em objetos de classes persistentes, uma linguagem ou API para especificar queries que se referem a classes e propriedades de classes, facilidades para especificar metadados de mapeamento e técnicas para interagir com objetos transacionais para identificarem automaticamente alterações realizadas, carregamento de associações por demanda e outras funções de otimização.

Em um ambiente ORM, as aplicações interagem com APIs e o modelo de classes de domínio e os códigos SQL/JDBC são abstraídos. Os comandos SQL são automaticamente gerados a partir dos metadados que relacionam objetos a banco de dados.

Framework

Em uma busca rápida na web, é possível encontrar diversas definições para Framework, algumas simples, outras mais elaboradas, mas o ponto comum entre todas é a reusabilidade.

Assim um Framework tem como principal objetivo resolver problemas recorrentes com uma abordagem genérica, permitindo ao desenvolvedor focar seus esforços na resolução do problema em si, e não ficar reescrevendo software. Você pode se perguntar, então Framework é uma biblioteca? Bem quase isso, pode-se dizer que é um conjunto de bibliotecas ou componentes que são usados para criar uma base onde sua aplicação será construída.

Java Persistence API e Hibernate

A Java Persistence API (JPA) é um framework para persistência em Java, que oferece uma API de mapeamento objeto-relacional e soluções para integrar persistência com sistemas corporativos escaláveis.

Com JPA, os objetos são POJO (Plain Old Java Objects), ou seja, não é necessário nada de especial para tornar os objetos persistentes. Basta adicionar algumas anotações nas classes que representam as entidades do sistema e começar a persistir ou consultar objetos.

JPA é uma especificação, e não um produto. Para trabalhar com JPA, precisamos de uma implementação.

O projeto do Hibernate ORM possui alguns módulos, sendo que o Hibernate EntityManager é a implementação da JPA que encapsula o Hibernate Core.

O Hibernate Core é a base para o funcionamento da persistência, com APIs nativas e metadados de mapeamentos em arquivos XML. Possui uma linguagem de consultas chamada HQL (parecido com SQL), um conjunto de interfaces para consultas usando critérios (Criteria API), etc.

Padrão MVC

O padrão de projeto MVC (Model View Controller) torna o desenvolvimento de sistemas simplificado, separando o sistema em três responsabilidades (modelo, visualização e controle), onde o modelo é responsável por representar os objetos de negócio, manter o estado da aplicação e fornecer ao controlador o acesso aos dados. A visualização é responsável pela interface do usuário. Ela que define a forma como os dados são apresentados e encaminha as ações do usuário para o controlador. O controlador é responsável por ligar o modelo e a visualização, interpretando as solicitações do usuário, traduzindo para uma operação no modelo (onde são realizadas efetivamente as mudanças no sistema) e retornando a visualização adequada à solicitação.

Referência: https://cafe.algaworks.com/download-ebook-javaee-hw39x/