Java网络开发(Tomcat同步数据增删改查)—— 用Jsp语法实现同步请求的 增删改查

目录

  • 引出
  • 显示所有数据到前端
    • (1)前端代码:list.jsp
    • (2)后端代码:CompanyListServlet.java
  • 新增数据---转发类型信息---新增信息业务
    • (1)在list.jsp页面点击添加
    • (2)由servlet处理,查询类型信息共享到addPage.jsp页面
    • (3)addPage.jsp添加信息页面的代码
    • (4)填完信息,点击添加,表单发送给AddServlet.java中的servlet进行处理;添加成功,再回到list.jsp页面,显示所有信息;
  • 修改数据---修改数据需要知道修改的id---隐藏框实现
    • (1)在list.jsp页面点击修改按钮,
    • (2)由UpdatePageServlet.java进行处理;根据id查询出要修改的数据,并且查询出所有类型信息,共享转发到update.jsp修改页面;
    • (3)在update.jsp页面,用户进行修改操作,点击提交后,表单信息交给UpdateServlet.java进行修改数据的处理;并且要设置一个隐藏框,用户传给后端要修改数据的id号
    • (4)在UpdateServlet.java中执行数据修改操作;修改成功,再回到list.jsp页面:
  • 删除数据---需要知道要删除的id
    • (1)在list.jsp页面,点击删除
    • (2)由CompanyRemove.servlet进行删除数据处理,删除成功再回到list.jsp页面;
  • 权限控制---只能操作自己的数据
  • 总结

引出

在jsp的同步请求下如何实现数据的增删查改;
如何控制只能操作自己的数据;


显示所有数据到前端

在这里插入图片描述

(1)前端代码:list.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>
</head>
<body>

<%--${pageInfo}--%>
<br>
<%--    输入查询的条件--%>
<div style="align-content: center">
    <form action="/day06/company/messList">
<%--        隐藏框--%>
        <input type="hidden" name="pageSize" value="${pageInfo.pageSize}">
        <input type="hidden" name="pageNum" value="${pageInfo.pageNum}">

        公司名:<input type="text" placeholder="输入要模糊查询的公司名" name="name" value="${name}">
        <input type="submit" value="搜索"><br>
    </form>
</div>

<div style="color: blueviolet" >
    <form action="/day06/company/messList">
<%--        隐藏框--%>
        <input type="hidden" name="name" value="${name}">
        <input type="hidden" name="pageNum" value="${pageInfo.pageNum}">

        每页显示条数:<input type="text" name="pageSize" value="${pageInfo.pageSize}">
        <input type="submit" value="提交"><br>
    </form>
</div>


<table border="1px">
    <tr>
        <th>公司id</th>
        <th>公司名</th>
        <th>公司类型</th>
        <th>合伙人</th>
        <th>统一信用编码</th>
        <th>公司地址</th>
        <th>成立时间</th>
        <th>用户名</th>
        <th>修改时间</th>
        <th>执行操作
<%--            <a href="/day06/compMess/addCompMess.jsp">添加</a>--%>
<%--            执行添加先给 AddCompServlet 进行处理;
                获得公司类型的表格;
                转发给addCompMess.jsp页面--%>
            <a href="/day06/compMess/addPage">添加</a>

        </th>
    </tr>

    <c:forEach var="comp" items="${pageInfo.compList}">
        <tr>
            <td>${comp.id}</td>
            <td>${comp.name}</td>
            <td>${comp.typename}</td>
            <td>${comp.corporation}</td>
            <td>${comp.creditCode}</td>
            <td>${comp.address}</td>
            <td>${comp.createTime}</td>
            <td>${comp.username}</td>
            <td>${comp.updateTime}</td>
            <td><a href="/day06/company/remove?id=${comp.id}"><button>删除</button></a>
            <a href="/day06/company/updatePage?id=${comp.id}"><button>修改</button></a></td>
        </tr>
    </c:forEach>

</table><br>
<hr>
<%--     分页查询相关--%>
<%--     如果当前页是第一页,需要控制首页不显示,上一页不显示--%>
<%--     把搜索的名字,每页显示条数也发给servlet--%>
<c:if test="${pageInfo.pageNum!=1}">
    <a href="/day06/company/messList?pageNum=1&name=${name}&pageSize=${pageInfo.pageSize}">首页</a>
    <a href="/day06/company/messList?pageNum=${pageInfo.pageNum-1}&name=${name}&pageSize=${pageInfo.pageSize}">上一页</a>
