天天看点

任务卡_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 数据库设计

沿用之前的用户表

任务卡_06-JavaWEB_MVC

3.2 项目结构

任务卡_06-JavaWEB_MVC

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 运行结果

任务卡_06-JavaWEB_MVC
任务卡_06-JavaWEB_MVC
任务卡_06-JavaWEB_MVC

 3.5 注意

form表单的action中,如果想要通过地址传递参数的方式,需要设置method为POST,否则action中添加的参数不会被拼接到最后的链接地址中的

任务卡_06-JavaWEB_MVC