0% acharam este documento útil (0 voto)
2 visualizações132 páginas

Tópicos 6 & 7 - Java Web

O documento aborda a programação para a web com foco na plataforma Java, incluindo conceitos de Java EE, HTTP, desenvolvimento de aplicações web e o uso do Spring Framework. Destaca a arquitetura MVC, a criação de páginas dinâmicas com JSP e Thymeleaf, e o acesso a dados utilizando JDBC e JPA. O conteúdo é estruturado em tópicos que facilitam a compreensão dos conceitos e práticas de desenvolvimento web em Java.

Enviado por

lhbarboz03
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd
0% acharam este documento útil (0 voto)
2 visualizações132 páginas

Tópicos 6 & 7 - Java Web

O documento aborda a programação para a web com foco na plataforma Java, incluindo conceitos de Java EE, HTTP, desenvolvimento de aplicações web e o uso do Spring Framework. Destaca a arquitetura MVC, a criação de páginas dinâmicas com JSP e Thymeleaf, e o acesso a dados utilizando JDBC e JPA. O conteúdo é estruturado em tópicos que facilitam a compreensão dos conceitos e práticas de desenvolvimento web em Java.

Enviado por

lhbarboz03
Direitos autorais
© All Rights Reserved
Levamos muito a sério os direitos de conteúdo. Se você suspeita que este conteúdo é seu, reivindique-o aqui.
Formatos disponíveis
Baixe no formato PDF, TXT ou leia on-line no Scribd

Programação para a Web

Tópico 6 - Java Web

Prof. Hudson Silva Borges


[Link]@[Link]
Tópicos

● Introdução
● Plataforma Java
● Protocolo HTTP
● Java para WEB
● Spring Framework
○ Arquitetura
○ Conceitos Básicos
○ Acesso a dados
○ MVC vs cliente-servidor
● Conclusões e Referências

2
Programação para Web
Plataforma
Java

3
Plataforma Java

● Plataforma de desenvolvimento

● Linguagem Java

● Três sub-plataformas principais


○ Java SE
○ Java ME
○ Java EE

4
Plataforma Java

5
6
Certificações Java

7
JavaEE

● Plataforma para o desenvolvimento de


aplicações comerciais
● Aplicações executadas em Servidores de
Aplicação
● Suporte para:
○ Desenvolvimento de aplicações WEB
○ Conexão com banco de dados
○ Desenvolvimento baseado em componentes
○ Controle de transações
○ Outros…

8
JavaEE

● Principais APIs
○ JDBC e JPA: API para a conexão com bancos de dados e
mapeamento objeto relacional
○ Servlets: API para o desenvolvimento de aplicações WEB
○ EJB: API para o desenvolvimento baseado em componentes
○ JAX-RS: API para criação de RESTful Web Services
○ CDI: Injeção de dependências e contextos
○ WebSockets: API para comunicação usando sockets
○ outros ….

9
HTTP

10
Protocolo para Web

● HTTP:
○ Protocolo de transferência de arquivos hipertexto
○ Cliente/Servidor
○ Requisição → Resposta

11
12
13
Protocolo para Web

● Métodos HTTP
○ GET: solicita ao servidor o envio de um recurso.
○ HEAD: variante de GET que solicita ao servidor o envio apenas
de informações sobre o recurso.
○ PUT: permite que o cliente autorizado armazene ou altere o
conteúdo de um recurso mantido pelo servidor.
○ POST: permite que o cliente envie mensagens e conteúdo de
formulários para servidores que irão manipular a informação de
maneira adequada.
○ DELETE: permite que o cliente autorizado remova um recurso
mantido pelo servidor.

14
Protocolo para Web

● Métodos HTTP
○ GET: solicita ao servidor o envio de um recurso.

15
Protocolo para Web

● Métodos HTTP
○ POST: permite que o cliente envie mensagens e conteúdo de
formulários para servidores

16
Protocolo para Web