</c:if>

<%--     如果当前页是尾页,需要控制下一页和尾页不显示 --%>
<c:if test="${pageInfo.pageNum!=pageInfo.pages}">
    <a href="/day06/company/messList?pageNum=${pageInfo.pageNum+1}&name=${name}&pageSize=${pageInfo.pageSize}">下一页</a>
    <a href="/day06/company/messList?pageNum=${pageInfo.pages}&name=${name}&pageSize=${pageInfo.pageSize}">尾页</a>
</c:if>

<%--    提示信息,总页数为,当前第几页--%>
总计${pageInfo.pages}/当前${pageInfo.pageNum}

<form action="/day06/company/messList" method="get">
<%--    隐藏框,把每页显示条数,和要模糊查询的公司名再共享回去--%>
    <input type="hidden" name="name" value="${name}">
    <input type="hidden" name="pageSize" value="${pageInfo.pageSize}">
    跳转到:<input type="text" name="pageNum" value="${pageInfo.pageNum}">
    <input type="submit" value="提交">
</form>
</body>
</html>

(2)后端代码:CompanyListServlet.java

package com.tianju.servlet.company;

import com.tianju.entity.Company;
import com.tianju.entity.PageInfo;
import com.tianju.service.ICompanyService;
import com.tianju.service.impl.CompanyService;
import com.tianju.util.StringUtils;

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.List;

/**
 * 进行公司信息列表展示的servlet类
 */
@WebServlet("/company/messList")
public class CompanyListServlet extends HttpServlet {
    private ICompanyService companyService = new CompanyService();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        // 设置编码
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        // 1.0版本,显示所有的信息
//        // 进行查询
//        List<Company> list = companyService.queryAll();
//        System.out.println(list);
//
//        // 共享值
//        req.setAttribute("compMessList", list);
//
//        // 请求转发
//        req.getRequestDispatcher("/compMess/list.jsp").forward(req, resp);

        // 2.0版本,支持模糊查询和分页展示信息
        // 1.从前端获取数据:要显示第几页,每页显示多少条数据,查询的关键词是啥
        String pageNumStr = req.getParameter("pageNum"); // 第几页
        String pageSizeStr = req.getParameter("pageSize"); // 每页显示数据条数
        String name = req.getParameter("name");

        // 2.进行赋值,
        // 如果没有输入第几页,默认显示首页,第一页;
        Integer pageNum = StringUtils.isBlank(pageNumStr) ? 1:Integer.parseInt(pageNumStr);
        // 如果没有输入显示多少条数据,默认每页显示3条;
        Integer pageSize = StringUtils.isBlank(pageSizeStr) ? 3:Integer.parseInt(pageSizeStr);
        // 如果没有输入查询关键词,数据条数为总数;
        Integer total = companyService.countLines(name);


        // 3.根据查询数据条数,以及前端获取的每页显示数据条数,计算总页数;
        // 思路:如果能整除,则为页数;如果不能整除,则/后再加1;
        Integer pages = total % pageSize==0 ? total/pageSize:total/pageSize+1;

        // 4.new PageInfo对象,共享页数等,以及查询到的数据
        List<Company> list = companyService.queryByLikeNameLimit(pageNum, pageSize,name);
        PageInfo<Company> pageInfo = new PageInfo<>(pageNum, pageSize, total, pages, list);

        // 5.共享pageInfo到前端,查询条件到前端
        req.setAttribute("pageInfo",pageInfo);
        req.setAttribute("name", name);

        // 6.转发到前端进行显示
        req.getRequestDispatcher("/compMess/list.jsp").forward(req, resp);

    }
}

新增数据—转发类型信息—新增信息业务

背景:如果新增一条图书信息,表格中记录的是图书的id,如果要知道具体的类型需要查另一张表;而前端显示时,需要以下拉框的形式进行选择。在新增成功后,再跳转回到显示所有信息的页面。

在这里插入图片描述

新增信息的业务逻辑:

(1)进入新增的页面,此时需要有类型信息以下拉框的方式在前端;

