目录
一,MVC 模式下实现 CRUD
1,任务概述
软件工程师小亮在编写企业门户网站时发现,由于项目体积越来越大,现 有代码错综复杂,不好梳理,虽然功能实现了,但是返回来看代码时乱七八糟, 现在迫切需要学习 MVC 和三层架构的思想来解决问题。
2,任务过程
1. 理解 mvc 概念
2. 创建包结构,并理解每一层的作用
3. 添加各层代码
4. 实现前后端的访问
3,编码过程
先简单回顾一下两个重要概念:MVC,三层架构,CRUD
MVC
- M(Model) 模型:应⽤程序的核⼼功能,管理这个模块中⽤的数据和值(bean,dao);
- V(View )视图:视图提供模型的展示,管理模型如何显示给⽤户,它是应⽤程序的外观;(jsp/html)
- C(Controller)控制器:对⽤户的输⼊做出反应,管理⽤户和视图的交互,是连接模型和视图的枢纽。(servlet/service)
三层架构
- 表现层(UI):通俗讲就是展现给⽤户的界⾯,即⽤户在使⽤⼀个系统的时候他的所⻅所得。jsp/html
- 业务逻辑层(BLL):针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。servlet,service
- 数据访问层(DAL):该层所做事务直接操作数据库,针对数据的增添、删除、修改、更新、查找等。dao
CRUD
- 增加(Create)
- 读取查询(Retrieve)
- 更新(Update)
- 删除(Delete)
3.1 数据库设计
沿用之前的用户表
3.2 项目结构
3.3 编码思路
完整项目在这里https://gitee.com/goodbyefirefly/java-course/tree/master/Chapter7/MVCTaskCard
使用一个jsp页面,三个form表单各自占一行分别表示添加Create,更新Update,查询Retrieve。
一个table组件展示用户信息,每行最右侧含有删除链接(a标签),点击即可删除该条数据。
index.jsp
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<form action="userServlet?method=create" method="post">
<div>
账户:<input type="text" name="username">
密码:<input type="text" name="password">
积分:<input type="text" name="score">
<input type="submit" value="添加">
</div>
</form>
<form action="userServlet?method=update" method="post">
<div>
账户:<input type="text" name="username">
新密码:<input type="text" name="password">
新积分:<input type="text" name="score">
<input type="submit" value="更新">
</div>
</form>
<form action="userServlet?method=retrieve" method="post">
<div>
账户:<input type="text" name="username">
<input type="submit" value="查询">
</div>
</form>
<table border="1px" width="300px" >
<tr>
<th>账户</th>
<th>密码</th>
<th>积分</th>
<th>操作</th>
</tr>
<c:forEach items="${list}" var="u">
<tr>
<td>${u.username}</td>
<td>${u.password}</td>
<td>${u.score}</td>
<td>
<a href="userServlet?method=delete&username=${u.username}">删除</a>
</td>
</tr>
</c:forEach>
</table>
</body>
</html>
使用一个servlet即可。用method参数区别不同的方法。servlet中识别出这些方法后,调用service中提供的服务。service中的服务是由dao中的一个个基本操作组成。
通过实时更新table中的列表,来展示操作是否成功。
UserServlet.jsp
package com.xrh.servlet;
import com.xrh.bean.User;
import com.xrh.service.UserService;
import com.xrh.service.impl.UserServiceImpl;
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;
import java.util.ArrayList;
@WebServlet("/userServlet")
public class UserServlet extends HttpServlet {
private UserService userService = new UserServiceImpl();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
String method = req.getParameter("method");
ArrayList<User> list = new ArrayList<>();
if(method.equals("create")) {
String username = req.getParameter("username");
String password = req.getParameter("password");
String score = req.getParameter("score");
userService.create(username, password, score);
list = userService.getAll();
} else if (method.equals("retrieve")) {
String username = req.getParameter("username");
User user = userService.retrieve(username);
list.add(user);
} else if (method.equals("update")) {
String username = req.getParameter("username");
String password = req.getParameter("password");
String score = req.getParameter("score");
userService.update(username, password, score);
list = userService.getAll();
} else if (method.equals("delete")) {
String username = req.getParameter("username");
userService.delete(username);
list = userService.getAll();
} else if (method.equals("getAll")) {
list = userService.getAll();
}
req.setAttribute("list", list);
req.getRequestDispatcher("index.jsp").forward(req, resp);
}
}
3.4 运行结果
3.5 注意
form表单的action中,如果想要通过地址传递参数的方式,需要设置method为POST,否则action中添加的参数不会被拼接到最后的链接地址中的
章节汇总在这里(づ ̄3 ̄)づ╭❤~@&再见萤火虫&【06-JavaWEB】
对学习Java感兴趣的同学欢迎加入QQ学习交流群:1126298731
有问题欢迎提问,大家一起在学习Java的路上打怪升级!(o゜▽゜)o☆[BINGO!]