任务卡_06-JavaWEB_MVC

目录

一,MVC 模式下实现 CRUD

1,任务概述

2,任务过程

3,编码过程

3.1 数据库设计

3.2 项目结构

3.3 编码思路

3.4 运行结果

 3.5 注意


一,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!]

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值