(2)用户在前端进行操作,需要把信息写全,不全要有提示;

(3)执行新增操作,将数据存入到数据库中;

(4)新增到数据成功,再跳转回到所有数据的页面

(1)在list.jsp页面点击添加

 <a href="/day06/compMess/addPage">添加</a>

(2)由servlet处理,查询类型信息共享到addPage.jsp页面

AddCompServlet.java文件,目的是给addPage.jsp共享类型信息:

package com.tianju.servlet.company;

import com.tianju.dao.IComTypeDao;
import com.tianju.entity.ComType;
import com.tianju.service.IComTypeService;
import com.tianju.service.impl.ComTypeServiceImpl;

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.nio.channels.NonWritableChannelException;
import java.util.List;

/**
 * 添加公司信息的servlet
 * 目的是把公司类型信息给addCompMess.jsp页面
 */
@WebServlet("/compMess/addPage")
public class AddCompServlet extends HttpServlet {
    private IComTypeService typeService = new ComTypeServiceImpl();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解决编码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        // 需要给addCompMess.jsp页面公司类型信息
        // 1.查询所有的类型;
        List<ComType> types = typeService.queryAll();
        System.out.println(types);

        // 2.值共享;
        req.setAttribute("types", types);

        // 3.进行转发;
        req.getRequestDispatcher("/compMess/addCompMess.jsp").forward(req,resp);
    }
}

(3)addPage.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>
</head>
<body>
<h1>新增公司信息</h1>
<%--${types}--%>
<form action="/day06/compMess/add" method="get">
    公司名:<input type="text" name="name"><br>
    合伙人:<input type="text" name="corporation"><br>
    公司类型:
    <select name="typeId">
        <option value="">请选择</option>
<%--        这部分拼出来--%>
<%--        <option value="1">有限责任公司</option>--%>
        <c:forEach items="${types}" var="type">
            <option value="${type.id}">${type.name}</option>
        </c:forEach>

    </select>
    <br>
    统一信用编码:
    <input type="text" name="creditCode"><br>
    公司成立时间:
    <input type="date" name="createTime"><br>
    公司地址:<input type="text" name="address"><br>

    <span style="color: darkred">${msg}</span><br>

    <input type="submit" value="提交">
    <input type="reset" value="重置"><br>
    <hr>
    <a href="/day06/company/messList">返回</a>
</form>

</body>
</html>

(4)填完信息,点击添加,表单发送给AddServlet.java中的servlet进行处理;添加成功,再回到list.jsp页面,显示所有信息;

package com.tianju.servlet.company;

import com.tianju.entity.Company;
import com.tianju.service.IComTypeService;
import com.tianju.service.ICompanyService;
import com.tianju.service.impl.ComTypeServiceImpl;
import com.tianju.service.impl.CompanyService;
import com.tianju.util.StringUtils;

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.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * 新增公司信息的业务逻辑
 * 目的是:接收从addCompMess.jsp传过来的信息;
 * new Company 并存到数据库
 */
@WebServlet("/compMess/add")
public class AddServlet extends HttpServlet {
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    private ICompanyService companyService = new CompanyService();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解决编码问题;
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        // 新增一条数据到数据库
        // 1.读取前端的值;
        String name = req.getParameter("name");
        String corporation = req.getParameter("corporation");
        String typeId = req.getParameter("typeId");
        String creditCode = req.getParameter("creditCode");
        String createTime = req.getParameter("createTime");
        String address = req.getParameter("address");

        System.out.println(createTime);

        // 2.判断是否为空;
        if (StringUtils.isBlank(name)
        || StringUtils.isBlank(corporation)
        || StringUtils.isBlank(typeId)
        || StringUtils.isBlank(creditCode)
        || StringUtils.isBlank(createTime)
        || StringUtils.isBlank(address)){
            // 共享一条msg给前端,提醒一下
            req.setAttribute("msg", "输入为空,请输全公司信息");
            req.getRequestDispatcher("/compMess/addPage").forward(req,resp);
            return;
        }

