Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 13 - Desenvolvendo uma livraria virtual – Parte 2

Servlet controlador da livraria virtual

Seguindo o padrão MVC (Model-View-Controler), utilizaremos um Servlet como componente controlador e arquivos JSP como os componentes responsáveis por montar as páginas de resposta ao usuário.

O Servlet controlador da livraria virtual, de nome ServletControladorLivraria, é mostrado na Listagem 2. Esse Servlet implementa o método doGet() (linha 16) e utiliza o método doPost() (linha 43) apenas para redirecionar a requisição ao método doGet().

Na execução do Servlet controlador, é feito o acesso ao sistema da livraria virtual (linha 20) por meio do atributo de contexto, conforme demonstrado anteriormente. Também é feito um acesso à sessão do usuário (linha 22). Lembre-se de que o método getSession() cria uma sessão, caso ela não exista. Em seguida, nas linhas 24 a 28, o carrinho de compras é acessado ou criado e armazenado como atributo da sessão de nome “cart”, caso ele ainda não exista.

Por fim, as linhas 30 a 40 são responsáveis por processar e montar a resposta para as requisições dos clientes. Para facilitar esse trabalho, utilizaremos a seguinte estratégia:

  • As URLs de acesso ao sistema não possuirão extensão. Isso pode ser visto no seguinte exemplo http://localhost:8080/Livraria/livros/catalogo.
  • O caminho da URL será utilizado para descobrir qual o serviço a ser executado. Isso é feito na linha 30, onde o método getServletPath() da variável request é utilizado para recuperar parte da URL de acesso. No caso, a parte relativa ao caminho do Servlet: /livros/catalogo. Essa informação é armazenada na variável acaoSelecionada.
  • Dependendo da ação a ser executada (conteúdo da variável acaoSelecionada), uma determinada operação do sistema pode ser executada. Essas operações, no caso, serão apresentadas aos poucos e seu código será inserido logo após a linha 32.

O conteúdo da variável acaoSelecionada é utilizado, também, para definir o componente (arquivo JSP) responsável por montar a página de resposta. Isso é feito pela linha 34, onde usamos a convenção do nome e pasta onde se encontra o arquivo JSP de resposta igual ao conteúdo da variável acaoSelecionada (URL do Servlet) concatenada com a extensão .jsp.

Dessa forma, o acesso à URL http://localhost:8080/Livraria/livros/catalogo poderá resultar na execução de uma operação do sistema identificada pelo final da URL (/livros/catalogo) e sua resposta será montada de acordo com o arquivo catalogo.jsp encontrado na pasta de nome livros.

x
1
package livraria.servlet;
2
3
import javax.servlet.annotation.WebServlet;
4
import javax.servlet.http.HttpServlet;
5
import javax.servlet.http.HttpServletRequest;
6
import javax.servlet.http.HttpServletResponse;
7
import javax.servlet.http.HttpSession;
8
9
import livraria.negocio.CarrinhoCompras;
10
import livraria.negocio.Livraria;
11
import livraria.negocio.Livro;
12
import livraria.negocio.excecoes.CompraException;
13
import livraria.negocio.excecoes.LivroNaoEncontradoException;
14
15
@WebServlet(name="Controlador", urlPatterns={"/livros/livraria"})
16
public class ServletControladorLivraria extends HttpServlet {
17
    private static final long serialVersionUID = 1L;
18
    public void doGet(HttpServletRequest request, HttpServletResponse response) {
19
        String idLivro = null;
20
        String limpar = null;
21
        Livro livro = null;
22
        Livraria livraria = (Livraria) getServletContext().getAttribute(
23
        LivrariaContextListener.SISTEMA_LIVRARIA);
24
        HttpSession session = request.getSession();
25
26
        CarrinhoCompras carrinho = (CarrinhoCompras) session.getAttribute("cart");
27
        if (carrinho == null) {
28
            carrinho = new CarrinhoCompras();
29
            session.setAttribute("cart", carrinho);
30
        }
31
32
        String acaoSelecionada = request.getServletPath();
33
34
        // Aqui entram as operações do sistema
35
36
        String tela = acaoSelecionada + ".jsp";
37
38
        try {
39
            request.getRequestDispatcher(tela).forward(request, response);
40
        } catch (Exception ex) {
41
             ex.printStackTrace();
42
        }
43
    }
44
45
    public void doPost(HttpServletRequest request, HttpServletResponse response) {
46
        doGet(request, response);
47
    }
48
}
Listagem 2 - Código-fonte do Servlet controlador da livraria virtual

O arquivo livraria.jsp será o arquivo responsável por montar a tela inicial do sistema, a qual é mostrada na Figura 1. Ele deve ser criado dentro de uma pasta chamada livros. O código JSP desse arquivo é mostrado em seguida, na Listagem 3. Ele começa com a inclusão da taglib c, na linha 1, ou seja, você precisa adicionar a jstl-1.2.jar no WebContent/WEB-INF/lib, como visto em anteriormente). Seu código inclui, também, o uso de uma imagem chamada livro.gif, a qual é impressa antes e depois do texto Minha Livraria Virtual. Para implementar essa página, você deve escolher uma imagem que achar adequada. Faça uma busca na internet. Uma sugestão é usar o serviço de busca de imagens do Google (http://images.google.com.br).

Figura 01 - Tela inicial do sistema Livraria Virtual
Tela inicial do sistema Livraria Virtual
27
1
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2
<html>
3
    <head>
4
        <title>
5
            Minha Livraria Virtual
6
        </title>
7
    </head>
8
    <body bgcolor="#FFFFFF">
9
        <center> 
10
            <hr>
11
            <br>
12
            <h1> 
13
                <img width="50" src="../imagem/livro.gif">
14
                <font size="+3">Minha Livraria Virtual</font> 
15
                <img width="50" src="../imagem/livro.gif">
16
            </h1> 
17
        </center>
18
           <br>
19
            <hr>
20
               <p><b>Livraria Online</b></p>
21
               <c:url var="url" value="/livros/catalogo" />
22
               <p><b><a href="${url}?Add=">Iniciar compras</a></b>
23
            <br>
24
            <hr>
25
      <center><em>Copyright © 2010 Livraria Virtual. </em></center>
26
   </body>
27
</html>
Listagem 3 - Código JSP do arquivo responsável por montar a tela inicial mostrada na Figura 1

Já na linha 30, temos o uso do marcador , o qual é responsável por montar a URL correta para o caminho /livros/catalogo. Por exemplo, se seu contexto web tiver o nome Livraria, o acesso a essa página deve ser http://localhost:8080/Livraria/livros/catalogo. Sendo assim, o valor atribuído à variável URL, criada pelo marcador , terá valor igual a /Livraria/livros/catalogo. Isso torna o sistema independente do nome a ser utilizado no contexto web.

A URL armazenada na variável url é, então, utilizada na linha 32 com o objetivo de criar a referência para a página de compra de livros. Note o acesso à variável url, adicionado do texto "?Add=". Isso fará com que a URL gerada seja, na verdade, igual a /Livraria/livros/catalogo?Add=. O uso desse parâmetro Add passado com valor vazio será visto mais adiante, quando estudarmos o código do arquivo catalogo.jsp

Versão 5.3 - Todos os Direitos reservados