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设计模式实现一个用户登录性能。

  1. 创立一个名为LoginMVC的Web应用程序目录构造:
LoginMVC/|-- WEB-INF/|   |-- classes/|   |   |-- controller/|   |   |   |-- LoginController.class|   |   |-- model/|   |   |   |-- UserDao.class|   |   |   |-- User.class|   |-- lib/|   |-- web.xml|-- login.jsp|-- welcome.jsp
  1. 编写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;    }}
  1. 编写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;    }}
  1. 编写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);        }    }}
  1. 编写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>
  1. 编写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>
  1. 编写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设计模式,咱们将应用程序的不同局部拆散,使其更易于保护和扩大。
举荐浏览:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g