        // 3.new company实体类;
        Company company = new Company();
        company.setAddress(address);
        company.setName(name);
        company.setCorporation(corporation);
        company.setTypeId(Integer.parseInt(typeId));
        company.setCreditCode(creditCode);
        try {
            company.setCreateTime(sdf.parse(createTime));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        // TODO:记录是谁操作的这条信息
        company.setUserId(1);


        // 4.新增数据到数据库;
        Integer addFlag = companyService.add(company);
        if (addFlag<1){
            // 共享一条msg给前端,提醒一下
            req.setAttribute("msg", "系统繁忙,请稍后重试");
            req.getRequestDispatcher("/compMess/addCompMess.jsp");
            return;
        }

        // 5.重定向到list页面,显示更新后的公司信息
        resp.sendRedirect(req.getContextPath()+"/company/messList");

    }
}

修改数据—修改数据需要知道修改的id—隐藏框实现

背景:用户点击修改某一条信息,进入修改页面,需要把原有的信息展示给用户;在页面跳转的过程中,要记录要修改的id,如果修改页面有下拉框,如何实现原有下拉框显示的功能。
在这里插入图片描述

修改信息的业务逻辑:

(1)用户点击要修改的信息,进入修改页面;

(2)把原有的信息在前端进行展示,下拉框等;

(3)【记录要修改的id】需要记录好要修改的id;

(4)用户进行修改,把修改的信息和id传给后端;

(5)把修改数据更新到数据库中;

(6)修改成功后,再跳转回到所有数据的页面;

(1)在list.jsp页面点击修改按钮,

<a href="/day06/company/updatePage?id=${comp.id}"><button>修改</button></a>

(2)由UpdatePageServlet.java进行处理;根据id查询出要修改的数据,并且查询出所有类型信息,共享转发到update.jsp修改页面;

package com.tianju.servlet.company;

import com.sun.org.apache.bcel.internal.generic.NEW;
import com.tianju.entity.Company;
import com.tianju.service.IComTypeService;
import com.tianju.service.ICompanyService;
import com.tianju.service.impl.ComTypeServiceImpl;
import com.tianju.service.impl.CompanyService;
import com.tianju.util.StringUtils;

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.text.SimpleDateFormat;
import java.util.Date;

/**
 * 修改页面的servlet:
 * 目的是把已有的信息,查询,返回给修改页面;
 * 也要共享一下类型信息
 */
@WebServlet("/company/updatePage")
public class UpdatePagServlet extends HttpServlet {
    private ICompanyService companyService = new CompanyService();
    private IComTypeService typeService = new ComTypeServiceImpl();

    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解决编码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        // 思路:根据传过来的id,查询到这一条信息,转发给修改页面
        // 1.从前端获取修改的id
        String id = req.getParameter("id");
        System.out.println(id);

        // 2.判断不为空;
        if (StringUtils.isBlank(id)){
            req.setAttribute("msg", "未能获取要修改的公司id");
            // 重定向到list页面
            resp.sendRedirect(req.getContextPath()+"/company/messList");
            return;
        }

        // 3.查询出一条信息;
        Company companyDb = companyService.queryById(Integer.parseInt(id));
        if (companyDb==null){
            req.setAttribute("msg", "未能根据公司id查询到公司信息");
            // 重定向到list页面
            resp.sendRedirect(req.getContextPath()+"/company/messList");
            return;
        }

        // 4.共享值;---查询到的公司信息
        req.setAttribute("companyDb",companyDb);
        System.out.println(companyDb);

        // 4+.也要共享一下类型信息
        req.setAttribute("types", typeService.queryAll());
        // 创建时间需要单独共享一下---解决格式
        Date createTime = companyDb.getCreateTime();
        String createTimeStr = sdf.format(createTime);
        req.setAttribute("createTimeStr",createTimeStr);

        // 5.转发给修改页面.jsp
        req.getRequestDispatcher("/compMess/update.jsp").forward(req,resp);
    }
}

(3)在update.jsp页面,用户进行修改操作,点击提交后,表单信息交给UpdateServlet.java进行修改数据的处理;并且要设置一个隐藏框,用户传给后端要修改数据的id号

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>修改公司信息</title>
</head>
<body>
<h1>修改公司信息</h1>
${types}
<br>
${companyDb}
<br>
${createTimeStr}

