Aplicação Web Java é usada para criar websites dinâmicos. O Java oferece suporte para aplicações web por meio de Servlets e JSPs. Podemos criar um site com páginas HTML estáticas, mas quando desejamos 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 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 da Aplicação Web
- Descritor de Implantação
Servidor e Cliente Web
Um 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 uma determinada máquina física e aguarda 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 o Firefox, o Google Chrome, o Safari, etc. Quando solicitamos algo ao servidor (por meio de URL), o cliente web se encarrega de criar uma solicitação, enviá-la ao servidor, analisar a resposta do servidor e apresentá-la ao usuário.
HTML e HTTP
O servidor web e o cliente web são dois softwares separados, portanto, deve haver uma linguagem comum para a comunicação. HTML é a linguagem comum entre o servidor e o cliente e significa Linguagem de Marcação Hipertexto. O servidor web e o cliente web precisam de um protocolo de comunicação comum, o HTTP (Protocolo de Transferência de Hipertexto) é o protocolo de comunicação entre o servidor e o 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 executada, geralmente GET, POST, PUT, etc.
- URL – página a ser acessada
- Parâmetros de formulário – semelhantes aos argumentos em um método Java, por exemplo, detalhes de usuário e senha da página de login.
Pedido HTTP de exemplo:
GET /FirstServletProject/jsps/hello.jsp HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Algumas das partes importantes da Resposta HTTP são:
- Código de Status – um número inteiro para indicar se o pedido foi bem-sucedido ou não. Alguns dos códigos de status mais 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 de Recursos Universal 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 o mesmo endereço IP e o host virtual do servidor web cuida de enviar uma solicitação para a instância específica do servidor. 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 de porta 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?
Os 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 estender 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 servlet é uma tecnologia do lado do servidor, vamos precisar de um contêiner web que suporte a tecnologia Servlet, então vamos usar o servidor Apache Tomcat. É muito fácil configurar e estou deixando 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 Preferências do Eclipse e selecione Ambientes de Tempo de Execução do Servidor e selecione a versão do seu servidor Tomcat, o meu é Tomcat 7. Forneça o local do diretório do Apache Tomcat e informações do JRE para adicionar o ambiente de tempo 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 tempo de execução adicionado acima.
Nota: Se a guia Servidores não estiver visível, você pode selecionar Janela > Mostrar Visualização > Servidores para que ela fique visível na janela do Eclipse. Tente parar e iniciar o servidor para garantir que esteja funcionando corretamente. Se você já iniciou o servidor a partir do terminal, então terá que pará-lo a partir do terminal e depois iniciar a partir do Eclipse, senão 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 tempo de execução como o servidor que adicionamos no último passo e 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 podemos verificar outras opções através do botão próximo.
Quando clicamos no botão Concluir, ele gera o código esqueleto do nosso Servlet, então não precisamos digitar todos os métodos e importações diferentes no servlet e nos poupa tempo. Agora vamos adicionar algum HTML com código de 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();
// Apenas gerar construtor automático TODO
}
/**
* @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 {
// Apenas gerar método automático TODO
}
}
Antes do Servlet 3, precisamos fornecer informações sobre o padrão de URL no descritor de implantação da aplicação web, mas o servlet 3.0 usa anotações Java que são fáceis de entender e as chances de erros são menores. Agora escolha Executar > Executar no servidor na janela do editor de servlet e use as imagens abaixo para as opções.
Após clicar em Concluir, o navegador será aberto no Eclipse e obtemos a seguinte página HTML.
Você pode atualizá-la para verificar que a Data é dinâmica e continua mudando, você pode abri-la fora do Eclipse também em qualquer outro navegador. Portanto, o servlet é usado para gerar HTML e enviá-lo em resposta, se você olhar para a implementação doGet(), na verdade estamos criando um documento HTML escrevendo-o no objeto PrintWriter de resposta e estamos adicionando informações dinâmicas onde precisamos. É bom para começar, mas se a resposta for enorme com muitos dados dinâmicos, é propenso a erros e difícil de ler e manter. Esta é a razão principal para a introdução de JSPs. JSP é também uma tecnologia do lado do servidor e é como HTML com recursos adicionais para adicionar conteúdo dinâmico onde precisamos. JSPs são bons para apresentação porque é fácil escrever, pois é como HTML. Aqui está nosso primeiro programa JSP que faz a mesma coisa que o servlet acima.
<%@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, obtemos 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 de Exemplo Servlet Hello World
Vamos explorar 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 da web, quando uma solicitação é feita do cliente para o servidor da web, ela passa a solicitação para o contêiner da web e é responsabilidade do contêiner da 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 da web. Em seguida, o servidor da web envia a resposta de volta ao cliente. Quando o contêiner da web recebe a solicitação e se for para o 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 service() do servlet e com base no método HTTP, o método service() 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 concluída a thread do servlet, o contêiner converte a resposta em uma resposta HTTP e a envia de volta ao cliente. Alguns dos trabalhos importantes realizados pelo contêiner da web são:
- Suporte de comunicação – O contêiner fornece uma maneira fácil de comunicação entre o servidor da web e os servlets e JSPs. Devido ao contêiner, não precisamos construir um soquete do servidor para ouvir qualquer solicitação do servidor da web, analisar a solicitação e gerar uma resposta. Todas essas tarefas importantes e complexas são realizadas pelo contêiner e tudo o que precisamos fazer é focar na lógica de negócios de 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, inicialização dos servlets, invocação dos métodos do servlet e destruição deles. O contêiner também fornece utilidades como JNDI para agrupamento e gerenciamento de recursos.
- Suporte a Multithreading – O contêiner cria uma nova thread para cada solicitação ao servlet e quando é processada, a thread é encerrada. Portanto, os servlets não são inicializados para cada solicitação e economizam tempo e memória.
- Suporte a JSP – As JSPs não se parecem com classes Java normais e o contêiner web fornece suporte para JSP. Cada JSP na aplicação é compilada pelo contêiner, convertida em Servlet e então o contêiner as gerencia como outros servlets.
- Tarefas Diversas – O contêiner web gerencia o pool de recursos, faz otimizações de memória, executa o coletor de lixo, fornece configurações de segurança, suporta múltiplas aplicações, implantação rápida e várias outras tarefas nos bastidores que facilitam nossa vida.
Estrutura de Diretórios de Aplicações Web
As Aplicações Web Java são empacotadas como Arquivo de Arquivamento Web (WAR) e possuem uma estrutura definida. Você pode exportar o projeto web dinâmico acima como arquivo WAR e descompactá-lo para verificar a hierarquia. Será algo como a imagem abaixo.
Descritor de Implantação
web.xml arquivo é 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 da aplicação web Java, exploraremos Servlets e JSPs mais em futuras postagens. Atualização: Próximo tutorial desta série é Tutorial de Servlets Java
Source:
https://www.digitalocean.com/community/tutorials/java-web-application-tutorial-for-beginners