8.4. MVC设计模式
2023/6/4 23:22:12
本文主要是介绍8.4. MVC设计模式,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MVC(Model-View-Controller,模型-视图-控制器)是一种设计模式,用于将应用程序的业务逻辑、数据和用户界面分离。在Java Web开发中,MVC设计模式有助于实现代码的模块化和可维护性。以下是MVC各组件的简要介绍:
- Model(模型):表示数据和业务逻辑。通常包括数据访问对象(DAO)和JavaBean(如实体类、POJO)。
- View(视图):表示用户界面。通常为JSP页面、HTML、CSS和JavaScript等。
- Controller(控制器):在模型和视图之间传递数据和指令。通常用Servlet实现。
8.4.1. 示例:使用MVC设计模式构建Java Web应用程序
以下是一个简单的Java Web应用程序示例,该应用程序使用MVC设计模式实现一个用户登录功能。
- 创建一个名为
LoginMVC
的Web应用程序目录结构:
LoginMVC/ |-- WEB-INF/ | |-- classes/ | | |-- controller/ | | | |-- LoginController.class | | |-- model/ | | | |-- UserDao.class | | | |-- User.class | |-- lib/ | |-- web.xml |-- login.jsp |-- welcome.jsp
- 编写
User
类(模型):
public class User { private String username; private String password; public User(String username, String password) { this.username = username; this.password = password; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
- 编写
UserDao
类(模型):
import java.util.HashMap; import java.util.Map; public class UserDao { private static final Map<String, String> userData = new HashMap<>(); static { userData.put("admin", "password"); userData.put("user", "1234"); } public User getUserByUsername(String username) { String password = userData.get(username); if (password != null) { return new User(username, password); } return null; } }
- 编写
LoginController
类(控制器):
import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @WebServlet(name = "LoginController", urlPatterns = "/login") public class LoginController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); UserDao userDao = new UserDao(); User user = userDao.getUserByUsername(username); if (user != null && password.equals(user.getPassword())) { request.setAttribute("user", user); request.getRequestDispatcher("welcome.jsp").forward(request, response); } else { request.setAttribute("errorMessage", "Invalid username or password"); request.getRequestDispatcher("login.jsp").forward(request, response); } } }
- 编写
login.jsp
文件(视图):
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Login</title> </head> <body> <h1>Login</h1> <form action="login" method="post"> <label for="username">Username:</label> <input type="text" id="username" name="username" required> <br> <label for="password">Password:</label> <input type="password" id="password" name="password" required> <br> <input type="submit" value="Login"> </form> <p style="color:red;"><%= request.getAttribute("errorMessage") %></p> </body> </html>
- 编写
welcome.jsp
文件(视图):
jsp
Copy
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Welcome</title> </head> <body> <h1>Welcome, <%= ((User) request.getAttribute("user")).getUsername() %>!</h1> </body> </html>
- 编写
web.xml
文件:
<?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_4_0.xsd" version="4.0"> <servlet> <servlet-name>LoginController</servlet-name> <servlet-class>controller.LoginController</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginController</servlet-name> <url-pattern>/login</url-pattern> </servlet-mapping> </web-app>
现在,当用户访问login.jsp
页面并输入用户名和密码时,表单将提交给LoginController
。控制器查询UserDao
以获取用户数据,并根据验证结果将用户重定向到welcome.jsp
页面或显示错误消息。
通过使用MVC设计模式,我们将应用程序的不同部分分离,使其更易于维护和扩展。
这篇关于8.4. MVC设计模式的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-09CMS内容管理系统是什么?如何选择适合你的平台?
- 2025-01-08CCPM如何缩短项目周期并降低风险?
- 2025-01-08Omnivore 替代品 Readeck 安装与使用教程
- 2025-01-07Cursor 收费太贵?3分钟教你接入超低价 DeepSeek-V3,代码质量逼近 Claude 3.5
- 2025-01-06PingCAP 连续两年入选 Gartner 云数据库管理系统魔力象限“荣誉提及”
- 2025-01-05Easysearch 可搜索快照功能,看这篇就够了
- 2025-01-04BOT+EPC模式在基础设施项目中的应用与优势
- 2025-01-03用LangChain构建会检索和搜索的智能聊天机器人指南
- 2025-01-03图像文字理解,OCR、大模型还是多模态模型?PalliGema2在QLoRA技术上的微调与应用
- 2025-01-03混合搜索:用LanceDB实现语义和关键词结合的搜索技术(应用于实际项目)