<form action="/day06/compMess/update" method="get">
<%--    隐藏信息,目的是传回要修改的id--%>
    <input type="hidden" name="id" value="${companyDb.id}">
    公司名:<input type="text" name="name" value="${companyDb.name}"><br>
    合伙人:<input type="text" name="corporation" value="${companyDb.corporation}"><br>
    公司类型:
    <select name="typeId">
        <option value="">请选择</option>
<%--        需要设置成selected--%>
        <c:forEach items="${types}" var="type">
            <option value="${type.id}" ${type.id==companyDb.typeId ? 'selected' : ''}>${type.name}</option>
        </c:forEach>

    </select><br>
    统一信用编码:
    <input type="text" name="creditCode" value="${companyDb.creditCode}"><br>
    公司成立时间:
    <input type="date" name="createTime" value="${createTimeStr}"><br>
    公司地址:<input type="text" name="address" value="${companyDb.address}"><br>

    <span style="color: darkred">${msg}</span><br>

    <input type="submit" value="提交">
    <input type="reset" value="重置"><br>
    <hr>
    <a href="/day06/company/messList">返回</a>
</form>

</body>
</html>

(4)在UpdateServlet.java中执行数据修改操作;修改成功,再回到list.jsp页面:

package com.tianju.servlet.company;

import com.tianju.entity.Company;
import com.tianju.service.ICompanyService;
import com.tianju.service.impl.CompanyService;
import com.tianju.util.StringUtils;

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.text.ParseException;
import java.text.SimpleDateFormat;

/**
 * 修改公司信息的servlet
 * 目的是:从前端获取要修改的信息;
 * 执行修改操作
 */

@WebServlet("/compMess/update")
public class UpdateServlet extends HttpServlet {
    private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    private ICompanyService companyService = new CompanyService();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 解决编码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        // 获取要修改的id,和其他信息,更新数据库,再重定向到list页面
        // 1.从前端获取信息;
        String name = req.getParameter("name");
        String corporation = req.getParameter("corporation");
        String typeId = req.getParameter("typeId");
        String creditCode = req.getParameter("creditCode");
        String createTime = req.getParameter("createTime");
        String address = req.getParameter("address");
        // 要修改的id;
        String id = req.getParameter("id");

        // 2.判断不为空;
        if (StringUtils.isBlank(name) || StringUtils.isBlank(corporation)
        || StringUtils.isBlank(typeId) || StringUtils.isBlank(creditCode)
        || StringUtils.isBlank(createTime) || StringUtils.isBlank(address) || StringUtils.isBlank(id)
        ){
            // 共享一条msg给前端,提醒一下
            req.setAttribute("msg", "输入为空,请输全公司信息");
            req.getRequestDispatcher("/company/updatePage").forward(req,resp);
            return;
        }

        // 3.new company;
        Company company = new Company();
        company.setAddress(address);
        company.setName(name);
        company.setCorporation(corporation);
        company.setTypeId(Integer.parseInt(typeId));
        company.setCreditCode(creditCode);
        try {
            company.setCreateTime(sdf.parse(createTime));
        } catch (ParseException e) {
            throw new RuntimeException(e);
        }
        // TODO:记录是谁操作的这条信息
        company.setUserId(1);
        // 公司信息的id
        company.setId(Integer.parseInt(id));

        // 4.进行修改;
        Integer updateFlag = companyService.update(company);
        if (updateFlag<1){
            // 共享一条msg给前端,提醒一下
            req.setAttribute("msg", "修改失败,系统繁忙,请稍后重试");
            req.getRequestDispatcher("/company/updatePage").forward(req,resp);
            return;
        }

        // 5.重定向到list页面
        resp.sendRedirect(req.getContextPath()+"/company/messList");
    }
}

删除数据—需要知道要删除的id

在这里插入图片描述

业务逻辑:

(1)把删除的id用get方式拼成一个浏览器请求;

(2)浏览器请求交个servlet进行处理,执行删除操作;

(3)删除成功后,再跳转回到所有数据的页面;

(1)在list.jsp页面,点击删除

<a href="/day06/company/remove?id=${comp.id}"><button>删除</button></a>

(2)由CompanyRemove.servlet进行删除数据处理,删除成功再回到list.jsp页面;

package com.tianju.servlet.company;

import com.tianju.service.ICompanyService;
import com.tianju.service.impl.CompanyService;

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("/company/remove")
public class CompanyRemove extends HttpServlet {
    private ICompanyService companyService = new CompanyService();
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 编码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");