● Métodos HTTP
○ GET: solicita ao servidor o envio de um recurso.
○ HEAD: variante de GET que solicita ao servidor o envio apenas
de informações sobre o recurso.
○ POST: permite que o cliente envie mensagens e conteúdo de
formulários para servidores que irão manipular a informação de
maneira adequada.
○ PUT: permite que o cliente autorizado armazene ou altere o
conteúdo de um recurso mantido pelo servidor.
○ PATCH: parecido com o PUT, mas permite atualizar somente
parte do conteúdo.
○ DELETE: permite que o cliente autorizado remova um recurso
mantido pelo servidor. 17
Java para Web

18
Java para WEB

● Desenvolvimento de aplicações web completas e robustas e


de fácil manutenção

19
Construção de páginas dinâmicas

● JSP (Java Server Pages) é uma tecnologia para criação


de páginas com conteúdos dinâmicos
● Processamento feito pelo servidor
● Usado muitas vezes incorretamente como
controladores
● Atualmente existem alternativas mais eficientes para
construção de páginas web a partir de templates, como
Thymeleaf ou FreeMarker

20
Servlets

● Java Servlets são classes capazes de receber


requisições e responder às mesmas
● É executado pelo servidor ao receber requisições
● Devem estender a classe [Link]
● Permite o tratamento de requisições GET, POST, PUT,
DELETE, etc.

21
Java para WEB

● Servidor Web para uma aplicação escrita em Java

22
Java para WEB

● Na figura podemos observar:


○ Um cliente (Web Client), normalmente um navegador Web
○ Um servidor (Web Server), normalmente uma máquina com
alto poder de processamento e de armazenamento
○ Uma requisição HTTP (HTTP Request) sendo enviada pelo
cliente
○ O processamento da requisição pelo servidor
○ Uma resposta (HTTP Response) sendo enviada de volta ao
cliente

23
Java para WEB

● Arquitetura Clássica de Aplicações Web Java

24
Spring
Framework

25
Spring Framework

● Framework de desenvolvimento Java mais popular


● Possui um conjunto extenso de bibliotecas e plugins
● Aumenta a produtividade por meio de
configurações simplificadas
● Segurança em primeiro lugar
● Grande comunidade de desenvolvedores

26
Spring Framework

● Integra diversas bibliotecas da API do Java EE


○ Servlet API (JSR 340)
○ WebSocket API (JSR 356)
○ Concurrency Utilities (JSR 236)
○ JSON Binding API (JSR 367)
○ Bean Validation (JSR 303)
○ JPA (JSR 338)
○ JMS (JSR 914)
○ as well as JTA/JCA setups for transaction
coordination, if necessary.

27
Módulos do Spring Framework

28
Arquitetura do Spring Framework

29
Lidando com
Controllers requisições de
usuários

30
Spring Controllers

Controllers são classes com as seguintes responsabilidades:

● Interceptar requisições de usuários


● Converter os dados da requisição
● Enviar o Model para processamento
● Obter dados do Model e enviar para a View

31
Spring Controllers

32
Spring Controllers

● Controllers são definidos como classes em Java


● O framework consegue identificar automaticamente
● São responsáveis por tratar de requisições para
determinados caminhos

33
Spring Controllers

@Controller
Anotação que indica que a classe é uma controladora
@RequestMapping
Mapeia um caminho no qual ela irá responder

34
Spring Controllers

● Controladores devem responder à métodos de requisição


HTTP (GET, POST, PATCH, etc.)
● Além de @RequestMapping, podemos usar anotações
específicas como no exemplo abaixo.

[Link] 35
Spring Controllers

● A anotação @RequestBody indica que o conteúdo será


retornado diretamente a quem fez a requisição.
● Se omitir essa anotação, o Spring buscará pela visão com o
nome fornecido (abordaremos isso adiante)

[Link] 36
Colocando em
Controllers prática o nosso
“Hello world!”

37
Preparando o VSCode

● Extensões recomendadas:
○ Extension Pack for Java
■ Language Support for Java(TM) by Red Hat
■ Debugger for Java
■ Test Runner for Java
■ Maven for Java
■ Project Manager for Java
■ Visual Studio IntelliCode
○ Spring Boot Extension Pack
○ Copilot

38
Criando um projeto Spring Boot

[Link]
39
Prática: Primeiro app web

● Vamos colocar a mão na massa!


