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

arrow_back Aula 04 - Trabalhando com sessões

Usando a sessão em outras partes do sistema II

Vamos agora alterar o sistema de cadastro desenvolvido na aula passada, na qual tínhamos usado a abordagem de repasse de parâmetros, para considerar sua implementação através do uso de sessões. Pois bem, para você não apagar o código já criado, ou seja, mantenha o projeto aula03 como está e simplesmente copie os códigos necessários assim que solicitado. Vamos criar um novo Servlet no projeto atual (da aula 04) e chamá-lo de ServletTela1CadastroSessao. Copie o arquivo cadastro.html da aula passada para o projeto dessa aula e altere o formulário web da página cadastro.html para apontar para esse novo Servlet:

<form action="ServletTela1CadastroSessao">

Depois, copie a implementação dos métodos doGet() e doPost() do ServletTela1Cadastro (da aula passada) para o ServletTela1CadastroSessao (dessa aula). A página gerada pelo ServletTela1CadastroSessao precisa ter um formulário que aponte para ServletTela2CadastroSessao, um novo Servlet que também precisa ser criado. Além disso, precisaremos receber os dados que vêm da primeira tela (dados pessoais) e colocá-los em algum lugar temporário no servidor. E qual é esse lugar? O objeto sessão!

Porém, para estruturar melhor os dados a serem recebidos, é melhor criar uma classe para agrupá-los, como mostrado a seguir, na Listagem 5.

x
1
package aula04;
2
3
public class DadosPessoais {
4
5
    private String nome;
6
    private String sobrenome;
7
    private String rua;
8
    private String complemento;
9
    private String cidade;
10
    private String cep;
11
    private String estado;
12
    public String getNome() {
13
            return nome;
14
    }
15
    public void setNome(String nome) {
16
            this.nome = nome;
17
    }
18
    public String getSobrenome() {
19
            return sobrenome;
20
    }
21
    public void setSobrenome(String sobrenome) {
22
            this.sobrenome = sobrenome;
23
    }
24
    public String getRua() {
25
            return rua;
26
    }
27
    public void setRua(String rua) {
28
            this.rua = rua;
29
    }
30
    public String getComplemento() {
31
            return complemento;
32
    }
33
    public void setComplemento(String complemento) {
34
            this.complemento = complemento;
35
    }
36
    public String getCidade() {
37
            return cidade;
38
    }
39
    public void setCidade(String cidade) {
40
            this.cidade = cidade;
41
    }
42
    public String getCep() {
43
            return cep;
44
    }
45
    public void setCep(String cep) {
46
            this.cep = cep;
47
    }
48
    public String getEstado() {
49
            return estado;
50
    }
51
    public void setEstado(String estado) {
52
            this.estado = estado;
53
    }
54
55
}
Listagem 5 - Código-fonte da classe DadosPessoais

Cada parâmetro da requisição será armazenado em um atributo da classe DadosPessoais. Por exemplo, o nome do usuário será armazenado no atributo nome da classe DadosPessoais. A mesma coisa acontece para os demais parâmetros da requisição a serem armazenados na sessão do usuário.

Sendo assim, o nosso ServletTela1CadastroSessao será implementado de acordo com o código mostrado na Listagem 6. Note na linha 45 que o formulário agora referencia o ServletTela2CadastroSessao ao invés do antigo ServletTela1Cadastro. Note também a verificação de que o usuário está autenticado no sistema (linhas 31 e 32). Essa verificação deve ser feita por todos os Servlets que implementem operações as quais exijam que o usuário esteja autenticado.

58
1
package aula04;
2
3
import java.io.IOException;
4
import java.io.PrintWriter;
5
6
import javax.servlet.ServletException;
7
import javax.servlet.annotation.WebServlet;
8
import javax.servlet.http.HttpServlet;
9
import javax.servlet.http.HttpServletRequest;
10
import javax.servlet.http.HttpServletResponse;
11
import javax.servlet.http.HttpSession;
12
13
@WebServlet("/ServletTela1CadastroSessao")
14
public class ServletTela1CadastroSessao extends HttpServlet {
15
    private static final long serialVersionUID = 1L;
16
17
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18
        doPost(request, response);
19
    }
20
21
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
22
        PrintWriter resposta = response.getWriter();
23
        resposta.write("<html>");
24
        resposta.write("<head>");
25
        resposta.write("<title>Dados Profissionais</title>");
26
        resposta.write("</head>");
27
        resposta.write("<body>");
28
        HttpSession sessao = request.getSession(false);
29
        if (sessao == null
30
           || sessao.getAttribute(ServletLogin.USUARIO) == null) {
31
                resposta.write(
32
                "<a href=\"login.html\">Faça primeiro o seu login</a><BR>");
33
        } else {
34
            DadosPessoais dados = new DadosPessoais();
35
            dados.setNome(request.getParameter("nome"));
36
            dados.setSobrenome(request.getParameter("sobrenome"));
37
            dados.setRua(request.getParameter("rua"));
38
            dados.setComplemento(request.getParameter("complemento"));
39
            dados.setCidade(request.getParameter("cidade"));
40
            dados.setCep(request.getParameter("cep"));
41
            dados.setEstado(request.getParameter("estado"));
42
            sessao.setAttribute("dadosPessoais", dados);
43
44
            resposta.write("Preencha seus dados profissionais:");
45
            resposta.write("<form action=\"ServletTela2CadastroSessao\" method=\"POST\">");
46
            resposta.write("Empresa:<input type=\"text\" name=\"empresa\"> <BR>");
47
            resposta.write("Endereço profissional:<BR>");
48
            resposta.write("Rua: <input type=\"text\" name=\"ruaEmpresa\">");
49
            resposta.write("Complemento:<input type=\"text\" name=\"complementoEmpresa\"><BR>");
50
            resposta.write("Cidade:<input type=\"text\" name=\"cidadeEmpresa\">");
51
            resposta.write("CEP:<input type=\"text\" name=\"cepEmpresa\">");
52
            resposta.write("Estado:<input type=\"text\" name=\"estadoEmpresa\"><BR>");
53
            resposta.write("<input type=\"submit\" value=\"Confirmar\"><BR>");
54
            resposta.write("</form>");
55
            resposta.write("</body></html>");
56
        }