        // 进行删除
        String id = req.getParameter("id");
        companyService.deleteById(Integer.parseInt(id));
        System.out.println(id);

        // 刷新页面,重定向到显示列表
        resp.sendRedirect(req.getContextPath()+"/company/messList");

    }
}

权限控制—只能操作自己的数据

见下面博客,用cookie和session实现

Java网络开发(Session)—— 从http请求 到 cookie 到 session & 用 session控制 删改数据的权限

在这里插入图片描述


总结

1.通过servlet共享值再转发到jsp实现数据的增加和修改;
2.增加,删除,修改完成后都要再回到list页面;
3.通过session可以控制数据的删改权限;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/28310.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SQL调优:让Java内存分担计算

作者: 剽悍一小兔 CSDN前端优质创作者&#xff0c;打破编程小说次元壁第一人《JavaScript百炼成仙》作者&#xff0c;专注Java硬核干货分享&#xff0c;分享创造快乐&#xff0c;技术成就梦想&#xff01; 我们在工作中&#xff0c;经常会因为一条慢sql调半天。这一节&#xff…

Jenkins集成钉钉通知插件的具体步骤怎么做你知道吗?

最近公司要求工作务必使用钉钉&#xff0c;其他聊天软件不再用于工作沟通了。虽然很抓狂&#xff0c;但是上面的决定不可违逆&#xff0c;只好转战钉钉。虽然强制使用钉钉挺令人反感的&#xff0c;但阿里在这款软件上确实下了些功夫&#xff0c;比如jenkins集成钉钉通知插件后&…

MySQL 数据库基础

这里写目录标题 一、Mysql的基本概念数据库管理系统&#xff08;DBMS&#xff09;数据库系统 二、数据库的发展史三、 主流的数据库介绍数据库分为关系型数据库与非关系型数据库关系型数据库非关系型数据库介绍 四、 操作Mysql常用的数据类型&#xff1a;常看数据库结构查看当前…

Linux内核中内存管理相关配置项的详细解析16

接前一篇文章&#xff1a;Linux内核中内存管理相关配置项的详细解析15 三十五、Data Access Monitoring 此项展开后如下图所示&#xff1a; “DAMON: Data Access Monitoring Framework”项默认不选中。如果将其选中&#xff0c;则页面变为&#xff1a; 1. DAMON: Data Access…

Kafka学习---1、Kafka 概述、Kafka快速入门

1、Kafka概述 1.1 定义 1、Kafka传统定义&#xff1a;Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue)&#xff0c;主要是应用于大数据实时处理领域。 2、发布/订阅&#xff1a;消息的发布者不会将信息直接发送给特定的订阅者&#xff0c;而是将发布的信息分…

系统稳定性与高可用保障

一、前言 高并发、高可用、高性能被称为互联网三高架构&#xff0c;这三者都是工程师和架构师在系统架构设计中必须考虑的因素之一。今天我们就来聊一聊三 H 中的高可用&#xff0c;也是我们常说的系统稳定性。 > 本篇文章只聊思路&#xff0c;没有太多的深入细节。阅读全…

大数据分析案例-基于逻辑回归算法构建心脏病发作预测模型

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

几个直接在TigerISP上查看全志芯片接Sensor分辨率的方法

TigerISP是全志提供的量产工具&#xff0c;在连接TigerISP时需要填写Sensor名称、Sensor分辨率、Sensor帧率及选择ISP通道、Vich、Wdr模式等… 准备工作&#xff1a;打开debugfs 操作&#xff1a;adb shell进入系统后输入以下两个命令&#xff1a; mount -t debugfs mone /s…

【办公类-30-01】(Python)大班毕业证书批量打印(幼儿信息、性别、毕业日期、学校、公章、签名、证书日期)

背景需求 大班毕业在即&#xff0c;需要打印大班幼儿毕业证书。&#xff08;已有打印好的彩色证书&#xff09; 常规操作模式&#xff1a; 1&#xff0c;统一盖章&#xff0c;反复签字 200份证书&#xff0c;每张证书上需要盖园所章、园长签字200次 2. 每个班主任自己领取班…

服务日志性能调优,由log引出的巨坑