● Abra o endereço e configure a aplicação:
○ URL: [Link]
○ Pacotes: Spring Boot DevTools, Spring Web e Thymeleaf
○ Tipo de projeto: Gradle
● No VSCode, abra o projeto que acabou de baixar e:
○ ./gradlew bootRun
● Pronto, você já tem seu projeto base!

40
Prática: Primeiro app web

[Link] 41
Explorando ainda
Controllers mais o potencial

42
Lidando com informações da requisição

● Podemos receber informações de diferentes formas:

○ Valores via URL


○ Valores no caminho requisitado
○ Valores no header da requisição
○ Valores de cookies
○ Valores no corpo da requisição
○ Requisição original via Servlet
○ outros ….

● Esses meios serão abordados a seguir

43
Valores via querystring (URL)

● Querystring é a parte da URL que fica após o símbolo de


interrogação (?)
● Podemos obter tais informações com a anotação
@RequestParam

44
Valores via caminho na URL

● Muitas vezes a melhor solução é a construção de URLs com


valores dinâmicos.
● Por exemplo, lojas podem indicar nomes ou identificadores
de produtos, tal como [Link]
● Podemos mapear tais caminhos em @GetMapping e obter
seus valores com @PathVariable

45
Obtendo dados do header da requisição

● Podemos obter informações enviadas pelo navegador no


header da requisição com @RequestHeader
● Por exemplo, podemos verificar qual navegador o usuário
está usando.

46
Usando cookies (salvando e recuperando)

● Cookies permitem que aplicações web salvem informações


nos navegadores de seus usuários

● Tipicamente, são informações compartilhadas com as


próprias aplicações a cada requisição

● No Spring podemos usar RespondeCookie e @CookieValue


para enviar e receber valores de cookies, respectivamente.

47
Usando cookies (salvando e recuperando)

48
Dados no corpo da requisição

● Requisições do tipo POST, PUT e PATCH, as informações são


enviadas no corpo da requisição.

● Podemos usar de @RequestParam para obter dados


individuais ou podemos usar de @RequestBody para obter
um modelo (com validação) dos dados da requisição.

● O @RequestBody pode ser usado em conjunto com todos


os demais métodos de obtenção de informações.

49
Refinando resposta com ResponseEntity

● Ao usarmos a anotação @ResponseBody, estamos


indicando o retorno do conteúdo da resposta.

● Contudo, podemos refinar as respostas retornando uma


instância de ResponseEntity<T>.

● Podemos retornar códigos de resposta específicos e


informações adicionais no cabeçalho (header).

50
Praticando
@Atividade uso de
Controllers

51
Atividade prática

Imagine que você é responsável por implementar uma


aplicação web simples que faz operações básicas, como soma
e subtração, mas você deverá registrar quantas vezes o usuário
realizou a requisição.

Objetivo específico: Implementar a operação de soma usando


os métodos GET e POST e salvar a quantidade de vezes nos
cookies dos usuários.

52
Construção de
View páginas dinâmicas
com Thymeleaf

53
Construção de página dinâmicas

● Aplicações (web) lidam com dados e informações

● Tais informações precisam ser apresentadas para usuários

● HTML permite a estruturação de informações, mas são


conteúdos estáticos

● Aplicações que possuem informações dinâmicas ou


customizadas, precisam construir as páginas (HTML) antes
de enviá-las para os clientes

54
Template Engines

● Template engines permitem construir modelos (templates)


de páginas de forma estática que são usados, em tempo de
execução, para construção de páginas HTML finais

● Para isso, as aplicações substituem variáveis (marcações)


inseridas nestes modelos por conteúdos fornecidos pela
aplicação

● O resultado são páginas HTML (ou até mesmo outros tipos)


que são enviadas aos clientes para visualização.

55
Template Engines e View (MVC)

● Template engines permitem construções de visões no estilo


arquitetural MVC

56
Template Engines para Java

57
[Link]

● Thymeleaf é uma template engine moderna

● Oferece formas naturais e elegantes de construir templates

● Pode ser aberto diretamente em navegadores em tempo de


desenvolvimento

[Link]

58
Expression Syntax

59
Expression Syntax

60
Expression Syntax

61
Expression Syntax

