Bem-vindo ao Exemplo Spring MVC. Algum tempo atrás no Tutorial Spring MVC, eu expliquei como criar uma aplicação Spring MVC usando o Spring Tool Suite. Mas hoje, vou criar uma aplicação básica de hello world Spring MVC usando o Maven e o Eclipse.
Exemplo Spring MVC
O Spring MVC é baseado na arquitetura Model-View-Controller. A imagem abaixo mostra a arquitetura Spring MVC em um nível alto.
DispatcherServlet
é a classe controladora frontal responsável por receber todas as requisições e iniciar o processamento delas. Temos que configurá-lo no arquivo web.xml. Sua função é encaminhar a requisição para a classe controladora apropriada e enviar a resposta de volta quando as páginas de visualização tiverem renderizado a página de resposta. HomeController.java
será a única classe controladora em nossa aplicação de exemplo Spring MVC. home.jsp
, user.jsp
são as páginas de visualização em nossa aplicação de exemplo de hello world Spring MVC. User.java
será a única classe de modelo que teremos em nossa aplicação web de exemplo Spring MVC.
Exemplo de Projeto Hello World Spring MVC no Eclipse
A imagem abaixo mostra nosso projeto de exemplo Spring MVC no Eclipse. Vamos começar e criar nosso projeto do zero.
Configuração do Projeto Spring MVC no Eclipse
Uma vez que se trata de uma aplicação web e queremos usar o Maven para gerenciamento de dependências, primeiro temos que criar uma aplicação web dinâmica e depois convertê-la em um projeto Maven. Abaixo estão imagens que mostram como fazer isso e obter a estrutura básica do nosso projeto pronta. Clique com o botão direito do mouse na janela do explorador de projetos e clique em “Novo -> Projeto Web Dinâmico”, como mostrado na imagem abaixo. Forneça o nome como “spring-mvc-example” na próxima página de pop-up, o restante das coisas não precisa ser alterado.
Na próxima página, forneça a pasta de origem como “src/main/java”. Você pode ter que remover a pasta “src” da lista antes de adicionar esta.
Em seguida, vem a página do módulo da web, forneça o contexto raiz da aplicação como “spring-mvc-example” e certifique-se de marcar a opção “Gerar descritor de implantação web.xml”.
Clique em Concluir e você terá um novo Projeto Web Dinâmico no explorador de projetos do eclipse.
Convertendo Projeto Web Dinâmico para Projeto Maven
Queremos usar o Maven para gerenciar facilmente nossas dependências do Spring MVC. Então, vamos converter nosso projeto web para o Maven. Clique com o botão direito no projeto e selecione “Configurar -> Converter para Projeto Maven”. Em seguida, forneça as configurações do pom.xml conforme mostrado abaixo.
O esqueleto do código do nosso projeto de aplicativo web Maven está pronto. Agora podemos começar a fazer alterações nele e criar nosso exemplo de aplicativo “Hello World” do Spring MVC.
Dependências do Spring MVC para o pom.xml
Precisamos adicionar as dependências spring-web e spring-webmvc no pom.xml, também adicionar as dependências servlet-api, jsp-api e jstl. Nosso arquivo pom.xml final será semelhante ao abaixo.
<project xmlns="https://maven.apache.org/POM/4.0.0" xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.journaldev.spring.mvc</groupId>
<artifactId>spring-mvc-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>Spring MVC Example</name>
<description>Spring MVC Hello World Example</description>
<!-- Add Spring Web and MVC dependencies -->
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>4.3.9.RELEASE</version>
</dependency>
<!-- Servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName> <!-- added to remove Version from WAR file -->
</build>
</project>
Observe a configuração de finalName
no build, para que o nome do nosso arquivo WAR não contenha detalhes de versão. Quando o projeto é construído pelo Eclipse, você notará que todos os JARs aparecem na seção de dependências do Maven.
O DispatcherServlet do Spring MVC como Controlador Frontal
Precisamos adicionar o framework Spring MVC à nossa aplicação web. Para isso, precisamos configurar o DispatcherServlet
no arquivo web.xml, conforme mostrado abaixo.
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns="https://java.sun.com/xml/ns/javaee" xsi:schemaLocation="https://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>spring-mvc-example</display-name>
<!-- Add Spring MVC DispatcherServlet as front controller -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
O parâmetro de inicialização contextConfigLocation
é usado para fornecer a localização do arquivo de configuração de beans do Spring.
Exemplo de Arquivo de Configuração de Beans do Spring MVC
O próximo passo é criar o arquivo de configuração de beans do Spring spring-servlet.xml
, como mostrado abaixo.
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="https://www.springframework.org/schema/mvc"
xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance" xmlns:beans="https://www.springframework.org/schema/beans"
xmlns:context="https://www.springframework.org/schema/context"
xsi:schemaLocation="https://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
https://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
https://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing
infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<context:component-scan base-package="com.journaldev.spring" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources
in the /WEB-INF/views directory -->
<beans:bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
</beans:beans>
Há três configurações importantes.
annotation-driven
instrui o DispatcherServlet a procurar classes de controlador usando a anotação@Controller
annotation.context:component-scan
indica ao DispatcherServlet onde procurar classes de controlador.InternalResourceViewResolver
` configuração do bean para especificar a localização das páginas de visualização e o sufixo utilizado. Os métodos da classe do controlador retornam o nome da página de visualização e, em seguida, o sufixo é adicionado para determinar a página de visualização a ser usada para renderizar a resposta.
Classe do Controlador do Spring MVC
Temos uma única classe de controlador para responder a dois URIs – “/” para a página inicial e “/user” para a página do usuário.
package com.journaldev.spring.controller;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import com.journaldev.spring.model.User;
@Controller
public class HomeController {
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
System.out.println("Home Page Requested, locale = " + locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate);
return "home";
}
@RequestMapping(value = "/user", method = RequestMethod.POST)
public String user(@Validated User user, Model model) {
System.out.println("User Page Requested");
model.addAttribute("userName", user.getUserName());
return "user";
}
}
Observe que, para simplicidade, não utilizei nenhum framework de registro, como log4j.
Classe do Modelo do Spring MVC
Temos uma classe de modelo simples com uma única variável e seus métodos getter-setter. É uma classe POJO simples.
package com.journaldev.spring.model;
public class User {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
Páginas de Visualização do Spring MVC
Temos duas páginas de visualização definidas da seguinte forma. home.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="https://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Hello world!</h1>
<P>The time on the server is ${serverTime}.</p>
<form action="user" method="post">
<input type="text" name="userName"><br> <input
type="submit" value="Login">
</form>
</body>
</html>
user.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>User Home Page</title>
</head>
<body>
<h3>Hi ${userName}</h3>
</body>
</html>
Repare que o Spring MVC cuida do mapeamento das variáveis do formulário para as variáveis da classe do modelo, por isso temos o mesmo nome de variável em ambos os lugares. É isso, nosso projeto de exemplo do spring mvc está pronto para ser implantado e testado.
Implantação do Projeto Eclipse Spring MVC
Podemos usar a opção de exportação do Eclipse como arquivo WAR para implantá-lo diretamente no diretório webapps de qualquer servidor tomcat em execução. No entanto, você também pode usar a linha de comando para construir o projeto e depois copiá-lo para o diretório de implantação do seu contêiner de servlet favorito.
Teste de Exemplo do Spring MVC
Uma vez que o projeto spring mvc é implantado, podemos acessar a página inicial em https://localhost:8080/spring-mvc-example/
. Altere a porta e o contexto do tomcat conforme necessário.
Isso é tudo para o exemplo do Spring MVC, tentei mantê-lo o mais simples possível. Mas ainda assim, se você enfrentar algum problema, por favor, me avise através de comentários e tentarei ajudá-lo. Você pode baixar o projeto final do exemplo do Spring MVC no link abaixo.
Baixar Projeto de Exemplo do Spring MVC
Referências: Página Oficial
Source:
https://www.digitalocean.com/community/tutorials/spring-mvc-example