Curso de Java PARTE 07 Back-end Web Uma Introdução Introdução a Servlets Annotations Spring Boot Spring MVC JSP + Spring Tags Form por: Mário Sergio mariosergio30@gmail.com linkedin.com/in/mario-sergio-a1125831
Relembrando… Conteúdo Estático vs Conteúdo Dinâmico: Aplicações WEB Páginas WEB Conteúdo Estático Conteúdo Dinâmico java asp.net PHP ... 2
Apache Tomcat 3Saber mais: https://www.devmedia.com.br/conheca-o-apache-tomcat/4546 O software Tomcat, desenvolvido pela Fundação Apache, é um WEB Container para execução de aplicações JAVA. Você poderia baixar e instalar o servidor Tomcat em: https://tomcat.apache.org/download-80.cgi Mas não precisaremos fazer isto, pois neste curso utilizaremos Spring Boot que inclui uma versão embutida do Tomcat. OBS: por padrão, o tomcat é instalado na porta 8080 O serviço tomcat ficará “escutando” qualquer requisição HTTP que seja feita na porta 8080
4 Java Web: Servlets
5 Java Web: Servlets J2EE Especification Para desenvolvermos uma aplicação Web precisaremos utilizar Servlets, presentes no java desde 1997. No entanto, Servlets são componentes de baixo nível, e por isso não faremos uso de Servlets diretamente. Utilizaremos o Spring Boot, que importará essas bibliotecas automaticamente para nós, e além disso o Spring MVC possui abstrações que facilita muito o desenvolvimento de aplicações Web.
6 Spring Boot O Spring Boot é uma ferramenta para o desenvolvimento de aplicações em Java que utiliza o framework Spring sem que seja necessária praticamente nenhuma configuração. Entre os principais benefícios temos: - Prover uma experiência de início de projeto (getting started experience) extremamente rápida e direta; - Não prover nenhuma geração de código e minimizar a zero a necessidade de arquivos XML, em substituição ao uso de Annotations. https://www.devmedia.com.br/desenvolvendo-uma-aplicacao-web-com-spring-boot-e-spring-mvc/34122 https://javabeat.net/spring-annotations/ Saber mais:
7 Spring Boot <dependencies> <!-- libraries necessárias para usar Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> Dependencias do Maven
8 Projeto de Exemplo: startJavaWeb01 GIT: https://github.com/mariosergio30/startJavaWeb01
9 Spring Boot: @SpringBootApplication Anotação que Inicia a aplicação Java dentro de um container WEB embutido (tomcat)
10 Página Root (index) Quando apenas servidor e porta são informados e o nome do recurso é omitido: http://localhost:8080 O servidor web (tomcat), busca por padrão por um arquivo chamado index.html, e responde ao navegador.
Spring Boot: @RestControler / @RequestMapping 11 Request a uma aplicação WEB em Java: URL: http://localhost:8080/basico/helloworld mapeamento recurso @RestController: Indica que essa a classe é um controlador WEB (expõe os métodos da classe como recursos web). Em outras palavras: faz com que essa classe fique escutando as requisições web que chegam a neste endereço localhost:8080 @RequestMapping Mapeia uma URL aos recursos Java O retorno do método é enviado como RESPONSE ao browser Saber mais: https://www.baeldung.com/spring-requestmapping
Spring Boot: RequestMapping / RequestParam 12 URL: http://localhost:8080/basico/startlogin?aluno=José&idade=5 Servidor porta mapeamento recurso parametro=valorProtocolo de Comunicação
13 TEMOS UM PROBLEMAA RESOLVER Observe que nossa aplicação Java responde em HTML, pois o navegador não entenderia código java. Até agora, o que vemos é que nossas classes possuem uma mistura de código java com código html, isso não é bom, além de não ser uma boa prática, traz diversos problemas como: - código complexo - baixa manutenabilidade - dificuldade na divisão de tarefas entre desenvolvedores (back-end) e web designers (front-end). MAS…. HÁ UMA SOLUÇÃO Existe uma maneira de separar o código java do código html em arquivos diferentes, e ainda assim permitir que o código html seja alterado (processado) pelo Java, antes de enviar uma resposta ao navegador (browser). Padrão MVC + JSP
14 Padrão MVC
15 Projeto de Exemplo: startJavaWeb02 GIT: https://github.com/mariosergio30/startJavaWeb02
16 Os Controles tem o único papel de fazer o CONTROLE das requisições do Cliente (browser), acionar as classes de MODELO e responder com a devida VIEW As classes do MODELO responsáveis pelo mapeamento do modelo de domínio e por todas as regras de negócio da aplicação. A VIEW é responsável pela estrutura (html, jsp), formatação (css) e interatividade (JS) da página no lado Cliente. As 3 Camadas do MVC: Padrão MVC com Spring e JSP Os arquivos com extensão jsp são processados no servidor antes do definitivo response para o browser. Dessa maneira, o código java dentro de ${...}, <c:forEach, <c:if, etc... é executado, resultando em código html puro (única coisa que o browser entende).
17 Padrão MVC com Spring e JSP J2EE Especification Para que o código java seja capaz de processar páginas dinâmicas a partir de arquivos externos (.jsp) utilizaremos a tecnologia JSP e também JSTL - JSP Standard Tag Library. <!-- libraries necessárias para usar JSP/JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> Dependencias do Maven
18 Request: http://localhost:8080/mvc/startlogin?aluno=José&idade=5 MVC com JSP: Exemplo /startlogin
19 MVC com JSP: @Controler + WebConfig A anotação @Controller indica que essa a classe é um controlador WEB (expõe os métodos da classe como recursos web) Em outras palavras: faz com que essa classe fique escutando as requisições web que chegam a neste endereço localhost:8080 Em conjunto com a interface WebMvcConfigurer, conseguimos que o Spring MVC encontre os arquivos das VIEWS (neste caso JSP) Assim, sempre que escrevermos o retorno de um métudo (return) dentro do Controler, o Spring MVC consegue encontrar o arquivo (html,jsp,...) com o nome correspondente e então retornado ao browser o contéudo HTML desse arquivo.
20 Conteúdo HTML da View Request: http://localhost:8080/mvc/startlogin?aluno=José&idade=5 Controler Model View Os Atributos passados serão substituídos no arquivo JSP antes da resposta ao browser Agora temos a classe Controle com código java puro ! O código html que estava na classe java (ver pag 12), agora está dentro do arquivo startlogin.jsp A classe WebConfig (pag anterior), é responsável por encontrar o arquivo startlogin.jsp a partir do return do método. MVC com JSP: Exemplo /startlogin
21 MVC com JSP: Exemplo /startlogin Saber mais: https://www.codejava.net/java-ee/jstl/introduction-to-jstl Import da JSTL - JSP Standard Tag Library que permite ao Java executar processamento: repetições, decisões, etc antes do envio do conteúdo html como resposta ao navegador. Atributos passados pelo Java: podendo ser uma simples String, um Objeto ou uma Lista de objetos. Request: http://localhost:8080/mvc/startlogin?aluno=José&idade=5 <c:if ... > Estruturas de decisão da JSTL Conteúdo HTML da View
22 MVC com JSP: Exemplo Lista de Cidades Request: http://localhost:8080/mvc/cidades
23 MVC com JSP: Exemplo Lista de Cidades Request: http://localhost:8080/mvc/cidades Controler Model View Os Atributos passados serão substituídos no arquivo JSP antes da resposta ao browser Trecho do arquivo listagem_cidades.jsp
24 Saber mais: https://www.codejava.net/java-ee/jstl/introduction-to-jstl Import da JSTL - JSP Standard Tag Library que permite ao Java executar processamento: repetições, decisões, etc antes do envio do conteúdo html como resposta ao navegador. Atributo passado pelo Java: podendo ser uma simples String, um Objeto ou uma Lista de objetos. <c:forEach ... > Estruturas de repetição da JSTL Incluirá uma linha da tabela <tr> </tr> para cada cidade da lista Request: http://localhost:8080/mvc/cidades MVC com JSP: Exemplo Lista de Cidades
25 Projeto de Exemplo: startJavaWeb03 GIT: https://github.com/mariosergio30/startJavaWeb03 Abordado em: Parte 08 WebService JSON Veremos neste Slide
26 MVC com JSP: Site Escolar Injeção de dependências: @Autowired Quanto anotamos um atributo com @Autowired, o Spring instancia o objeto imediatamente quando a classe é carregada pela primeira vez. Isso evita que o desenvolvedor necessite fazer isto explicitamente: Ex: alunosbusiness = new AlunosBusiness(); Isto se chama INJEÇÃO DE DEPENDÊNCIAS Request: http://localhost:8080/site/aluno/listagem
27 MVC com JSP: Site Escolar Request: http://localhost:8080/site/aluno/listagem Lista de alunos proveniente do banco de dados Mysql http://localhost:8080/site/aluno/consulta?matricula=00000066 Ao clicar na matricula do aluno, há uma requisição para /aluno/consulta , então um aluno é consultado no banco de dados, para em seguida enviar um response com a tela de cadastro do aluno.
28 Binding com JSP: Spring Form Tags Saber mais: https://dzone.com/articles/spring-mvc-jsp-form-tags-example https://www.baeldung.com/spring-mvc-form-tags Import do Spring Tags/form que permite ao Java executar o bindind dos dados do formulário para um POJO (Model java). Para isso, é preciso que os path´s dos campos do formulário sejam compatíveis com os atributos da classe Model. Um @ModelAttribute no Controler é responsável por receber os dados do <form> quando o formulário for submetido.
29 Binding com JSP: @ModelAttribute Saber mais: https://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation Um @ModelAttribute anotado antes do argumento do método, recebe o objeto aluno (bind de dados) do <form> http://localhost:8080/site/aluno/salvar
Obrigado 30

