Um exemplo de MVC com servlets e JSP

Um exemplo de MVC com servlets e JSP

1. Visão geral

Neste artigo rápido, criaremos um pequeno aplicativo da web que implementa o padrão de design Model View Controller (MVC), usando Servlets e JSPs básicos.

Exploraremos um pouco sobre como o MVC funciona e seus principais recursos antes de prosseguirmos para a implementação.

2. Introdução ao MVC

O Model-View-Controller (MVC) é um padrão usado na engenharia de software para separar a lógica do aplicativo da interface do usuário. Como o nome indica, o padrão MVC tem três camadas.

O Modelo define a camada de negócios do aplicativo, o Controlador gerencia o fluxo do aplicativo e a Visualização define a camada de apresentação do aplicativo.

Embora o padrão MVC não seja específico para aplicativos da web, ele se encaixa muito bem neste tipo de aplicativo. Em um contexto Java, o Modelo consiste em classes Java simples, o Controller consiste em servlets e o View consiste em páginas JSP.

Aqui estão algumas características principais do padrão:

  • Separa a camada de apresentação da camada de negócios

  • O Controller executa a ação de chamar o Modelo e enviar dados para o View

  • O Modelo nem sabe que é usado por algum aplicativo da Web ou aplicativo de desktop

Vamos dar uma olhada em cada camada.

2.1. A Camada do Modelo

Essa é a camada de dados que contém a lógica de negócios do sistema e também representa o estado do aplicativo.

É independente da camada de apresentação, o controlador busca os dados da camada de modelo e os envia para a camada de visualização.

2.2. A camada do controlador

A camada do controlador atua como uma interface entre o View e o Model. Ele recebe solicitações da camada Visualizar e as processa, incluindo as validações necessárias.

Os pedidos são enviados ainda para a camada Modelo para processamento de dados e, uma vez processados, os dados são enviados de volta ao Controlador e exibidos na Visualização.

2.3. A Camada de Visualização

Essa camada representa a saída do aplicativo, geralmente alguma forma de interface do usuário. A camada de apresentação é usada para exibir os dados do modelo buscados pelo controlador.

3. MVC com Servlets e JSP

Para implementar um aplicativo da web baseado no padrão de design MVC, criaremos as classesStudenteStudentService - que atuarão como nossa camada de modelo.

A classe StudentServlet atuará como um Controlador e, para a camada de apresentação, criaremos a páginastudent-record.jsp.

Agora, vamos escrever essas camadas uma por uma e começar com a classeStudent:

public class Student {
    private int id;
    private String firstName;
    private String lastName;

    // constructors, getters and setters goes here
}

Vamos agora escrever nossoStudentService que processará nossa lógica de negócios:

public class StudentService {

    public Optional getStudent(int id) {
        switch (id) {
            case 1:
                return Optional.of(new Student(1, "John", "Doe"));
            case 2:
                return Optional.of(new Student(2, "Jane", "Goodall"));
            case 3:
                return Optional.of(new Student(3, "Max", "Born"));
            default:
                return Optional.empty();
        }
    }
}

Agora vamos criar nossa classe de controladorStudentServlet:

@WebServlet(
  name = "StudentServlet",
  urlPatterns = "/student-record")
public class StudentServlet extends HttpServlet {

    private StudentService studentService = new StudentService();

    private void processRequest(
      HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

        String studentID = request.getParameter("id");
        if (studentID != null) {
            int id = Integer.parseInt(studentID);
            studentService.getStudent(id)
              .ifPresent(s -> request.setAttribute("studentRecord", s));
        }

        RequestDispatcher dispatcher = request.getRequestDispatcher(
          "/WEB-INF/jsp/student-record.jsp");
        dispatcher.forward(request, response);
    }

    @Override
    protected void doGet(
      HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

        processRequest(request, response);
    }

    @Override
    protected void doPost(
      HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

        processRequest(request, response);
    }
}

Este servlet é o controlador de nosso aplicativo da web.

Primeiro, ele lê um parâmetroid da solicitação. Seid for enviado, um objetoStudent será obtido da camada de negócios.

Depois de recuperar os dados necessários do modelo, ele coloca esses dados na solicitação usando o métodosetAttribute().

Finalmente, o Controllerforwards os objetos de solicitação e resposta para um JSP, a visualização do aplicativo.

A seguir, vamos escrever nossa camada de apresentaçãostudent-record.jsp:


    
        Student Record
    
    
    <%
        if (request.getAttribute("studentRecord") != null) {
            Student student = (Student) request.getAttribute("studentRecord");
    %>

    

Student Record

ID: <%= student.getId()%>
First Name: <%= student.getFirstName()%>
Last Name: <%= student.getLastName()%>
<% } else { %>

No student record found.

<% } %>

E, é claro, o JSP é a visão do aplicativo; recebe todas as informações de que precisa do controlador, não precisa interagir diretamente com a camada de negócios.

4. Conclusão

Neste tutorial, aprendemos sobre o MVC, ou seja, Arquitetura do Model View Controller, e nos concentramos em como implementar um exemplo simples.

Como de costume, o código apresentado aqui pode ser encontradoover on GitHub.