É um programa responsável por executar código Java em todas as requisições HTTP recebidas.
Servidor web atende requisições a arquivos estáticos e encaminha para o container outras requisições.
Container atende a todas as requisições web
O container web é, na verdade, uma **especificação** da plataforma Java EE. Esta especificação define regras de como um container deve se comportar.
É 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.
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>
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.
O container web também é chamado de **Servlet Container**.
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>");
}
}
<!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.
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.
Capítulo 1: Plataforma Web
Capítulo 3: Java na Web
Este slide pode ser encontrado em:
http://prof.wagnermacedo.com/2017-2/PJW/3