在开始介绍 Spring Web MVC 的快速入门之前,首先需要了解 Spring Framework 和 MVC(Model-View-Controller)模式的基本概念。
Spring Framework 簡介
Spring Framework 是 Java 企業應用程式的開源框架,它提供了依賴注入(Dependency Injection, DI)、AOP(Aspect Oriented Programming)、MVC 等特性來幫助開發者更有效地建構可維護且易於測試的程式碼。Spring Framework 已經被廣泛用於各種不同類型的項目中,並且被許多大型公司採用。
MVC 模式簡介
MVC 是一種軟件架構設計模式,它將一個應用的邏輯層分成三個核心部分:模型 (Model)、視圖 (View) 和控制器 (Controller)。這種分離有助於提高系統的可維護性、重用性和靈活性。
Spring Web MVC 簡介
Spring Web MVC 是基於 Spring Framework 的一個模塊,專門用於建立網頁應用。它的優勢包括:
1. 非侵入式設計 – 控制器可以與業務邏輯分離,這意味著我們可以在不修改既有類別的情況下使用 Spring Web MVC。
2. 支持多樣化的視圖技術 – Spring Web MVC 支持不同的模板引擎,如 JSP、Thymeleaf 等。
3. 內置的驗證和支持國際化 – Spring Web MVC 提供了一套強大的驗證功能,並且支持本地化設定。
4. 良好的錯誤處理 – Spring Web MVC 有內建的錯誤處理機制,可以讓使用者更容易地處理並顯示錯誤訊息。
5. 方便的配置和管理 – Spring XML 配置或注解方式使得應用配置和管理變得非常簡單。
Spring Web MVC 快速入門
以下是一個基本的 Spring Web MVC 应用的例子,它展示了如何創建一個簡單的「Hello World」Web 應用。這個例子使用了 Annotation 形式的配置方式,因此你必須確保你的環境已經準備好使用 annotation-based configuration(通常需要至少 Spring 版本為 3.0)。
Step 1: 创建项目结构
首先,你需要在你的 IDE 中创建一个新项目。这个项目中应该包含以下几个基本模块:
- `src/main/java` – 存放所有的 Java 类文件。
- `src/main/resources` – 放置 application context 配置文件和其他资源文件。
- `src/test/java` – 用于测试的相关代码。
Step 2: 添加依赖
确保你的项目的构建工具(例如 Maven 或者 Gradle)已经包含了 spring-webmvc 的相关依赖。如果你在使用 Maven,那么你可能需要在 pom.xml 文件中添加如下依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
Step 3: 配置 DispatcherServlet
在 `src/main/webapp/WEB-INF` 目录下创建一个新的 `web.xml` 文件,并添加以下内容来配置 `DispatcherServlet`:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<!-- 配置DispatcherServlet-->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/dispatcher-config.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
注意:如果你的应用是基于 Servlet 3.0 以上版本的,你可以通过 `@Configuration` 和 `@EnableWebMvc` 注解来替换掉 `dispatcher-config.xml` 文件。
Step 4: 编写 Controller
接下来,我们需要创建一个简单的控制器类,它会处理 HTTP GET 请求并将响应发送给客户端。创建一个名为 `GreetingController.java` 的文件并在其中添加以下内容:
package com.example;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Date;
/**
* @author Your Name Here
*/
@Controller // 標記此類作為Spring IoC容器中的控制項
public class GreetingController {
// 當訪問 /greeting 時會觸發此方法
@RequestMapping(value = "/greeting", method = RequestMethod.GET)
public String greeting(@RequestParam(value = "name", required = false) String name, ModelMap model) {
model.addAttribute("message", "Hello, " + (name == null ? "World!" : name));
return "hello";
}
}
在这个例子中,我们使用了一个名为 `@Controller` 的注解来标记我们的类为控制器类。我们还使用 `@RequestMapping` 注解来指定控制器将处理哪些HTTP请求。当用户访问 `/greeting` URL时,Spring会调用`greeting()`方法并将`name`参数作为查询字符串传递过来。
Step 5: 创建 View Resolver
为了使视图工作,我们需要告诉 Spring 如何解析视图名称到实际的JSP页面。我们可以使用 InternalResourceViewResolver bean 来实现这一点。在 `applicationContext.xml` 文件中添加以下内容:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- 使用InternalResourceViewResolver來解析視圖名稱到實際的JSP頁面 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver" p:prefix="/WEB-INF/jsp/" p:suffix=".jsp" />
<!-- 啟用自動註冊控制器(使用@Controller和@RequestMapping注釋的類) -->
<context:component-scan base-package="com.example" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 其他配置省略 -->
</beans>
这里的 `InternalResourceViewResolver` 配置了前缀 (`/WEB-INF/jsp/`) 和后缀 (`.jsp`),它们会被用来构造实际要加载的JSP页面的路径。
Step 6: 创建 View
最后,我们需要创建实际的JSP页面来显示我们的“Hello, World!”消息。在 `src/main/webapp/WEB-INF/jsp` 目录下新建一个名为 `hello.jsp` 的文件,并添加以下内容:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Spring Web MVC Hello Example</title>
</head>
<body>
<h2>Welcome to the Spring Web MVC Quick Start</h2>
<p>Message from controller: ${message}</p>
</body>
</html>
现在,你已经有了一个完整的 Spring Web MVC 应用程序的基础架构。当你运行这个应用并通过浏览器访问 `http://localhost:8080/yourAppName/greeting` 时,你应该能看到类似这样的输出:
Message from controller: Hello, World!
恭喜你!你已经成功地搭建起了第一个基于 Spring Web MVC 的 web 应用。随着你对 Spring Web MVC 理解的加深,你可以继续扩展和完善这个基础的应用程序。