57
    }
58
}
Listagem 6 - Código-fonte do ServletTela1CadastroSessao

Finalmente, o código da linha 34 a 42 é responsável por pegar os dados da requisição, agrupá-los no objeto do tipo DadosPessoais e armazená-lo na sessão do usuário. Basicamente, isso é feito por comandos como o da linha 36, onde o valor do parâmetro da requisição (retorno do método getParameter(“sobrenome”)) é utilizado para setar o atributo do objeto DadosPessoais (método setSobrenome()). No final de tudo, é necessário armazenar o objeto DadosPessoais na sessão (linha 42).

Para o ServletTela2CadastroSessao (sucessor do antigo ServletTela2Cadastro), precisaremos criá-lo para receber os dados da segunda tela de cadastro (dados profissionais), recuperar os dados pessoas da sessão do usuário e, finalmente, montar a tela de confirmação de cadastro. Vamos ver como fica seu código? Ele está mostrado na Listagem 7.

Note o uso do bloco de código das linhas 30 a 32, responsáveis por verificar se o usuário está autenticado no sistema, bem como o código da linha 36 a 38, responsável por verificar se o objeto DadosPessoais foi criado e colocado na sessão do usuário. Se o objeto não tiver sido criado e colocado na sessão, o que isso quer dizer? Bom, muito provavelmente o usuário se autenticou no sistema, mas digitou diretamente a URL da segunda tela, pulando o preenchimento da primeira tela.

Por fim, note que o bloco de código da linha 39 a 51 pegam os dados do objeto DadosPessoais, enquanto o bloco de código da linha 52 a 63 pegam dados do objeto request, ou seja, digitados e enviados pela tela anterior do sistema.

76
1
package aula04;
2
3
import java.io.IOException;
4
import java.io.PrintWriter;
5
6
import javax.servlet.ServletException;
7
import javax.servlet.http.HttpServlet;
8
import javax.servlet.http.HttpServletRequest;
9
import javax.servlet.http.HttpServletResponse;
10
import javax.servlet.http.HttpSession;
11
12
public class ServletTela2CadastroSessao extends HttpServlet {
13
14
        protected void doGet(HttpServletRequest request,
15
                        HttpServletResponse response) 
16
                                throws ServletException, IOException {
17
                doPost(request, response);
18
        }
19
20
        protected void doPost(HttpServletRequest request,
21
                        HttpServletResponse response) 
22
                                throws ServletException, IOException {
23
                PrintWriter resposta = response.getWriter();
24
                resposta.write("<html>");
25
                resposta.write("<head>");
26
                resposta.write("<title>Confirmação de registro</title>");
27
                resposta.write("</head>");
28
                resposta.write("<body>");
29
                HttpSession sessao = request.getSession(false);
30
                if (sessao == null 
31
                   || sessao.getAttribute(ServletLogin.USUARIO) == null) {
32
                        resposta.write(
33
                            "<a href=\"login.html\">Faça primeiro o seu login</a>");
34
                } else {
35
                        resposta.write(
36
                                "<h3>Registro realizado com sucesso!</h3><BR><BR>");
37
                        resposta.write("<b>Seus dados pessoais:</b><BR>");
38
                        DadosPessoais dados = (DadosPessoais) sessão
39
                                .getAttribute("dadosPessoais");
40
                        if (dados == null) {
41
                        resposta.write(
42
"<a href=\"ServletLogin\">Dados incompletos. Inicie o sistema novamente.</a>");
43
                        } else {
44
                                resposta.write(dados.getNome() + " "
45
                                + dados.getSobrenome());
46
                                resposta.write("<BR>");
47
                                resposta.write(dados.getRua());
48
                                resposta.write("<BR>");
49
                                resposta.write(dados.getComplemento());
50
                                resposta.write("<BR>");
51
                                resposta.write(dados.getCidade());
52
                                resposta.write(", ");
53
                                resposta.write(dados.getCep());
54
                                resposta.write(", ");
55
                                resposta.write(dados.getEstado());
56
                                resposta.write("<BR>");
57
                                resposta.write(
58
                                   "<b>Seus dados profissionais:</b><BR>");
59
                                resposta.write(request.getParameter("empresa"));
60
                                resposta.write("<BR>");
61
                                resposta.write(request.getParameter("ruaEmpresa"));
62
                                resposta.write("<BR>");
63
                                resposta.write(request.getParameter(
64
                                "complementoEmpresa"));
65
                                resposta.write("<BR>");
66
                                resposta.write(request.getParameter("cidadeEmpresa"));
67
                                resposta.write(", ");
68
                                resposta.write(request.getParameter("cepEmpresa"));
69
                                resposta.write(", ");
70
                                resposta.write(request.getParameter("estadoEmpresa"));
71
                           }
72
               }
73
               resposta.write("</body></html>");
74
     }
75
76
} 
Listagem 7 - Servlet responsável por montar a segunda tela de cadastro

Versão 5.3 - Todos os Direitos reservados