Conceitos de Programação em Java para Web

Programação Java para Web

Prof. Wagner Macedo

## Java para Web - [Container Web](#sec-container-web) - [Aplicação Java Web](#sec-webapp) - [web.xml](#web-xml) - [Plataforma Servlet](#sec-framework-servlet) - [Deploy](#sec-deploy) - [Java EE](#java-ee)

Container Web

É um programa responsável por executar código Java em todas as requisições HTTP recebidas.

Configuração 1: recomendado

Servidor web atende requisições a arquivos estáticos e encaminha para o container outras requisições.

Configuração 2: mais comum

Container atende a todas as requisições web

Independente de Fabricante

O container web é, na verdade, uma **especificação** da plataforma Java EE. Esta especificação define regras de como um container deve se comportar.

Exemplos de Containers Web

Aplicação Java Web

É onde fica o código Java!

As aplicações são implantadas no container web.

Cada aplicação tem um caminho raiz chamado contexto.

http://site.com:8080/AppLoja/

http://site.com:8080/AppSite/

http://site.com:8080/AppBlog/

http://site.com:8080/AppFarmacia/

http://site.com:8080/AppContabil/

É importante notar que não é o desenvolvedor da aplicação quem escolhe o contexto, mas o técnico 👨‍🔧 de infraestrutura no momento de implantar a aplicação no container.

Estrutura de uma aplicação web

Estrutura do subdiretório WEB-INF

web.xml


        <?xml version="1.0" encoding="UTF-8"?>
        <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="3.1">
          <display-name>Minha Aplicação Web</display-name>
          <description>
            Esta é a versão X.Y.Z de uma super aplicação.
          </description>

          <context-param>
            <param-name>webmaster</param-name>
            <param-value>meuendereco@minhaempresa.com</param-value>
          </context-param>

          <servlet>
            <servlet-name>Saudacao</servlet-name>
            <servlet-class>com.minhaempresa.HelloServlet</servlet-class>
          </servlet>

          <servlet>
            <servlet-name>Registro</servlet-name>
            <jsp-file>/registro/iniciar.jsp</jsp-file>
          </servlet>

          <servlet-mapping>
            <servlet-name>Saudacao</servlet-name>
            <url-pattern>/hello</url-pattern>
          </servlet-mapping>

          <servlet-mapping>
            <servlet-name>Registro</servlet-name>
            <url-pattern>/registro/*</url-pattern>
          </servlet-mapping>

          <filter>
            <filter-name>LogSpecial</filter-name>
            <filter-class>com.minhaempresa.LogFilter</filter-class>
            <init-param>
              <param-name>logType</param-name>
              <param-value>special</param-value>
            </init-param>
          </filter>

          <filter-mapping>
            <filter-name>LogSpecial</filter-name>
            <url-pattern>*.special</url-pattern>
          </filter-mapping>

          <session-config>
            <session-timeout>30</session-timeout>
          </session-config>
        </web-app>
      

Plataforma Servlet

A tecnologia web do ambiente Java

Servlet é a **tecnologia padrão** do ambiente Java para a construção de aplicativos web, projetado para ser independente do servidor e do sistema.

Container Web e os Servlets

O container web também é chamado de **Servlet Container**.

Framework Servlet

Um Servlet


        public class HelloServlet extends HttpServlet {
          @Override
          protected void service(HttpServletRequest request,
                                 HttpServletResponse response) throws IOException {
            String idioma = request.getHeader("Accept-Language");

            response.setStatus(200);
            response.setHeader("Content-Type", "text/html");
        
            PrintWriter conteudo = response.getWriter();
            conteudo.println("<!DOCTYPE html>");
            conteudo.println("<html>");
            conteudo.println("<head>");
            conteudo.println("<meta charset=utf-8>");
            conteudo.println("<title>Servlet de Exemplo</title>");
            conteudo.println("</head>");
            conteudo.println("<body>");
            conteudo.println("<h1>Servlet de Exemplo</h1>");
            conteudo.println("<p>Este é o conteúdo de um servlet.</p>");
            conteudo.println("<p>Idioma solicitado: " + idioma + "</p>");
            conteudo.println("</body>");
            conteudo.println("</html>");
          }
        }
        

JSP: alternativa bem vinda


      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <title>Página do Servlet de Exemplo</title>
      </head>
      <body>
        <h1>Página do Servlet de Exemplo</h1>
        <p>Este é o conteúdo de um servlet.</p>
        <p>Idioma solicitado: ${idioma}</p>
      </body>
      </html>
    

Um Servlet é equivalente a um programa Java


      public class HelloProgram {
          public static void main( String[] args ) {
              Scanner teclado = new Scanner(System.in);
              String nome = teclado.nextLine();
              int idade = teclado.nextInt();

              System.out.println("Olá mundo!");
              System.out.println("Seu nome é " + nome);
              System.out.println("Sua idade é " + idade);
          }
      }
    

É perfeitamente possível desenvolver para web com Java sem o uso da tecnologia Servlet, mas é algo pouco comum.

Biblioteca vs Framework

Qual a diferença?

Deploy

Prepare a aplicação para executar

Deploy é o processo de disponibilizar uma aplicação web em um servidor web (ou container web).

Em português, conhecemos como processo de implantação.

Mesmo no servidor de desenvolvimento, é preciso fazer deploy para ver as alterações.

Java Enterprise Edition

Leitura Recomendada 🔖

Capítulo 1: Plataforma Web

Capítulo 3: Java na Web

Dúvidas?

Este slide pode ser encontrado em:
http://prof.wagnermacedo.com/2017-2/PJW/3