Aplicação Web Java é usada para criar sites dinâmicos. O Java oferece suporte para aplicativos web por meio de Servlets e JSPs. Podemos criar um site com páginas HTML estáticas, mas quando queremos que as informações sejam dinâmicas, precisamos de uma aplicação web.
Aplicação Web Java
O objetivo deste artigo é fornecer detalhes básicos sobre os diferentes componentes em uma aplicação web e como podemos usar Servlets e JSPs para criar nossa primeira aplicação web em Java.
- Servidor e Cliente Web
- HTML e HTTP
- Compreensão de URL
- Por que precisamos de Servlets e JSPs?
- Primeira aplicação web com Servlets e JSPs
- Contêiner Web
- Estrutura de Diretórios de Aplicações Web
- Descritor de Implantação
Servidor e Cliente Web
Servidor Web é um software que pode processar a solicitação do cliente e enviar a resposta de volta ao cliente. Por exemplo, o Apache é um dos servidores web mais amplamente utilizados. O Servidor Web é executado em alguma máquina física e escuta a solicitação do cliente em uma porta específica. Um cliente web é um software que ajuda na comunicação com o servidor. Alguns dos clientes web mais amplamente utilizados são Firefox, Google Chrome, Safari, etc. Quando solicitamos algo ao servidor (por meio de URL), o cliente web cuida de criar uma solicitação e enviá-la ao servidor e, em seguida, analisa a resposta do servidor e a apresenta ao usuário.
HTML e HTTP
Servidor Web e Cliente Web são dois softwares separados, então deve haver uma linguagem comum para a comunicação. HTML é a linguagem comum entre servidor e cliente e significa HiperTexto Marcado Linguagem. Servidor web e cliente precisam de um protocolo de comunicação comum, e o HTTP (HiperTexto Transferência Protocolo) é o protocolo de comunicação entre servidor e cliente. O HTTP é executado sobre o protocolo de comunicação TCP/IP. Algumas partes importantes da Solicitação HTTP são:
- Método HTTP – ação a ser realizada, geralmente GET, POST, PUT etc.
- URL – Página a ser acessada
- Parâmetros do Formulário – semelhantes aos argumentos em um método Java, por exemplo, detalhes de usuário e senha da página de login.
Requisição HTTP de Exemplo:
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Algumas partes importantes da Resposta HTTP são:
- Código de Status – um número inteiro que indica se a solicitação foi bem-sucedida ou não. Alguns códigos de status conhecidos são 200 para sucesso, 404 para Não Encontrado e 403 para Acesso Proibido.
- Tipo de Conteúdo – texto, html, imagem, pdf etc. Também conhecido como tipo MIME
- Conteúdo – dados reais que são renderizados pelo cliente e mostrados ao usuário.
Resposta HTTP de Exemplo:
200 OK
Date: Wed, 07 Aug 2013 19:55:50 GMT
Server: Apache-Coyote/1.1
Content-Length: 309
Content-Type: text/html;charset=US-ASCII
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=Wed Aug 07 12:57:55 PDT 2013
</h3>
</body>
</html>
Tipo MIME ou Tipo de Conteúdo: Se você observar o cabeçalho de resposta HTTP de exemplo acima, ele contém a tag “Content-Type”. Também é chamado de tipo MIME, e o servidor o envia para o cliente para informá-lo sobre o tipo de dados que está enviando. Isso ajuda o cliente a renderizar os dados para o usuário. Alguns dos tipos MIME mais usados são text/html, text/xml, application/xml etc.
Compreensão de URL
URL é a sigla de Localizador Universal de Recursos e é usado para localizar o servidor e o recurso. Cada recurso na web tem seu próprio endereço único. Vamos ver partes do URL com um exemplo. https://localhost:8080/FirstServletProject/jsps/hello.jsp https:// – Esta é a primeira parte do URL e fornece o protocolo de comunicação a ser usado na comunicação entre servidor e cliente. localhost – O endereço único do servidor, na maioria das vezes é o nome do host do servidor que mapeia para um endereço IP único. Às vezes, vários nomes de host apontam para os mesmos endereços IP e o host virtual do servidor web se encarrega de enviar uma solicitação para a instância do servidor específica. 8080 – Esta é a porta na qual o servidor está ouvindo, é opcional e se não a fornecermos no URL, a solicitação vai para a porta padrão do protocolo. Os números das portas de 0 a 1023 são portas reservadas para serviços conhecidos, por exemplo, 80 para HTTP, 443 para HTTPS, 21 para FTP, etc. FirstServletProject/jsps/hello.jsp – Recurso solicitado do servidor. Pode ser HTML estático, PDF, JSP, servlets, PHP etc.
Por que precisamos de Servlets e JSPs?
Servidores web são bons para páginas HTML com conteúdo estático, mas não sabem como gerar conteúdo dinâmico ou salvar dados em bancos de dados. Portanto, precisamos de outra ferramenta que possamos usar para gerar conteúdo dinâmico. Existem várias linguagens de programação para conteúdo dinâmico, como PHP, Python, Ruby on Rails, Java Servlets e JSPs. Java Servlet e JSPs são tecnologias do lado do servidor para ampliar a capacidade dos servidores web, fornecendo suporte para resposta dinâmica e persistência de dados.
Desenvolvimento Web em Java
Primeira Aplicação Web com Servlet e JSP
Vamos usar o “Eclipse IDE for Java EE Developers” para criar nossa primeira aplicação servlet. Como o servlet é uma tecnologia do lado do servidor, precisaremos de um contêiner web que suporte a tecnologia Servlet, então usaremos o servidor Apache Tomcat. É muito fácil configurar, e deixarei essa parte para você. Para facilitar o desenvolvimento, podemos configurar o Tomcat com o Eclipse, o que ajuda na implantação e execução fácil de aplicações. Vá para as Preferências do Eclipse, selecione Ambientes de Tempo de Execução do Servidor e escolha a versão do seu servidor Tomcat. O meu é o Tomcat 7. Forneça o local do diretório do Apache Tomcat e as informações do JRE para adicionar o ambiente de execução. Agora vá para a visualização de Servidores e crie um novo servidor como na imagem abaixo, apontando para o ambiente de execução adicionado anteriormente.
Nota: Se a guia Servidores não estiver visível, você pode selecionar Janela > Mostrar Visão > Servidores para torná-la visível na janela do Eclipse. Tente parar e iniciar o servidor para garantir que esteja funcionando corretamente. Se você já iniciou o servidor pelo terminal, será necessário pará-lo no terminal e depois iniciá-lo pelo Eclipse, caso contrário, não funcionará perfeitamente. Agora estamos prontos com nossa configuração para criar o primeiro servlet e executá-lo no servidor Tomcat. Selecione Arquivo > Novo > Projeto Web Dinâmico e use a imagem abaixo para fornecer o tempo de execução como o servidor que adicionamos na última etapa e a versão do módulo como 3.0 para criar nosso servlet usando as especificações Servlet 3.0.
Você pode clicar diretamente no botão Concluir para criar o projeto ou pode clicar nos botões Próximo para verificar outras opções. Agora selecione Arquivo > Novo > Servlet e use a imagem abaixo para criar nosso primeiro servlet. Novamente, podemos clicar em Concluir ou verificar outras opções por meio do botão Próximo.
Quando clicamos no botão Concluir, ele gera o esqueleto do nosso Servlet, então não precisamos digitar todos os métodos e importações diferentes no servlet, economizando tempo. Agora adicionaremos algum código HTML com dados dinâmicos no método doGet(), que será invocado para solicitações HTTP GET. Nosso primeiro servlet parece assim.
package com.journaldev.first;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class FirstServlet
*/
@WebServlet(description = "My First Servlet", urlPatterns = { "/FirstServlet" , "/FirstServlet.do"}, initParams = {@WebInitParam(name="id",value="1"),@WebInitParam(name="name",value="pankaj")})
public class FirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
public static final String HTML_START="";
public static final String HTML_END="";
/**
* @see HttpServlet#HttpServlet()
*/
public FirstServlet() {
super();
// TODO Construtor gerado automaticamente
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
Date date = new Date();
out.println(HTML_START + "Hi There!
Date="+date +"
"+HTML_END);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Método gerado automaticamente
}
}
Antes do Servlet 3, era necessário fornecer informações sobre o padrão de URL no descritor de implantação da aplicação web. No entanto, o Servlet 3.0 utiliza anotações Java, o que é fácil de entender e reduz as chances de erros. Agora, escolha a opção Run > Run on Server na janela do editor de servlet e utilize as imagens abaixo para as opções.
Após clicar em concluir, o navegador será aberto no Eclipse, e obteremos a seguinte página HTML.
Você pode atualizá-la para verificar que a data é dinâmica e continua mudando. Você também pode abri-la fora do Eclipse, em qualquer outro navegador. Portanto, o servlet é usado para gerar HTML e enviá-lo como resposta. Se você observar a implementação doGet(), verá que estamos criando um documento HTML e escrevendo-o no objeto PrintWriter de resposta, adicionando informações dinâmicas onde necessário. Isso é bom para começar, mas se a resposta for extensa, com muitos dados dinâmicos, pode ser propenso a erros e difícil de ler e manter. Essa é a principal razão para a introdução das JSPs. JSP é também uma tecnologia no lado do servidor e é semelhante ao HTML, mas com recursos adicionais para adicionar conteúdo dinâmico onde necessário. As JSPs são adequadas para apresentação, pois são fáceis de escrever, sendo semelhantes ao HTML. Aqui está nosso primeiro programa JSP que faz a mesma coisa que o servlet mencionado anteriormente.
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=US-ASCII"
pageEncoding="US-ASCII"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Hello</title>
</head>
<body>
<h2>Hi There!</h2>
<br>
<h3>Date=<%= new Date() %>
</h3>
</body>
</html>
Se executarmos o JSP acima, obteremos uma saída como na imagem abaixo. A hierarquia do projeto final parece com a imagem abaixo no Eclipse.
Download do Projeto FirstServlet
Download do Projeto Exemplo Servlet Hello World
Vamos analisar os Servlets e JSPs com mais detalhes em futuras postagens, mas antes de concluir esta postagem, devemos ter uma boa compreensão de alguns aspectos das aplicações web Java.
Container Web
Tomcat é um contêiner web, quando uma solicitação é feita do Cliente para o servidor web, ele passa a solicitação para o contêiner web e é trabalho do contêiner web encontrar o recurso correto para lidar com a solicitação (servlet ou JSP) e, em seguida, usar a resposta do recurso para gerar a resposta e fornecê-la ao servidor web. Em seguida, o servidor web envia a resposta de volta para o cliente. Quando o contêiner web recebe a solicitação e, se for para servlet, o contêiner cria dois Objetos HTTPServletRequest e HTTPServletResponse. Em seguida, ele encontra o servlet correto com base na URL e cria uma thread para a solicitação. Em seguida, ele invoca o método de serviço do servlet e, com base no método HTTP, o método de serviço invoca os métodos doGet() ou doPost(). Os métodos do servlet geram a página dinâmica e a escrevem na resposta. Uma vez que a thread do servlet está completa, o contêiner converte a resposta em resposta HTTP e a envia de volta para o cliente. Alguns dos trabalhos importantes realizados pelo contêiner web são:
- Suporte de Comunicação – O contêiner fornece uma maneira fácil de comunicação entre o servidor web e os servlets e JSPs. Por causa do contêiner, não precisamos construir um soquete de servidor para ouvir qualquer solicitação do servidor web, analisar a solicitação e gerar uma resposta. Todas essas tarefas importantes e complexas são feitas pelo contêiner e tudo o que precisamos é focar na nossa lógica de negócios para nossas aplicações.
- Ciclo de Vida e Gerenciamento de Recursos – O contêiner cuida do gerenciamento do ciclo de vida do servlet. O contêiner cuida do carregamento dos servlets na memória, inicializando servlets, invocando métodos de servlets e destruindo-os. O contêiner também fornece utilitários como JNDI para pool de recursos e gerenciamento.
- Suporte a Multithreading – O contêiner cria uma nova thread para cada solicitação ao servlet e, quando ela é processada, a thread é encerrada. Assim, os servlets não são inicializados para cada solicitação, economizando tempo e memória.
- Suporte a JSP – As JSPs não se parecem com classes Java normais, e o contêiner da web oferece suporte para JSP. Cada JSP na aplicação é compilada pelo contêiner, convertida em Servlet e, em seguida, o contêiner as gerencia como outros servlets.
- Tarefa Diversas – O contêiner da web gerencia o pool de recursos, faz otimizações de memória, executa o coletor de lixo, fornece configurações de segurança, suporte para várias aplicações, implantação dinâmica e várias outras tarefas nos bastidores que facilitam nossa vida.
Estrutura de Diretório de Aplicações Web
As Aplicações Web Java são empacotadas como Arquivo de Arquitetura Web (WAR) e possuem uma estrutura definida. Você pode exportar o projeto web dinâmico acima como um arquivo WAR e descompactá-lo para verificar a hierarquia. Será algo semelhante à imagem abaixo.
Descritor de Implantação
web.xml é o descritor de implantação da aplicação web e contém um mapeamento para servlets (antes da versão 3.0), páginas de boas-vindas, configurações de segurança, configurações de tempo limite de sessão, etc. Isso é tudo para o tutorial de inicialização de aplicativo web Java. Vamos explorar Servlets e JSPs mais a fundo em futuras postagens. Atualização: O próximo tutorial desta série é Tutorial de Servlets Java
Source:
https://www.digitalocean.com/community/tutorials/java-web-application-tutorial-for-beginners