62
Iteração e condicionais

[Link]
[Link]
63
Retornando uma visão pelo @Controller

64
Passando atributos para a Visão

65
Passando atributos para a Visão

66
Exemplo: Thymeleaf + Spring boot

67
Lidando com dados em
JDBC & JPA aplicações Web

68
JDBC (Java DataBase Connectivity)

● API para conexão com o banco de dados


● É um conjunto de classes e interfaces (API) escritas em Java
que fazem o envio de instruções SQL para qualquer banco
de dados relacional
● Cada banco de dados possui um driver para conexão

69
JPA (Java Persistence API)

● API para comunicação com banco de dados do EJB


● É uma API padrão do java para persistência que deve ser
implementada por frameworks que queiram seguir o padrão
● A JPA define um meio de mapeamento objeto-relacional
para objetos Java simples e comuns (POJOs), denominados
beans de entidade (Entity Beans)
● O JPA usa o JDBC para se comunicar com o banco de dados

70
JPA (Java Persistence API)

● Diversos frameworks de mapeamento objeto/relacional


implementam a JPA
○ Hibernate, OpenJPA, Oracle TopLink

● Também gerencia o desenvolvimento de entidades do


Modelo Relacional usando a plataforma nativa Java SE e
Java EE

71
JPA (Java Persistence API)

● Java Persistence API: Primeira especificação (padrão) de


mapeamento de objetos Java para base de dados relacional
○ Integração com outros frameworks
■ Hibernate é uma implementação de JPA
■ TopLink Essencials é uma implementação de JPA (RI)

● POJO (Plain Old Java Objects) → Entidades


○ Mapeamento via metadados (annotation Java 5)
● Pode ser utilizado fora de containers EJBs (lightweight
container)
● Uso de injeção de dependência ao invés de lookups JNDI
72
JPA (Java Persistence API)

73
JPA & Entidades

74
JPA & Entidades - Ciclo de Vida

75
JPA & Entidades - Ciclo de Vida
[A] new / create – criação/instanciação do
objeto

[B] find / query – busca no banco de dados


com o retorno do objeto
[C] persist – o objeto novo é armazenado no
banco de dados
[D] alter– alguma propriedade do objeto foi
alterada, fazendo com que o mesmo fique em
um estado diferente do armazenado no banco
de dados

[E] merge/update – o objeto é novamente


persistido e suas alterações são armazenadas no
banco de dados

[F] remove/ delete – o objeto é apagado do


banco de dados, mas ainda existe em memória

[G] [H] o objeto em memória é coletado pelo


garbage collector

76
JPA & Entidades - Elementos importantes

● Entidades (@Entity)
● Identificadores (@ID)
● Colunas (@Column)
● Relacionamentos (@OneToOne, @ManyToOne)
● Herança (@Inheritance)

77
Lidando com dados em
Spring Data aplicações Web
(JPA) com Spring Framework

78
Spring Data

● Repositórios e mapeamento de objetos


● Consulta dinâmica a partir dos nomes dos métodos
● Suporte para auditoria transparente (criada, última alterada)
● Integração fácil com Spring
● Integração avançada com controladores Spring MVC
● Suporte experimental para persistência cruzada de
armazenamento

79
Spring Data JPA

● Biblioteca do Spring Framework que implementa as


especificações do JPA e é facilmente integrável a projetos
do Spring.

[Link]

80
Spring Data JPA

81
Spring Data JPA

82
Spring Data Começando a usar o
Spring Data JPA …
(JPA)

83
Spring Data JPA - Prática

● Crie um projeto Spring Boot e inclua:


○ Spring Boot DevTools
○ Spring Web
○ Spring Data JPA
○ H2 Database

● Não criaremos interfaces, logo não é necessária template


engines

84
Spring Data JPA - Prática

● Configure o arquivo [Link] com:

85
Spring Data JPA - Prática

● Crie uma classe Aluno

86
Spring Data JPA - Prática

● Crie um controlador e disponibilize um endpoint para


consulta de alunos e outro para contagem de alunos por
curso.

87
RESTful Migrando para arquiteturas
distribuídas
Applications

88
Evolução das Aplicações Web

● Aplicações web evoluíram em complexidade e formas de