只有被线上服务问题毒打过的人才明白日志有多重要&#xff01; 谁赞成&#xff0c;谁反对&#xff1f;如果你深有同感&#xff0c;那恭喜你是个社会人了&#xff1a;&#xff09; 日志对程序的重要性不言而喻&#xff0c;轻巧、简单、无需费脑&#xff0c;程序代码中随处可见…

Spring事物失效的八大场景

1.方法内的自调用&#xff1a;spring事物是基于aop的&#xff0c;只要使用代理对象调用某个方法时&#xff0c;spring事物才能生效&#xff0c;而在一个方法内使用this.xxx()时。this并不是代理对象&#xff0c;所以会失效&#xff08;实际上是transaction注解失效&#xff09;…

64位和32位相比优势是什么(一)

前置知识&#xff1a;程序是如何执行的&#xff1f; 一道常规的面试题&#xff1a;相比 32 位&#xff0c;64 位的优势是什么&#xff1f; 面试官考察这种类型的问题&#xff0c;主要是想看求职者是否有扎实的计算机基础&#xff0c;同时想知道求职者在工作中是否充满好奇&am…

渲染案例 | 《妈妈的牵牛花》荣获厦门国际动漫节金奖

2023年5月25日&#xff0c;第十五届厦门国际动漫节“金海豚奖”动画组获奖名单公布。其中&#xff0c;蓝海创意云《青团计划》优秀代表作品——《妈妈的牵牛花》荣获最佳学生动画金奖。 蓝海创意云作为行业内知名的影视动画渲染服务商&#xff0c;深度参与《妈妈的牵牛花》的后…

【CSS】文字扫光 | 渐变光

码来 可调整角度与颜色值来改变效果 <p class"gf-gx-color">我是帅哥</p> <style>.gf-gx-color {background: -webkit-linear-gradient(135deg,red,red 25%,red 50%,#fff 55%,red 60%,red 80%,red 95%,red);-webkit-text-fill-color: transparen…

systemctl 命令设置开机自启动失败

1.案例现象 我在 3 月 31日的时候发表了一篇《shell 脚本之一键部署安装 Nginx 》&#xff0c;介绍了如何通过 shell 脚本一键安装 Nginx 我脚本中执行了 Nginx 开机自启动的命令&#xff0c;当我使用 systemctl status nginx 命令复核的时候&#xff0c;我发现 Nginx 服务设…

Vue.js中的两大指令:v-on和v-bind,实现页面动态渲染和事件响应

Vue.js中的两大指令&#xff1a;v-on和v-bind&#xff0c;实现页面动态渲染和事件响应 一、Vue指令&#xff08;一&#xff09;v-bind指令&#xff08;二&#xff09;v-on指令1. 基本使用&#xff08;1&#xff09;最基本的语法 2. Vue中获取事件对象(了解)3. v-on 事件修饰符4…

树莓派安装 VScode 与卸载 VScode

0. 实验准备 一个带有系统的树莓派&#xff08;有屏幕更好&#xff09; 一台联网的电脑&#xff0c;且可以使用 VNC 登录树莓派&#xff08;与屏幕二选一&#xff09; 一个可以与树莓派交互文件的软件、如&#xff1a;MobaXterm&#xff08;推荐&#xff09;、WinSCP 1. 获取…

AI制作口播视频,原来这么简单

&#x1f4a1;大家好&#xff0c;我是可夫小子&#xff0c;《小白玩转ChatGPT》专栏作者&#xff0c;关注AIGC、读书和自媒体。 在前面的文章中&#xff0c;我们介绍了生成自己专属卡通形象照&#xff0c;这张照片不仅能作头像&#xff0c;还可以让照片说话&#xff0c;作为我们…

【面试题】前端面试 15 问高频题

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 数组去重 遍历旧数组&#xff0c;然后拿着旧数组元素去查询新数组&#xff0c;如果该元素…

Redis的主从复制、哨兵机制、集群

一、主从复制 1、定义 主&#xff1a;master以写为主当master数据变化的时候从&#xff1a;slave以读为主自动将新的数据异步同步到其他slave数据库 2、作用 读写分离、容灾恢复、数据备份、水平扩容支撑高并发。 3、使用方式——配从不配主 权限配置&#xff1a;master如…