在现代Web开发中,SpringMVC作为一款轻量级的框架,赢得了广泛的应用。它使得构建基于MVC(模型-视图-控制器)架构的Java Web应用变得十分简便。本文将通过一个简易的对话留言板项目来展示SpringMVC的使用方法,留言板的数据将存储在内存中,方便快速演示。
项目结构
项目结构如下:
SimpleMessageBoard
│
├── src
│ └── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ ├── controller
│ │ │ └── MessageController.java
│ │ ├── model
│ │ │ └── Message.java
│ │ └── service
│ │ └── MessageService.java
│ └── resources
│ └── application.properties
└── webapp
└── WEB-INF
├── views
│ └── index.jsp
└── web.xml
1. Maven依赖
在pom.xml
中添加Spring MVC依赖:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.13</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
2. 模型类
Message.java
为留言实体类,包含留言者、内容和时间戳等属性:
package com.example.model;
import java.time.LocalDateTime;
public class Message {
private String name;
private String content;
private LocalDateTime timestamp;
public Message(String name, String content) {
this.name = name;
this.content = content;
this.timestamp = LocalDateTime.now();
}
// Getter 和 Setter 方法
public String getName() {
return name;
}
public String getContent() {
return content;
}
public LocalDateTime getTimestamp() {
return timestamp;
}
}
3. 服务类
MessageService.java
负责存储和管理留言,可使用List
来保存数据:
package com.example.service;
import com.example.model.Message;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class MessageService {
private List<Message> messages = new ArrayList<>();
public void addMessage(Message message) {
messages.add(message);
}
public List<Message> getMessages() {
return messages;
}
}
4. 控制器类
MessageController.java
处理前端请求,使用Spring注入服务类:
package com.example.controller;
import com.example.model.Message;
import com.example.service.MessageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MessageController {
@Autowired
private MessageService messageService;
@GetMapping("/")
public String viewMessages(Model model) {
model.addAttribute("messages", messageService.getMessages());
model.addAttribute("newMessage", new Message("", ""));
return "index";
}
@PostMapping("/addMessage")
public String addMessage(@ModelAttribute("newMessage") Message message) {
if (message.getName() != null && !message.getName().isEmpty() &&
message.getContent() != null && !message.getContent().isEmpty()) {
messageService.addMessage(message);
}
return "redirect:/";
}
}
5. JSP视图
index.jsp
为前端页面,用于展示留言和提交新留言:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<title>留言板</title>
</head>
<body>
<h1>留言板</h1>
<form method="post" action="addMessage">
姓名: <input type="text" name="name"/><br/>
留言: <textarea name="content"></textarea><br/>
<input type="submit" value="提交"/>
</form>
<h2>留言内容</h2>
<ul>
<c:forEach var="message" items="${messages}">
<li><strong>${message.name}:</strong> ${message.content} <small>(${message.timestamp})</small></li>
</c:forEach>
</ul>
</body>
</html>
6. 配置文件
web.xml
配置Spring MVC的DispatcherServlet:
<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">
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
在application.properties
配置文件中,我们可以设置Spring的一些基本属性,例如视图解析器的前后缀等。
总结
通过以上步骤,我们构建了一个简易的对话留言板,演示了如何使用SpringMVC框架进行Web开发。留言板能够允许用户提交姓名和留言内容,并实时显示所有留言。这个项目虽然简单,但却能够帮助开发者快速上手Spring MVC,并理解其基本工作原理。针对生产环境,我们可能还需要使用数据库持久化留言数据以及增加一些安全性和异常处理的逻辑。