acesso;
● Como criar aplicações web que permitam o acesso a partir
de diferentes dispositivos?

89
Web Application >> Web Services

● Web Service é um sistema para distribuição de


componentes, objetos ou serviços;

● Objetiva prover suporte nas interações entre sistemas


diferentes ligados em rede;

● A ideia básica é disponibilizar uma plataforma distribuída,


independente de linguagem e baseada em padrões Web

90
Web Application >> Web Services

Servidor Web
Aplicação
Mobile
Aplicação
incluirCliente
Aplicação
fazerPedido Desktop

listarContasPagar
Aplicação
Web

91
API para RESTful Web Services (JAX-RS)

● REST (REpresentational State Transfer) é um estilo de


arquitetura para sistemas distribuídos
● Alternativa popular ao uso de tecnologias baseadas em
SOAP
● Leve e com capacidade de transmitir dados via requisições
HTTP
● JSR 311 - API Java para Web services RESTful (JAX-RS)

92
API para RESTful Web Services (com Spring)

● O Spring Framework oferece uma implementação própria


baseada no JAX-RS
● Oferece integração bem mais simplificada

93
API para RESTful Web Services (com Spring)

● O Spring Framework oferece uma implementação própria


baseada no JAX-RS
● Oferece integração bem mais simplificada

94
REST API com @RestController

● Podemos usar de @RestController para criar RESTful


Applications com Spring framework;
● Pode ser considerado uma simplificação para o uso de
@Controller + @ResponseBody nos endpoints;
● O resultado será application/json por padrão.

95
REST API com @RestController

● Além de respostas em JSON, requisições também deve ser


realizadas com dados codificados no mesmo formato

96
IoC Transferindo o controle dos
objetos para o container
(Inversion of Control)

97
Inversão de Controle

● Princípio amplamente usado por aplicações Java onde o


desenvolvedor transfere a responsabilidade de gestão
destes para o container;

● Vantagens:
○ Desacoplamento entre implementação e uso
○ Fácil alternação entre implementações
○ Aumento da modularidade da aplicação
○ Facilita testes e criação de mocks

98
Inversão de Controle no Spring

● No Spring, o container é responsável por inicializar,


configurar e conectar objetos conhecidos como beans.

99
Dependency Injection (DI)

● Injeção de Dependência é o processo de injeção de objetos,


gerenciados pelo container, via propriedades, construtores
ou métodos ao criar um objeto;
● Esse processo facilita o desacoplamento entre objetos.

100
Dependency Injection (DI)

● @Component é uma anotação que permite o Spring


detectar automaticamente um bean que será gerenciado
pelo container;
● @Autowired faz a injeção da dependência a partir da
instância gerenciada pelo container.

101
Dependency Injection (DI) - Tipos

● @Component estereótipo genérico para um componente


gerenciável;

● @Repository componente da camada de persistência;

● @Controller componente da camada Web;

● @Service componente da camada de serviço

● @Configuration permite a instanciação de componentes


(beans) customizados.

102
Dependency Injection (DI) - @Service

● @Service componente da camada de serviço

○ Serviços são abstrações que permitem o encapsulamento da


lógica de negócio em um componente compartilhável;

○ Eles seguem o princípio de criação de fachadas em aplicações


de software (a.k.a. Facade Design Pattern);

○ São formas de extrair a lógica do negócio de componentes


que lidam com requisições web (@Controller);

○ A proposta é fazer com que controladores passem sempre


pela camada de serviços, sem acessar a camada de dados
diretamente.

103
Dependency Injection (DI) - @Service

● @Service componente da camada de serviço

104
Dependency Injection (DI) - @Service

● @Service componente da camada de serviço

105
Dicas de técnicas para
melhorar a qualidade da
Boas Práticas aplicação

106
Padrões e princípios de desenvolvimento

● O Spring framework é uma ferramenta bastante flexível e


customizável;

● Desenvolvedores podem projetar e desenvolver seus


projetos seguindo princípios nos quais julgam serem
adequados para seus projetos;

● Contudo, existem alguns padrões bastante conhecidos e


frequentemente aplicados em aplicações web, inclusive
desenvolvidos em outras linguagens/frameworks.

