Java Web

day14_8-MVC-WEB_CRUD

2020-04-10  本文已影响0人  建国同学

一、 MVC思想

MVC

M:Model:模型对象(封装业务操作,算法,可重复使用,JavaBean).DAO Domain
V:View:视图(界面,JSP,HTML)
C:Controler:控制器(控制界面跳转,Servlet)

    以Servlet为中心(所有请求都发送给Servlet):
    JSP + Servlet + JavaBean .

servlet/JSP/JavaBean的职责:
JSP:    界面输出.
Servlet:
    1:接受请求参数
    2:调用业务方法,处理请求
    3:控制界面跳转.
JavaBean:
      封装业务操作,可重复使用.

目的:

责任分离,把业务代码从视图中剥离出来.

二、 三层架构

含义

分层开发模式(技术层面的"分而治之")

通常意义上的三层架构就是将整个业务应用划分为:表现层、业务逻辑层、数据访问层。

三层架构

目的:

区分层次的目的即为了“高内聚低耦合”的思想

三、 WEB CRUD

1.目录结构

mybatis crud的基础上添加了以下内容


WEB CRUD目录结构

2.请求分发

在service方法中,想要去区分开到底是哪个请求,可以增加一个参数来区分

  • 通过地址栏的参数来进入不同的业务
//引入业务层
    private IEmployeeService empService = new EmployeeServiceImpl();

    // http://localhost/emp?cmd=list                做查询操作
    // http://localhost/emp?cmd=saveOrUpdate        做保存或修改
    // http://localhost/emp?cmd=delete              做删除操作
    // http://localhost/emp?cmd=edit                跳转到编辑页面

    // 请求分发
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        // 获取cmd的值 ,去判断是做什么操作
        String cmd = req.getParameter("cmd");
        if ("delete".equals(cmd)) {
            delete(req,resp);
        } else if ("edit".equals(cmd)) {
            edit(req,resp);
        } else if ("saveOrUpdate".equals(cmd)) {
            saveOrUpdate(req,resp);
        } else{
            list(req,resp);
        }
            
    }

    protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ....
    }
    protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ....
    }
    protected void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    ....        
    } 
    protected void saveOrUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        
    ....    
    }
    
    // 请求数据转化为employee对象
    private void req2emp(HttpServletRequest req,Employee emp){
        String name = req.getParameter("name");
        String strAge = req.getParameter("age");
        String strSalary = req.getParameter("salary");
        
        emp.setName(name);
        // 判断字符串是否为空
        if(StringUtil.hasLength(strAge)){
            emp.setAge(Integer.valueOf(strAge));
        }
        if(StringUtil.hasLength(strSalary)){
            emp.setSalary(new BigDecimal(strSalary));
        }
    }

3.查询商品

protected void list(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1.接受请求参数,封装成对象
        // 2.调用业务方法处理请求
        List<Employee> list = empService.listAll();
        // 设置共享参数
        req.setAttribute("list", list);
        // 3.控制页面的跳转
        req.getRequestDispatcher("/WEB-INF/view/employee/list.jsp").forward(req, resp);
    }

4.删除请求

protected void delete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 1接受id的值
        String strId = req.getParameter("id");
        // 判断id不为空,把字符串的id转化为Long类型
        if(StringUtil.hasLength(strId)){
            Long id = Long.valueOf(strId);
            // 2调用业务方法处理请求
            empService.delete(id);
        }
        // 3.重定向跳转到列表页
        resp.sendRedirect("/emp");
    }

5.编辑界面

使用getRequestDispatcher为可以共享参数

编辑界面
protected void edit(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 获取id的值
        String strId = req.getParameter("id");
        // 判读id是否有值,来辨别是    添加   or  编辑 操作
        if(StringUtil.hasLength(strId)){
            Employee employee = empService.get(Long.valueOf(strId));
            // 设置共享参数
            req.setAttribute("emp", employee);
        }
        // 页面的跳转,跳转到input.jsp
        req.getRequestDispatcher("/WEB-INF/view/employee/input.jsp").forward(req, resp);
    } 

6.保存添加 或 更新

