Java Server Pages (JSP)

Computação II - Ciência da Computação


Prof.: Danilo S. Carvalho

Nessa aula, vamos aprender a complementar o uso de servlets com Java Server Pages (JSP).


Ao final da aula, poderemos simplificar o trabalho de construir respostas à requisições HTTP e realizar a separação da apresentação da nossa interface (View) da lógica de controle e obtenção de informações (Controller).

Programar servlets nos permite responder requisições HTTP, mas escrever documentos usando métodos de um servlet é trabalhoso e torna o código Java poluído com elementos de marcação, violando a separação entre os componentes View e Controller do MVC.


Por essas razões, os servlet containers oferecem um recurso que permite a composição de documentos dinamicamente no servidor, através de uma combinação linguagem de marcação e Java.


Esse recurso é chamado de Java Server Pages (JSP).

Para usar o JSP, escrevemos um documento de marcação que contém tags especiais onde podemos colocar código Java que vai conduzir a construção do documento HTML (ou outro formato) que será enviado como resposta a uma requisição.

Escrevemos esse documento em um arquivo .jsp no servidor, no diretório de documentos Web do servlet container. O JSP será compilado para um servlet quando o servidor HTTP for iniciado, ou quando o arquivo for modificado.

Podemos incluir o código java das seguintes formas:

Scriptlet: inclusão de um fragmento de código Java sem consequência explícita na resposta. Se quisermos escrever algo na resposta precisamos imprimir usando um dos métodos do PrintWriter out. As linhas devem ser terminadas com ponto-e-vírgula como no código Java normal.

Expressão JSP: fragmento Java que escreve uma saída na resposta. A expressão Java deve resultar em um valor e não deve ser terminada com ponto-e-vírgula.

Declaração JSP: fragmento Java que declara uma ou mais variáveis, que podem ser utilizadas nos outros fragmentos Java ao longo do JSP. As linhas devem ser terminadas com ponto-e-vírgula como no código Java normal.

Diretivas JSP: marcações que passam instruções para o compilador JSP, definindo como outras partes do documento serão processadas.

Podem ser usadas para definir configurações da página, tags adicionais e importar classes.

                         
                            <html>
                            <head>
                                <title>Exemplo JSP</title>
                            </head>
                                
                                <body>
                                    <p>A data de hoje é: <% out.print((new java.util.Date()).toLocaleString()); %></p>
                                </body>
                            </html>
                        
                    
                        
                            <html>
                            <head>
                                <title>Exemplo JSP</title>
                            </head>
                                <body>
                                    <p>A data de hoje é: <%= (new java.util.Date()).toLocaleString() %></p>
                                </body>
                            </html>
                        
                    
                        
                            <html>
                            <head>
                                <title>Exemplo JSP</title>
                            </head>
                                <body>
                                    <%!
                                        HashMap<Integer, String> itens = new HashMap<>();
                                    %>
                                </body>
                            </html>
                        
                    
                        
                            <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
                            <html>
                            <head>
                                <title>Exemplo JSP</title>
                            </head>
                                <body>
                                    <%!
                                        HashMap<Integer, String> itens = new HashMap<>();
                                    %>
                                </body>
                            </html>
                        
                    

Como um JSP é um tipo de Servlet, dentro dos fragmentos de código podem ser acessados alguns objetos implícitos, como request (HTTPServletRequest), response (HTTPServletResponse), out (PrintWriter), entre outros.

Consulte o material de apoio para ver a lista completa de objetos implícitos.

                        
                            <html>
                            <head>
                                <title>Exemplo JSP</title>
                            </head>
                                <body>
                                    <p>O endereço IP do requisitante é: <%= request.getRemoteAddr() %></p>
                                </body>
                            </html>
                        
                    

Vejamos então um exemplo usando um loop para preencher uma tabela:

A declaração de variáveis, inicialização e composição da resposta são feitos em fragmentos separados.

                        
                            <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" %>
                            <html>
                                <head>
                                    <title>Exemplo JSP</title>

                                    <style>
                                        table, th, td {
                                        border: 1px solid black;
                                        border-collapse: collapse;
                                        }
                                    </style>
                                </head>
                                <body>
                                    <%!
                                    HashMap<Integer, String> itens = new HashMap<>();
                                    %>
                                    
                                    <%
                                        itens.put(1, "Primeiro");
                                        itens.put(2, "Segundo");
                                        itens.put(3, "Terceiro");
                                    %>

                                    <table>
                                        <thead>
                                            <tr>
                                                <td>Chave</td>
                                                <td>Valor</td>
                                            </tr>
                                        </thead>
                                        <tbody>
                                            <%
                                                for (Map.Entry<Integer, String> item: itens.entrySet()) {
                                                    out.print("<tr>");
                                                    out.print("<td>");
                                                    out.print(item.getKey());
                                                    out.print("</td>");
                                                    out.print("<td>");
                                                    out.print(item.getValue());
                                                    out.print("</td>");
                                                    out.print("</tr>");
                                                }
                                            %>
                                        </tbody>
                                    </table>
                                </body>
                            </html>
                        
                    

Sabemos agora como compor um documento em resposta a uma requisição usando JSP.


Leia o material de apoio e experimente escrever JSPs que respondem à formulários HTML.


Na próxima aula aprenderemos a facilitar ainda mais a composição das respostas usando a biblioteca de tags padrão JSP (JSTL).

Pergunta:

  1. Quais são as principais vantagens de se usar JSP em relação a apenas servlets?

Exercício:

  1. Crie um JSP que responda a um formulário HTML contendo o nome, a data de nacimento do usuário, e o animal preferido (gato, cachorro), com um HTML contendo uma tabela com o nome, data da requisição e a idade do usuário, e uma imagem do animal preferido.

Até a próxima aula!