107
Controller-Service-Repository

108
Controller-Service-Repository

Controller: Camada responsável por lidar com requisições


dos usuários e especificidades do protocolo
usado (e.g., REST);

Service: Implementação da lógica de negócio que pode


ser reutilizada por outros componentes, inclusive
outras camadas com diferentes protocolos;

Repository: Camada responsável por lidar com as entidades


de dados

109
Controller-Service-Repository

110
DTO - Data Transfer Object

● Entidades do domínio muitas vezes são carregadas de


informações de interesse próprio da aplicação e até mesmo
estruturadas de forma específica;

● Esses detalhes muitas vezes não podem, devem, ou são


adequados de serem compartilhados;

● É muito frequente a necessidade de criar entidades


derivadas mais simples para comunicação com clientes.

111
DTO - Data Transfer Object

[Link]

[Link]
112
DTO - Data Transfer Object

113
Estrutura do projeto

● No desenvolvimento de aplicações web, a organização dos


arquivos desenvolvidos também é importante

● No geral, existem duas formas principais de organizar os


arquivos de um projeto: por camada ou por funcionalidade

● As duas formas são frequentemente usadas de acordo com


a preferência do desenvolvedor/time

● Ao longo do tópico, as aplicações usadas como exemplo


foram organizadas por funcionalidade

114
Estrutura do projeto - Por camada

115
Estrutura do projeto - Por funcionalidade

116
Estrutura do projeto

● As duas formas são frequentemente usadas de acordo com


a preferência do desenvolvedor/time

● Ao longo do tópico, as aplicações usadas como exemplo


foram organizadas por funcionalidade

117
Documentação de APIs

● Documentação impacta diretamente no uso e adoção de


APIs

● Porque devemos documentar APIs?


○ Melhoria da adoção por usuários
○ Maior conscientização
○ Redução do tempo de suporte e custos
○ Melhoria da manutenção

118
Documentação de APIs

● SpringDoc ([Link]) é uma biblioteca para geração


automatizada de documentação de APIs usando Spring Boot

119
Documentação de APIs

120
Testes Aproveitando o melhor do
framework, que são seus
e pacotes para atividades
críticas …
Segurança

121
Testes em aplicações web

● Testes são atividades conduzidas com intuito de evitar que


erros cheguem ao usuário final e causem prejuízos

● Com métodos ágeis, testes tornaram-se uma das práticas


de programação mais valorizadas em desenvolvimento
moderno de software

● “Code without tests is bad code.” – Michael Feathers

122
Testes com Spring framework

● O Spring framework possui uma biblioteca de testes que


acompanha o pacote Spring MVC e REST

● Basicamente, ele inclui bibliotecas que permite aos


desenvolvedores testarem suas aplicações (e.g., JUnit).

123
Testes com Spring framework

124
Testes com Spring framework

125
Segurança em aplicações

● Aplicações web tipicamente lidam com informações críticas,


que devem ser protegidas por diversos motivos

● Tais informações devem ser compartilhadas somente com


usuários que tenham permissão para tal

● No desenvolvimento, requisitos relacionados à autenticação


e autorização são muito frequentes

● Além disso, devemos proteger aplicações contra diferentes


ataques que tentam acessar indevidamente tais informações

126
Segurança no Spring framework

● O framework Spring oferece um pacote de segurança que


possibilidade a proteção de aplicações desenvolvidas
usando Spring

[Link]

127
Segurança no Spring framework

● Para usar o pacote é necessário que desenvolvedores


adicionem a dependência e façam a configuração do mesmo
em suas aplicações

128
Segurança no Spring framework

129
Segurança no Spring framework

● O pacote permite a configuração a partir de diversas fontes,


como banco de dados, sistemas externos, e inclusive
processos simples como autenticação pré-definidas

130
Segurança no Spring framework

● Se tentarmos acessar um caminho protegido, seremos


impedidos e redirecionados para a página de autenticação

● Se não tivermos permissão, seremos impedidos de acessar


o recurso

131
Programação para a Web

Tópico 6 - Java Web

Prof. Hudson Silva Borges


[Link]@[Link]

Você também pode gostar