protected void saveOrUpdate(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {        
        // 1.接受请求参数,封装成对象
        // 获取id的值
        String strId = req.getParameter("id");
        Employee emp = new Employee();
        req2emp(req, emp);
        // 2.调用业务方法处理请求
        if(StringUtil.hasLength(strId)){
            emp.setId(Long.valueOf(strId));
            empService.update(emp);
        }else{
            empService.save(emp);
        }
        // 3.控制跳转
        resp.sendRedirect("/emp");
    }
    
    // 请求数据转化为employee对象
    private void req2emp(HttpServletRequest req,Employee emp){
        String name = req.getParameter("name");
        String strAge = req.getParameter("age");
        String strSalary = req.getParameter("salary");
        
        emp.setName(name);
        // 判断字符串是否为空
        if(StringUtil.hasLength(strAge)){
            emp.setAge(Integer.valueOf(strAge));
        }
        if(StringUtil.hasLength(strSalary)){
            emp.setSalary(new BigDecimal(strSalary));
        }
    }

四、 WEB CRUD——user表

1.主要注意的地方

UserServlet需要添加请求,来获取user新增的传递参数hiredate,并判断是否为空

// 请求数据转化为user对象
    private void req2user(HttpServletRequest req,User user){
        String name = req.getParameter("name");
        String strAge = req.getParameter("age");
        String strSalary = req.getParameter("salary");
        String strHiredate = req.getParameter("hiredate");
        
        user.setName(name);
        // 判断字符串是否为空
        if(StringUtil.hasLength(strAge)){
            user.setAge(Integer.valueOf(strAge));
        }
        if(StringUtil.hasLength(strSalary)){
            user.setSalary(new BigDecimal(strSalary));
        }
        
        if(StringUtil.hasLength(strHiredate)){
            user.setHiredate(Date.valueOf(strHiredate));
        }
    }

表现层的jsp也要新增入职时间(hiredate)列,
添加标签库
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
以格式为中国的时间格式渲染到页面
<fmt:formatDate value="${user.hiredate}" pattern="yyyy-MM-dd"/>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>list用户列表</title>
</head>
<body>
    <%-- ${list}<br/> --%>
    <table border="1" cellpadding="0" cellspacing="0" width="80%" align="center" style="border-color: red;">
    <caption style="text-align:left">
            <a href="/user?cmd=edit" >添加</a>
    </caption>
        <tr>
            <th>序号</th>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>工资</th>
            <th>入职时间</th>
            <th>操作</th>
        </tr>
        <c:forEach items="${list}" var="user" varStatus="vs">
            <tr align="center">
                <td style="color: red;">${vs.count}</td>
                <td>${user.id}</td>
                <td>${user.name}</td>
                <td>${user.age}</td>
                <td>${user.salary}</td>
                <td>
                        <fmt:formatDate value="${user.hiredate}" pattern="yyyy-MM-dd"/>
                </td>
                <td>
                    <a href="/user?cmd=delete&id=${user.id}">删除 </a> 
                    <a href="/user?cmd=edit&id=${user.id}">编辑</a>
                </td>
            </tr>
        </c:forEach>
    </table>
</body>
</html>

同样要修改input.jsp 编辑保存页,格式化为yyyy-MM-dd的中国时间,这样date类型的input才能正确识别显示出用-分开的yyyy-MM-dd 格式时间字符串。

input.jsp编辑保存页入职时间渲染
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>input</title>
</head>
<body>
    <h3>${empty user ? '添加' : '编辑'}用户信息</h3>
    <form action="/user?cmd=saveOrUpdate" method="post">
        <input type="hidden" name="id" value="${user.id}">
        <p>姓名: <input type="text" name="name" value="${user.name}"> </p>
        <p>年龄: <input type="number" name="age" value="${user.age}"> </p>
        <p>薪资: <input type="number" step="0.01" name="salary" value="${user.salary}"> </p>
        <p>入职时间: 
            <input style="font-family:sans-serif;" type="date" name="hiredate" 
            value="<fmt:formatDate value="${user.hiredate}" pattern="yyyy-MM-dd"/>"> 
        </p>
        <input type="submit" value="${empty user ? '添加' : '修改'}">
    </form>
</body>
</html>
上一篇下一篇

猜你喜欢

热点阅读