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 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
文件(视图):
Login
Login
- 编写
welcome.jsp
文件(视图):
jsp
Copy
Welcome
Welcome, !
- 编写
web.xml
文件:
LoginController
controller.LoginController
LoginController
/login
现在,当用户访问login.jsp
页面并输入用户名和密码时,表单将提交给LoginController
。控制器查询UserDao
以获取用户数据,并根据验证结果将用户重定向到welcome.jsp
页面或显示错误消息。
通过使用MVC设计模式,我们将应用程序的不同部分分离,使其更易于维护和扩展。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
本次主要是补充一下智能指针章节的遗漏部分——weak_ptr指针 weak_ptr是C++11中引入的一种智能指针,它的作用就是配合shared_ptr对资源进行管理。由于weak_ptr设计的作用就是配合shared_ptr,因此其是一种“弱引…