Curso de Java (Parte 7) Web Application

  • 1.
    Curso de Java PARTE07 Back-end Web Uma Introdução Introdução a Servlets Annotations Spring Boot Spring MVC JSP + Spring Tags Form por: Mário Sergio mariosergio30@gmail.com linkedin.com/in/mario-sergio-a1125831
  • 2.
    Relembrando… Conteúdo Estático vsConteúdo Dinâmico: Aplicações WEB Páginas WEB Conteúdo Estático Conteúdo Dinâmico java asp.net PHP ... 2
  • 3.
    Apache Tomcat 3Saber mais:https://www.devmedia.com.br/conheca-o-apache-tomcat/4546 O software Tomcat, desenvolvido pela Fundação Apache, é um WEB Container para execução de aplicações JAVA. Você poderia baixar e instalar o servidor Tomcat em: https://tomcat.apache.org/download-80.cgi Mas não precisaremos fazer isto, pois neste curso utilizaremos Spring Boot que inclui uma versão embutida do Tomcat. OBS: por padrão, o tomcat é instalado na porta 8080 O serviço tomcat ficará “escutando” qualquer requisição HTTP que seja feita na porta 8080
  • 4.
  • 5.
    5 Java Web: Servlets J2EEEspecification Para desenvolvermos uma aplicação Web precisaremos utilizar Servlets, presentes no java desde 1997. No entanto, Servlets são componentes de baixo nível, e por isso não faremos uso de Servlets diretamente. Utilizaremos o Spring Boot, que importará essas bibliotecas automaticamente para nós, e além disso o Spring MVC possui abstrações que facilita muito o desenvolvimento de aplicações Web.
  • 6.
    6 Spring Boot O SpringBoot é uma ferramenta para o desenvolvimento de aplicações em Java que utiliza o framework Spring sem que seja necessária praticamente nenhuma configuração. Entre os principais benefícios temos: - Prover uma experiência de início de projeto (getting started experience) extremamente rápida e direta; - Não prover nenhuma geração de código e minimizar a zero a necessidade de arquivos XML, em substituição ao uso de Annotations. https://www.devmedia.com.br/desenvolvendo-uma-aplicacao-web-com-spring-boot-e-spring-mvc/34122 https://javabeat.net/spring-annotations/ Saber mais:
  • 7.
    7 Spring Boot <dependencies> <!-- librariesnecessárias para usar Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> Dependencias do Maven
  • 8.
    8 Projeto de Exemplo:startJavaWeb01 GIT: https://github.com/mariosergio30/startJavaWeb01
  • 9.
    9 Spring Boot: @SpringBootApplication Anotaçãoque Inicia a aplicação Java dentro de um container WEB embutido (tomcat)
  • 10.
    10 Página Root (index) Quandoapenas servidor e porta são informados e o nome do recurso é omitido: http://localhost:8080 O servidor web (tomcat), busca por padrão por um arquivo chamado index.html, e responde ao navegador.
  • 11.
    Spring Boot: @RestControler/ @RequestMapping 11 Request a uma aplicação WEB em Java: URL: http://localhost:8080/basico/helloworld mapeamento recurso @RestController: Indica que essa a classe é um controlador WEB (expõe os métodos da classe como recursos web). Em outras palavras: faz com que essa classe fique escutando as requisições web que chegam a neste endereço localhost:8080 @RequestMapping Mapeia uma URL aos recursos Java O retorno do método é enviado como RESPONSE ao browser Saber mais: https://www.baeldung.com/spring-requestmapping
  • 12.
    Spring Boot: RequestMapping/ RequestParam 12 URL: http://localhost:8080/basico/startlogin?aluno=José&idade=5 Servidor porta mapeamento recurso parametro=valorProtocolo de Comunicação
  • 13.
    13 TEMOS UM PROBLEMAARESOLVER Observe que nossa aplicação Java responde em HTML, pois o navegador não entenderia código java. Até agora, o que vemos é que nossas classes possuem uma mistura de código java com código html, isso não é bom, além de não ser uma boa prática, traz diversos problemas como: - código complexo - baixa manutenabilidade - dificuldade na divisão de tarefas entre desenvolvedores (back-end) e web designers (front-end). MAS…. HÁ UMA SOLUÇÃO Existe uma maneira de separar o código java do código html em arquivos diferentes, e ainda assim permitir que o código html seja alterado (processado) pelo Java, antes de enviar uma resposta ao navegador (browser). Padrão MVC + JSP
  • 14.
  • 15.
    15 Projeto de Exemplo:startJavaWeb02 GIT: https://github.com/mariosergio30/startJavaWeb02
  • 16.
    16 Os Controles temo único papel de fazer o CONTROLE das requisições do Cliente (browser), acionar as classes de MODELO e responder com a devida VIEW As classes do MODELO responsáveis pelo mapeamento do modelo de domínio e por todas as regras de negócio da aplicação. A VIEW é responsável pela estrutura (html, jsp), formatação (css) e interatividade (JS) da página no lado Cliente. As 3 Camadas do MVC: Padrão MVC com Spring e JSP Os arquivos com extensão jsp são processados no servidor antes do definitivo response para o browser. Dessa maneira, o código java dentro de ${...}, <c:forEach, <c:if, etc... é executado, resultando em código html puro (única coisa que o browser entende).
  • 17.
    17 Padrão MVC comSpring e JSP J2EE Especification Para que o código java seja capaz de processar páginas dinâmicas a partir de arquivos externos (.jsp) utilizaremos a tecnologia JSP e também JSTL - JSP Standard Tag Library. <!-- libraries necessárias para usar JSP/JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.apache.tomcat.embed</groupId> <artifactId>tomcat-embed-jasper</artifactId> <scope>provided</scope> </dependency> Dependencias do Maven
  • 18.
  • 19.
    19 MVC com JSP:@Controler + WebConfig A anotação @Controller indica que essa a classe é um controlador WEB (expõe os métodos da classe como recursos web) Em outras palavras: faz com que essa classe fique escutando as requisições web que chegam a neste endereço localhost:8080 Em conjunto com a interface WebMvcConfigurer, conseguimos que o Spring MVC encontre os arquivos das VIEWS (neste caso JSP) Assim, sempre que escrevermos o retorno de um métudo (return) dentro do Controler, o Spring MVC consegue encontrar o arquivo (html,jsp,...) com o nome correspondente e então retornado ao browser o contéudo HTML desse arquivo.
  • 20.
    20 Conteúdo HTML daView Request: http://localhost:8080/mvc/startlogin?aluno=José&idade=5 Controler Model View Os Atributos passados serão substituídos no arquivo JSP antes da resposta ao browser Agora temos a classe Controle com código java puro ! O código html que estava na classe java (ver pag 12), agora está dentro do arquivo startlogin.jsp A classe WebConfig (pag anterior), é responsável por encontrar o arquivo startlogin.jsp a partir do return do método. MVC com JSP: Exemplo /startlogin
  • 21.
    21 MVC com JSP:Exemplo /startlogin Saber mais: https://www.codejava.net/java-ee/jstl/introduction-to-jstl Import da JSTL - JSP Standard Tag Library que permite ao Java executar processamento: repetições, decisões, etc antes do envio do conteúdo html como resposta ao navegador. Atributos passados pelo Java: podendo ser uma simples String, um Objeto ou uma Lista de objetos. Request: http://localhost:8080/mvc/startlogin?aluno=José&idade=5 <c:if ... > Estruturas de decisão da JSTL Conteúdo HTML da View
  • 22.
    22 MVC com JSP:Exemplo Lista de Cidades Request: http://localhost:8080/mvc/cidades
  • 23.
    23 MVC com JSP:Exemplo Lista de Cidades Request: http://localhost:8080/mvc/cidades Controler Model View Os Atributos passados serão substituídos no arquivo JSP antes da resposta ao browser Trecho do arquivo listagem_cidades.jsp
  • 24.
    24 Saber mais: https://www.codejava.net/java-ee/jstl/introduction-to-jstl Import daJSTL - JSP Standard Tag Library que permite ao Java executar processamento: repetições, decisões, etc antes do envio do conteúdo html como resposta ao navegador. Atributo passado pelo Java: podendo ser uma simples String, um Objeto ou uma Lista de objetos. <c:forEach ... > Estruturas de repetição da JSTL Incluirá uma linha da tabela <tr> </tr> para cada cidade da lista Request: http://localhost:8080/mvc/cidades MVC com JSP: Exemplo Lista de Cidades
  • 25.
    25 Projeto de Exemplo:startJavaWeb03 GIT: https://github.com/mariosergio30/startJavaWeb03 Abordado em: Parte 08 WebService JSON Veremos neste Slide
  • 26.
    26 MVC com JSP:Site Escolar Injeção de dependências: @Autowired Quanto anotamos um atributo com @Autowired, o Spring instancia o objeto imediatamente quando a classe é carregada pela primeira vez. Isso evita que o desenvolvedor necessite fazer isto explicitamente: Ex: alunosbusiness = new AlunosBusiness(); Isto se chama INJEÇÃO DE DEPENDÊNCIAS Request: http://localhost:8080/site/aluno/listagem
  • 27.
    27 MVC com JSP:Site Escolar Request: http://localhost:8080/site/aluno/listagem Lista de alunos proveniente do banco de dados Mysql http://localhost:8080/site/aluno/consulta?matricula=00000066 Ao clicar na matricula do aluno, há uma requisição para /aluno/consulta , então um aluno é consultado no banco de dados, para em seguida enviar um response com a tela de cadastro do aluno.
  • 28.
    28 Binding com JSP:Spring Form Tags Saber mais: https://dzone.com/articles/spring-mvc-jsp-form-tags-example https://www.baeldung.com/spring-mvc-form-tags Import do Spring Tags/form que permite ao Java executar o bindind dos dados do formulário para um POJO (Model java). Para isso, é preciso que os path´s dos campos do formulário sejam compatíveis com os atributos da classe Model. Um @ModelAttribute no Controler é responsável por receber os dados do <form> quando o formulário for submetido.
  • 29.
    29 Binding com JSP:@ModelAttribute Saber mais: https://www.baeldung.com/spring-mvc-and-the-modelattribute-annotation Um @ModelAttribute anotado antes do argumento do método, recebe o objeto aluno (bind de dados) do <form> http://localhost:8080/site/aluno/salvar
  • 30.