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

news2024/12/24 3:23:10

目录

  • 引出
  • 显示所有数据到前端
    • (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.coloradmin.cn/o/643115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

don‘t have write permissions for the /System/Library/Frameworks/Ruby.framework

don’t have write permissions for the /System/Library/Frameworks/Ruby.framework sudo gem install sigh或sudo gem install -n /usr/local/bin cocoapods --pre出现&#xff1a; appleCQIMAC-L1A9Q05R ~ % sudo gem update --system Password: Updating rubygems-update F…

社会心理学(1) 社会心理学的定义

今天开始 我们一起学习一门课程 社会心理学 社会心理学 他是 应用心理学 或者 心理学专业的一个必修课 吴江霖教授说过 心理学应该分为两大分支 生理心理学 和 社会心理学 如果认同他的观点 那么 社会心理学可谓是相当重要了 社会心理学的定义之广可以说 有多少社会心理学教…

书山有路勤为径 学海无涯苦作舟(AI引领时代浪潮)

书山有路勤为径 学海无涯苦作舟 AI模型是如何训练的&#xff1f; 数据准备 在训练AI模型之前&#xff0c;需要准备大量的数据集。数据集的质量和多样性直接影响模型训练的效果。数据集准备的主要工作包括&#xff1a; 数据清洗&#xff1a;清除数据中的噪声、错误、重复等不…

STM32单片机(六)TIM定时器 -> 第一节:TIM定时中断

❤️ 专栏简介&#xff1a;本专栏记录了从零学习单片机的过程&#xff0c;其中包括51单片机和STM32单片机两部分&#xff1b;建议先学习51单片机&#xff0c;其是STM32等高级单片机的基础&#xff1b;这样再学习STM32时才能融会贯通。 ☀️ 专栏适用人群 &#xff1a;适用于想要…

震惊!kratos的make命令windows下无法使用

Make 命令 kratos想在windows下开发的舒服&#xff0c;各种 命令必须得支持&#xff0c;不然一个protoc就是噩梦&#xff0c;好在官方内置了一些make api这样的命令&#xff0c;坏在windows不支持make命令&#x1f602; MinGw 百度一搜大概是MinGW 这么个东西&#xff0c;这…

【Linux】软硬链接与动静态库

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器 Linux文章都放在了专栏&#xff1a;【 Linux 】欢迎支持订阅 &#x1f339; 相关文章&#xff1a; 【Linux】动静态库以及动静态链接 【Linux】基础IO_文件系统 软硬链接 软链接 我们知道&#xff0c;每一个文件都会有自己…

TypeScript学习(1)- ts基础配置介绍

目录 TypeScript是什么&#xff1f; TypeScript开发环境搭建 TypeScript是什么&#xff1f; 以JavaScript为基础构建的语言一个JavaScript的超集typescript扩展了JavaScript&#xff0c;并添加了类型可以在任何支持JavaScript的平台中执行TS不能被js解析器直接执行&#xff0…

【多线程与高并发】- 锁的机制与底层优化原理

锁的机制与底层优化原理 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 一个有梦有戏的人 怒放吧德德 &#x1f31d;分享学习心得&#xff0c;欢迎指正&#…

c语言第二课------地基打牢,基础打紧,不可放弃

作者前言: 欢迎小可爱们前来借鉴我的gtieehttps://gitee.com/qin-laoda 目录 变量的作用域和生命周期 常量 字符串转义字符注释 选择语句 循环语句 函数 _________________________________________________ 这次我们接着上一篇博客,我们接着来继续C语言的学习 变量的作用…

四十六、B+树

这一次我们来介绍B树。 一个m阶的B树具有如下几个特征&#xff1a; 1.根结点至少有两个子女。 2.每个中间节点都包含k-1个元素和k个孩子&#xff0c;其中 m/2 < k < m 3.每一个叶子节点都包含k-1个元素&#xff0c;其中 m/2 < k < m 4.所有的叶子结点都位于同一层。…

Python学习ing

Python中 字符串不能通过 &#xff0c;把 数字等非字符串&#xff0c;进行拼接&#xff0c; 但Javascript中是可以的。 会把数字自动转换成字符串&#xff0c; 但python 提供了占位符 %s % 占位符 city "徐州" age 20 message "我是%s人,今天%s岁" …

面向对象继承

2. 面向对象特征二&#xff1a;继承(Inheritance) 2.1 继承的概述 说到继承我们会想到什么 在Java面向对象程序设计中的继承&#xff0c;多个类中存在相同属性和行为时&#xff0c;将这些相同的内容抽取到单独一个类&#xff08;父类&#xff09;中&#xff0c;然后所有的类继…

新能源汽车保养vr仿真教学软件为职业培训带来新的思路和方法

电动车电池更换VR虚拟体验是一种利用VR虚拟现实技术实现对电动车电池更换进行模拟仿真演示和实操训练的虚拟仿真实验教学课件&#xff0c;相比传统教学模式&#xff0c;有效提高学生的实践能力和技能水平。 通过VR技术模拟现场&#xff0c;使培训人员可以身临其境滴观摩操作过程…

(二)Liunx下ElasticSearch快速搭建

1.下载安装 1).环境准备&#xff1a; 操作系统&#xff1a;centos7 es版本&#xff1a;8.8.1 jdk:17 es与jdk等兼容支持查看 2).下载安装包上传到服务器&#xff0c;官网地址 https://www.elastic.co/cn/downloads/elasticsearch 3).解压文件 tar -zxvf elasticsearch-8.8.…

信息差永远存在,聪明的人也永远能利用信息差赚钱

信息的差异永远存在&#xff01; 例子一&#xff1a; 在2018年&#xff0c;某宝在央视春晚中成功地获得了广告名额&#xff0c;但与此同时&#xff0c;上百位工程师没想到的是&#xff0c;这是一个恶梦的开始&#xff01; 由于春晚当晚的访问人数过多&#xff0c;服务器立刻发…

模块化相关知识点

这里写目录标题 模块化概述基本使用&#xff08;包的跨模块使用&#xff09;介绍代码演示 模块服务的使用&#xff08;跨模块接口的实现&#xff09;简介具体代码 模块化 概述 基本使用&#xff08;包的跨模块使用&#xff09; 介绍 代码演示 首先 要在第一个模块里&#xf…

路径规划算法:基于算术优化优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于算术优化优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于算术优化优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化…

SpringCloud公共模块项目搭建(二)

我们新建module公共模块项目 microservice-common&#xff0c;主要是放一些其他项目公用的东西&#xff0c;比如实体类&#xff0c;工具类等等&#xff1b; 新建module 勾选 create a simple project 取下module 名称 mircoservice-common 这里用默认的jar pom.xml 加下 jpa…

SpringBatch从入门到实战(四):表结构

batch_job_instance -> batch_job_execution/batch_job_execution_params -> batch_job_execution_context 一&#xff1a;batch_job_instance 作业实例 同一个作业&#xff0c;同一套作业参数 唯一标识一条记录&#xff0c;首次启动时插入一条数据。 字段描述JOB_IN…

MySQL 数据库基础

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