Spring MVC 示例
欢迎使用 Spring MVC 示例。在Spring MVC 教程中,我解释了如何使用 Spring Tool Suite 创建 Spring MVC 应用程序。但今天,我将使用 maven 和 Eclipse 创建一个基本的 hello world spring MVC 应用程序。
Spring MVC 示例
Spring MVC 基于模型-视图-控制器架构。下图从总体上展示了 Spring MVC 架构。是用于接收所有请求并开始处理它们的前端控制器类。我们必须在 web.xml 文件中对其进行配置。它的工作是将请求传递给适当的控制器类,并在视图页面呈现响应页面时将响应发回。将是我们的 spring mvc 示例应用程序中的单个控制器类。,是我们的 spring mvc hello world 示例应用程序中的视图页面。将是我们的 spring mvc 示例 web 应用程序中唯一的模型类。 DispatcherServlet
HomeController.java
home.jsp
user.jsp
User.java
Spring MVC 示例 Hello World Eclipse 项目
下图显示了 Eclipse 中的 Spring MVC 示例项目。让我们从头开始创建我们的项目。
Spring MVC 示例 Eclipse 项目设置
因为它是一个 Web 应用程序,而且我们想要使用 Maven 进行依赖项管理,所以首先我们必须创建一个动态 Web 应用程序,然后将其转换为 Maven 项目。下图显示了如何执行此操作并准备好项目骨架结构。右键单击项目资源管理器窗口,然后单击“新建 -> 动态 Web 项目”,如下图所示。在下一个弹出页面中输入名称“spring-mvc-example”,其余内容无需更改。在下一页上,将源文件夹输入为“src/main/java”。在添加此文件夹之前,您可能需要从列表中删除“src”文件夹。接下来是 Web 模块页面,将应用程序的上下文根目录输入为“spring-mvc-example”,并确保选中“生成 web.xml 部署描述符”选项。单击完成,您将在 eclipse 项目资源管理器中获得一个新的动态 Web 项目。
将动态 Web 项目转换为 Maven 项目
我们想使用 maven 来轻松管理我们的 spring mvc 依赖项。因此,让我们将我们的 Web 项目转换为 maven。右键单击项目并选择“配置 -> 转换为 Maven 项目”。接下来提供 pom.xml 配置,如下所示。我们的 maven Web 应用程序项目骨架代码已准备就绪。现在我们可以开始对其进行更改并创建我们的 spring mvc hello world 示例应用程序。
Spring MVC 依赖 pom.xml
我们需要在 pom.xml 中添加 spring-web 和 spring-webmvc 依赖项,还要添加 servlet-api、jsp-api 和 jstl 依赖项。我们最终的 pom.xml 文件将如下所示。
<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>
注意finalName
构建中的配置,这样我们的 WAR 文件名就没有版本详细信息了。当使用 Eclipse 构建项目时,您会注意到所有 jar 都显示在 maven 依赖项部分中。
Spring MVC DispatcherServlet 作为前端控制器
我们必须将 Spring MVC 框架添加到我们的 Web 应用程序中,为此我们需要DispatcherServlet
在 web.xml 中进行配置,如下所示。
<?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>
contextConfigLocation
init-param 用于提供 spring bean 配置文件的位置。
Spring MVC 示例 Bean 配置文件
下一步是创建 spring bean 配置文件spring-servlet.xml
,如下所示。
<?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>
有三个重要的配置。
annotation-driven
@Controller
告诉 DispatcherServlet 使用注释来查找 Controller 类。context:component-scan
告诉 DispatcherServlet 在哪里寻找控制器类。InternalResourceViewResolver
bean 配置指定视图页面的位置和使用的后缀。控制器类方法返回视图页面的名称,然后添加后缀以确定用于呈现响应的视图页面。
Spring MVC 控制器类
我们有一个单独的控制器类来响应两个 URI - “/” 表示主页,“/user” 表示用户页面。
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";
}
}
请注意,为了简单起见,我没有使用任何日志框架,例如log4j。
Spring MVC 模型类
我们有一个简单的模型类,它只有一个变量,并且有 getter-setter 方法。这是一个简单的 POJO 类。
package com.journaldev.spring.model;
public class User {
private String userName;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
}
Spring MVC 视图页面
我们有两个视图页面,定义如下。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>
请注意,Spring MVC 负责将表单变量映射到模型类变量,这就是为什么我们在两个地方使用相同的变量名。就这样,我们的 spring mvc 示例项目已准备好部署和测试。
Spring MVC Eclipse 项目部署
我们可以使用 Eclipse 导出为 WAR 文件选项将其直接部署到任何正在运行的 tomcat 服务器 webapps 目录。但是,您也可以使用命令行构建项目,然后将其复制到您最喜欢的 servlet 容器部署目录中。
Spring MVC 示例测试
一旦部署了 spring mvc 项目,我们就可以访问主页https://localhost:8080/spring-mvc-example/
。相应地更改 tomcat 端口和 context-root。这就是 Spring MVC 示例的全部内容,我已尝试使其尽可能简单。但是如果您仍然遇到任何问题,请通过评论告诉我,我会尽力帮助您。您可以从以下链接下载最终的 spring mvc 示例项目。
下载 Spring MVC 示例项目
参考:官方页面