菜单权限验证和分页功能

news2024/11/24 13:55:00

权限验证

1.创建数据库,然后测试菜单权限的联合查询语句;

2.创建项目,导入jar包,配置实体类和工具类

3.完成登录功能,当输入用户名和密码正确后跳转到框架页面

  • 编写导航页(top.jsp)和内容页(main.jsp);
  • 在框架页中加载 导航页 和 内容页;
  • 加载菜单页的位置写的是后端的请求地址

4.完成菜单请求,根据当前用户获得该用户的菜单权限,并在菜单页中显示

  • 菜单请求的servlet
  • 菜单请求的dao层代码
  • 菜单页面进行遍历集合并展示数据

1.数据库 

/*
 Navicat Premium Data Transfer

 Source Server         : 2105
 Source Server Type    : MySQL
 Source Server Version : 80016
 Source Host           : localhost:3306
 Source Schema         : mydb

 Target Server Type    : MySQL
 Target Server Version : 80016
 File Encoding         : 65001

 Date: 02/06/2023 10:23:19
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for menu
-- ----------------------------
DROP TABLE IF EXISTS `menu`;
CREATE TABLE `menu`  (
  `mid` int(11) NOT NULL,
  `mname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`mid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of menu
-- ----------------------------
INSERT INTO `menu` VALUES (1, '部门管理');
INSERT INTO `menu` VALUES (2, '员工管理');
INSERT INTO `menu` VALUES (3, '产品管理');
INSERT INTO `menu` VALUES (4, '客户管理');
INSERT INTO `menu` VALUES (5, '订单管理');

-- ----------------------------
-- Table structure for role
-- ----------------------------
DROP TABLE IF EXISTS `role`;
CREATE TABLE `role`  (
  `rid` int(11) NOT NULL,
  `rname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  PRIMARY KEY (`rid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of role
-- ----------------------------
INSERT INTO `role` VALUES (1, '超级管理员');
INSERT INTO `role` VALUES (2, '总经理');
INSERT INTO `role` VALUES (3, '主管');
INSERT INTO `role` VALUES (4, '员工');

-- ----------------------------
-- Table structure for role_menu
-- ----------------------------
DROP TABLE IF EXISTS `role_menu`;
CREATE TABLE `role_menu`  (
  `rmid` int(11) NOT NULL,
  `rid` int(11) DEFAULT NULL,
  `mid` int(11) DEFAULT NULL,
  PRIMARY KEY (`rmid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of role_menu
-- ----------------------------
INSERT INTO `role_menu` VALUES (1, 1, 1);
INSERT INTO `role_menu` VALUES (2, 1, 2);
INSERT INTO `role_menu` VALUES (3, 1, 3);
INSERT INTO `role_menu` VALUES (4, 1, 4);
INSERT INTO `role_menu` VALUES (5, 1, 5);
INSERT INTO `role_menu` VALUES (6, 2, 1);
INSERT INTO `role_menu` VALUES (7, 2, 2);
INSERT INTO `role_menu` VALUES (8, 2, 3);
INSERT INTO `role_menu` VALUES (9, 3, 1);
INSERT INTO `role_menu` VALUES (10, 3, 2);
INSERT INTO `role_menu` VALUES (11, 4, 4);
INSERT INTO `role_menu` VALUES (12, 4, 5);

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `uid` int(11) NOT NULL AUTO_INCREMENT,
  `uname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `pwd` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
  `state` int(5) DEFAULT NULL,
  PRIMARY KEY (`uid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user
-- ----------------------------
INSERT INTO `user` VALUES (1, 'admin', '111', '郑州', 1);
INSERT INTO `user` VALUES (2, 'zs', '222', '洛阳', 1);
INSERT INTO `user` VALUES (3, 'ls', '333', '南阳', 1);
INSERT INTO `user` VALUES (4, 'xm', '444', '安阳', 1);

-- ----------------------------
-- Table structure for user_role
-- ----------------------------
DROP TABLE IF EXISTS `user_role`;
CREATE TABLE `user_role`  (
  `urid` int(11) NOT NULL,
  `uid` int(11) DEFAULT NULL,
  `rid` int(11) DEFAULT NULL,
  PRIMARY KEY (`urid`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

-- ----------------------------
-- Records of user_role
-- ----------------------------
INSERT INTO `user_role` VALUES (1, 1, 1);
INSERT INTO `user_role` VALUES (2, 2, 2);
INSERT INTO `user_role` VALUES (3, 2, 4);
INSERT INTO `user_role` VALUES (4, 3, 3);
INSERT INTO `user_role` VALUES (5, 3, 4);
INSERT INTO `user_role` VALUES (6, 4, 4);

SET FOREIGN_KEY_CHECKS = 1;


#测试数据
drop PROCEDURE if exists addTestData;
#--创建存储过程,用来插入测试数据
delimiter $
CREATE  PROCEDURE addTestData(IN n int)
BEGIN
    DECLARE i int DEFAULT 1;
		WHILE (i <= n ) DO
			INSERT into `user`(uname,pwd,address,state) VALUES(concat('test',i),'111',concat('地址',i),1);
			set i=i+1;
		END WHILE;
END;
$

#--调用
call addTestData(100);

select * from `user`;

#从第 0 条开始,查询3条(每页显示的条数)
select * from `user` limit 0,10;   #第一页
select * from `user` limit 10,10;   #第二页
select * from `user` limit 20,10;   #第三页
select * from `user` limit 30,10;   #第四页

#查询第m页,每页显示n条  请写出表达式
# 每页数量  当前页数   总条数    总页数 = (总条数%每页数量==0) ? 总条数/每页数量 : (总条数/每页数量)+1


select count(uid) num from `user`;


#查询ls的菜单权限

#查询ls的uid
select uid from user where uname='ls';
#查询该uid 对应 的 rid
select rid from user_role where uid=3;
#查询 rid 对应的 mid
select mid from  where rid in(3,4);
#查询mid 对应的 菜单名
select mname from menu where mid in(1,2,4,5);
#多表联查
select mname from user u
inner join user_role ur on u.uid=ur.uid
inner join role_menu rm on ur.rid=rm.rid
inner join menu m on rm.mid=m.mid
where u.uid=3;

select mname from user u inner join user_role ur on u.uid=ur.uid;

 2.web项目,导入jar包;配置实体类User和工具类JDBCUtil

index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>菜单权限</title>
  </head>
  <body>
  <form action="login" method="post">
    帐号:<input type="text" name="uname" value=""><br/>
    密码:<input type="password" name="pwd" value=""><br/>
    <input type="submit" value="登录">
  </form>
  </body>
</html>

页面效果 

 

 头部导航:top.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>头部</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        a{
            text-decoration: none;
        }
        ul,ol{
            list-style: none;
        }
        body{
            background-color: steelblue;
        }
        #nav{
            margin-left: 280px;
        }
        #nav ul li a{
            display: block;
            width: 120px;
            height: 55px;
            line-height: 55px;
            /* border: 1px blue solid; */
            text-align: center;
            float: left;
            font-size: 18px;
            color: white;
            font-weight: 700;
        }
        #nav ul li a:hover{
            background-color: midnightblue;
        }
    </style>
</head>
<div id="nav">
    <ul>
        <li><a href="main.jsp" target="mainFrame">网站首页</a></li>
        <li><a href="#">公司产品</a></li>
        <li><a href="#">企业文化</a></li>
        <li><a href="#">公司新闻</a></li>
        <li><a href="#">系统设置</a></li>
    </ul>
</div>
</html>

 左侧菜单:menu.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>左侧菜单</title>
    <style>
        *{
            margin: 0px;
            padding: 0px;
        }
        a{
            text-decoration: none;
        }
        ul,ol{
            list-style: none;
        }
        body{
            background-color: steelblue;
        }
        h2{
            text-align: center;
        }
        #menu{
            width: 150px;
            margin: 10px auto;
        }
        #menu ul li p{
            display: block;
            width: 150px;
            height: 35px;
            line-height: 35px;
            /* border: 1px red solid; */
            text-align: center;
            font-size: 18px;
            color: white;
            font-weight: 700;
        }
        #menu ul li ol li a{
            display: block;
            width: 150px;
            height: 35px;
            line-height: 35px;
            /* border: 1px green solid; */
            text-align: center;
            font-size: 18px;
            color: white;
            font-weight: 700;
        }
        #menu ul li ol li a:hover{
            background-color: cadetblue;
        }

        #menu ul li ol{
            display: none;
        }
    </style>
    <script src="js/jquery.min.js"></script>
    <script>
        $(function(){
            $("#menu ul li").click(function(){
                var state=$(this).children("ol").css("display");
                if(state=="none"){
                    $(this).children("ol").slideDown();
                    $(this).siblings().children("ol").slideUp();
                }else{
                    $(this).children("ol").slideUp();
                }
            })
        })
    </script>
</head>
<body>
<h2>系统菜单</h2>
<div id="menu">
<%--    <ul>--%>
<%--        <c:forEach items="${menuList}" var="menu">--%>
<%--            <li><p><a href="#">${menu.mname}</a></p></li>--%>
<%--        </c:forEach>--%>
<%--    </ul>--%>


    <ul>
        <li>
            <p>部门管理</p>
            <ol>
                <li><a href="研发部.jsp" target="mainFrame">--研发部</a></li>
                <li><a href="财务部.jsp" target="mainFrame">--财务部</a></li>
                <li><a href="市场部.jsp" target="mainFrame">--市场部</a></li>
            </ol>
        </li>
        <li>
            <p>产品管理</p>
            <ol>
                <li><a href="#">--产品发布</a></li>
                <li><a href="#">--产品维护</a></li>
                <li><a href="#">--产品下架</a></li>
            </ol>
        </li>
        <li>
            <p>订单管理</p>
            <ol>
                <li><a href="#">--客户录入</a></li>
                <li><a href="#">--订单审核</a></li>
                <li><a href="#">--订单维护</a></li>
            </ol>
        </li>
        <li>
            <p>系统设置</p>
            <ol>
                <li><a href="#">--字典管理</a></li>
                <li><a href="#">--参数设置</a></li>
                <li><a href="#">--内存管理</a></li>
            </ol>
        </li>
    </ul>
</div>
</body>
</html>

右侧内容:main.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>内容</title>
    <style>
        /*img{*/
        /*    width: 1000px;*/
        /*    height: 1000px;*/
        /*}*/
    </style>
</head>
<body>
<div>
<%--    <img src="img/lyy.jpg" />--%>
    <img src="img/boy.jpg" />
</div>
</body>
</html>

以上三部分整合frame.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>主页</title>
</head>
<frameset rows="56,*" border="1">
    <frame src="top.jsp" />
    <frameset cols="150,*">
        <frame src="getMenu" />
        <frame src="main.jsp" name="mainFrame" />
    </frameset>
</frameset>
</html>

 市场部.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h2>市场部</h2>
</body>
</html>

 研发部.jsp、财务部.jsp;同上 

页面效果 

dao层

UserDao接口

public interface UserDao {

    User selectByName(String uname) throws SQLException;

    List<Map<String, Object>> getMenuByUid(int uid) throws SQLException;

}

 UserDaoImpl实现类

public class UserDaoImpl implements UserDao {
    private QueryRunner queryRunner = new QueryRunner();
    private Connection conn = JDBCUtil.getConnection();
    private String sql = null;

    @Override
    public User selectByName(String uname) throws SQLException {
        sql="select * from user where uname=?";
        BeanHandler<User> userBeanHandler = new BeanHandler<>(User.class);
        User user = queryRunner.query(conn, sql, userBeanHandler, uname);
        return user;
    }

    @Override
    public List<Map<String, Object>> getMenuByUid(int uid) throws SQLException {
        sql="select mname from user u " +
                "inner join user_role ur on u.uid=ur.uid " +
                "inner join role_menu rm on ur.rid=rm.rid " +
                "inner join menu m on rm.mid=m.mid " +
                "where u.uid=? ";
        MapListHandler mapListHandler = new MapListHandler();
        List<Map<String, Object>> list = queryRunner.query(conn, sql, mapListHandler, uid);
        return list;
    }
}

service层

UserService接口

public interface UserService {
    User selectByName(String uname);

    List<Map<String, Object>> getMenuByUid(int uid);
}

UserServiceImpl实现类

public class UserServiceImpl implements UserService {

    UserDao userDao = new UserDaoImpl();

    @Override
    public User selectByName(String uname) {
        try {
            return userDao.selectByName(uname);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }

    @Override
    public List<Map<String, Object>> getMenuByUid(int uid) {
        try {
            return userDao.getMenuByUid(uid);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return null;
    }
}

 servlet层

UserGetMenu.java

@WebServlet("/getMenu")
public class UserGetMenu extends HttpServlet {

    UserService userService = new UserServiceImpl();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        String uname = request.getParameter("uname");
//        System.out.println(uname);
//        User user = userService.selectByName(uname);
//        System.out.println(user);

        //从session域中拿到登录的用户信息
        User user = (User) request.getSession().getAttribute("user");
        List<Map<String, Object>> menuList = userService.getMenuByUid(user.getUid());
//        System.out.println(menuList);
        request.setAttribute("menuList",menuList);
//        request.getRequestDispatcher("zhuye.jsp").forward(request,response);
        request.getRequestDispatcher("menu.jsp").forward(request,response);

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

 登录UserLogin

@WebServlet("/login")
public class UserLogin extends HttpServlet {
    UserService userService = new UserServiceImpl();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        String uname = request.getParameter("uname");
        String pwd = request.getParameter("pwd");

        User user = userService.selectByName(uname);

        if(user.getPwd().equals(pwd)){
            request.getSession().setAttribute("user",user);
            response.sendRedirect("frame.jsp");
        }
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);

    }
}

分页 

测试数据MySQL

#测试数据
drop PROCEDURE if exists addTestData;
#--创建存储过程,用来插入测试数据
delimiter $
CREATE  PROCEDURE addTestData(IN n int)
BEGIN
    DECLARE i int DEFAULT 1;
		WHILE (i <= n ) DO
			INSERT into `user`(uname,pwd,address,state) VALUES(concat('test',i),'111',concat('地址',i),1);
			set i=i+1;
		END WHILE;
END;
$

#--调用
call addTestData(100);

dao层

UserDao接口

public interface UserDao {

//    User selectByName(String uname) throws SQLException;
//
//    List<Map<String, Object>> getMenuByUid(int uid) throws SQLException;

    int selectCount() throws SQLException;

    List<User> selectByPage(int pageNo, int pageSize) throws SQLException;
    
}

接口实现类:UserDaoImpl.java

public class UserDaoImpl implements UserDao {
    private QueryRunner queryRunner = new QueryRunner();
    private Connection conn = JDBCUtil.getConnection();
    private String sql = null;

    /**
     * 获取用户表的总条数
     * @return
     * @throws SQLException
     */

    @Override
    public int selectCount() throws SQLException {
        sql="select count(uid) num from  user";
        MapHandler mapHandler=new MapHandler();
        Map<String,Object> map = queryRunner.query(conn,sql,mapHandler);
        int count=(int)(long)map.get("num"); //默认是Long类型
        return count;
    }

    /**
     * 分页查询
     * @param pageNo
     * @param pageSize
     * @return
     * @throws SQLException
     */

    @Override
    public List<User> selectByPage(int pageNo, int pageSize) throws SQLException {
        sql="select * from user limit ?,?";
        BeanListHandler<User> beanListHandler = new BeanListHandler<>(User.class);
        List<User> userList = queryRunner.query(conn, sql, beanListHandler, (pageNo - 1) * pageSize, pageSize);
        return userList;
    }
}

service层

UserService接口

public interface UserService {
//    User selectByName(String uname);
//
//    List<Map<String, Object>> getMenuByUid(int uid);

    int selectCount();

    PageResult selectByPage(int pageNo, int pageSize);
}

UserServiceImpl实现类

public class UserServiceImpl implements UserService {

    UserDao userDao = new UserDaoImpl();

    @Override
    public int selectCount() {
        try {
            return userDao.selectCount();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return 0;
    }

    @Override
    public PageResult selectByPage(int pageNo, int pageSize) {
        PageResult pageRs = new PageResult();
        pageRs.setPageNo(pageNo);//投置当前页数
        pageRs.setPageSize(pageSize);//没置每页数量
        try {
            int totalCount =userDao.selectCount();
            List<User> userList = userDao.selectByPage(pageNo,pageSize);
            pageRs.setTotalCount(totalCount);//设置总条数
            pageRs.setPageTotalCount();//设置总页数
            pageRs.setDataList(userList);//设置当前页数据

        } catch (SQLException e) {
            e.printStackTrace();
        }
        return pageRs;
    }
}

Util层 

 用来做分页的工具类:PageResult.java

public class PageResult {
    //属性
    private Integer pageSize; //每页数量
    private Integer pageNo;//当前页码
    private Integer totalCount;//总条数
    private Integer pageTotalCount;//总页数
    private List dataList;//用来存储当前页的数据
    //方法

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getPageNo() {
        return pageNo;
    }

    public void setPageNo(Integer pageNo) {
        this.pageNo = pageNo;
    }

    public Integer getTotalCount() {
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public Integer getPageTotalCount() {
        return pageTotalCount;
    }

    public void setPageTotalCount() {
        this.pageTotalCount = (totalCount%pageSize==0) ? totalCount/pageSize : (totalCount/pageSize)+1;;
    }

    public List getDataList() {
        return dataList;
    }

    public void setDataList(List dataList) {
        this.dataList = dataList;
    }

    @Override
    public String toString() {
        return "PageResult{" +
                "pageSize=" + pageSize +
                ", pageNo=" + pageNo +
                ", totalCount=" + totalCount +
                ", pageTotalCount=" + pageTotalCount +
                ", dataList=" + dataList +
                '}';
    }
}

查询第m页,每页显示n条

总页数 = (总条数%每页数量==0) ? 总条数/每页数量 : (总条数/每页数量)+1

servlet层  

UserListServlet.java

@WebServlet("/userList")
public class UserListServlet extends HttpServlet {

    UserService userService = new UserServiceImpl();

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setCharacterEncoding("utf-8");

        int pageNo=1;
        int pageSize=10;

        String pn = request.getParameter("pageNo");
        String ps = request.getParameter("pageSize");

        if(pn!=null && pn!=""){
            pageNo=Integer.parseInt(pn);
        }
        if(ps!=null && ps!=""){
            pageSize=Integer.parseInt(ps);
        }

        PageResult pageResult = userService.selectByPage(pageNo, pageSize);

        request.setAttribute("pageResult",pageResult);
        request.getRequestDispatcher("userList.jsp").forward(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request,response);
    }
}

 左侧菜单补充

 

 userList.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
    <title>用户列表</title>
</head>
<body>
<h2>用户管理</h2>
<table>
    <thead>
    <tr>
        <th>编号</th>
        <th>用户</th>
        <th>地址</th>
        <th>状态</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    <c:forEach items="${pageResult.dataList}" var="user">
        <tr>
            <td>${user.uid}</td>
            <td>${user.uname}</td>
            <td>${user.address}</td>
            <td>${user.state}</td>
            <td>
                <a href="#">新增</a>
                <a href="#">删除</a>
            </td>
        </tr>
    </c:forEach>
    </tbody>
</table>
<div>
    <p>
        <span>共${pageResult.totalCount}条</span>
        <span>当前第${pageResult.pageNo}页</span>
        <span>共${pageResult.pageTotalCount}页</span>
    </p>
</div>
<form action="userList" method="post">
    前往<input type="text" name="pageNo" value="">页
    每页<input type="text" name="pageSize" value="">条
    <input type="submit" value="跳转">
</form>
<%--当前页:${pageResult.pageNo} <br>--%>
<%--每页数量:${pageResult.pageSize} <br>--%>
<%--总条数:${pageResult.totalCount}<br>--%>
<%--总页数: ${pageResult.pageTotalCount} <br>--%>
<%--当前页数据:${pageResult.dataList} <br>--%>
</body>
</html>

效果图 

 

 

系统权限五张表

大致用到5张表:用户表(UserInfo)、角色表(RoleInfo)、菜单表(MenuInfo)、用户角色表(UserRole)、角色菜单表(RoleMenu)。

  各表的大体表结构如下:

  1、用户表(UserInfo):Id、UserName、UserPwd

  2、角色表(RoleInfo):Id、RoleName

  3、菜单表(MenuInfo):Id、MenuName

  4、用户角色表(UserRole):Id、UserId、RoleId

  5、角色菜单表(RoleMenu):Id、RoleId、MenuId
 

JAVA原生实现验证码

编程思路:

  • awt包画一个矩形图,填充颜色
  • 生成一个四位的随机码值
  • 设置各种随机颜色,画干扰线 

下载jar包网址:https://mvnrepository.com/

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

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

相关文章

Vscode +Msys2配置C/C++环境

目录 前期准备&#xff1a;Step1: 安装Msys2Step2: 安装编译器Step3: 安装VScodeStep4: 配置VScodec_cpp_properties.jsonlaunch.jsontasks.json Step5: 创建C/C项目 前期准备&#xff1a; 首先&#xff0c;你需要下载并安装以下软件&#xff1a; VsCode&#xff1a;https://c…

软件需求分析-复习指南

这里写自定义目录标题 下面是一段用例的描述&#xff0c;针对一个汽车保险系统中“将一辆新车加入一个已有保单中”的用例。请你为其设计&#xff1a; (1) 领域模型&#xff08;要求给出建立过程&#xff09;(20分)&#xff1b; (2) 活动图 (14分)&#xff1b; (3) 顺序图 (14分…

linux内核open文件流程

打开文件流程 本文基本Linux5.15 当应用层通过open api打开一个文件&#xff0c;内核中究竟如何处理&#xff1f; 本身用来描述内核中对应open 系统调用的处理流程。 数据结构 fdtable 一个进程可以打开很多文件&#xff0c; 内核用fdtable来管理这些文件。 include/linu…

为项目添加 HibernateValidator

HibernateValidatorhttps://hibernate.org/validator/ 引入依赖项 首先&#xff0c;确保已将Hibernate Validator添加到Maven或Gradle依赖项中&#xff1a; <!-- Maven 依赖 --> <dependency><groupId>org.hibernate.validator</groupId><artifa…

三年功能测试经验,投了几百份简历,为什么没有收到offer?

软件测试行业3年多经验&#xff0c;学历大专自考本科&#xff0c;主要测试方向web&#xff0c;PC端&#xff0c;wap站&#xff0c;小程序公众号都测试过&#xff0c;app也测过一些&#xff0c;C端B端都有&#xff0c;除功能外&#xff0c;接口性能也有涉猎&#xff0c;但是不能…

kafka--多易杰哥讲解

Kafka是一种分布式的流式数据平台&#xff0c;广泛应用于实时流数据处理和消息系统。它可以让处理数据的应用程序能够处理高流量的数据流&#xff0c;同时提供可靠性和可扩展性。 【多易教育】-Kafka文档 1.基本概念 1.1什么是kafka Kafka 最初是由 LinkedIn 即领英公司…

教你如何用fiddler抓取https(详细教程)

对于想抓取HTTPS的测试初学者来说&#xff0c;常用的工具就是fiddler&#xff0c;可是在初学时&#xff0c;大家对于fiddler如何抓取HTTPS真是伤了脑筋&#xff0c;可能你一步步按着网上的帖子成功了&#xff0c;那当然是极好的&#xff0c;有可能没有成功&#xff0c;这时候你…

前端基础(JavaScript)——基础语法(变量,分支...) Json对象【重要】 函数定义 事件(未完待续)

目录 引出JS是啥&#xff0c;能干啥基础语法1.变量----let2.怎么打印---console3.if条件分支--啥都可以是条件例子&#xff1a;输入框&#xff0c;打印输入和未输入4.数组push 和 splice&#xff08;2&#xff09;splice&#xff0c;3个参数&#xff0c;索引开始、删除几个&…

广域网技术

广域网互连一般采用在网络层进行协议转换的方法实现。时延网关&#xff0c;更确切的说是路由器。 无连接的网际互连&#xff1a; 在网际层提供路由信息的是路由表&#xff0c;每个站或者路由器中都有一个网际路由表&#xff0c;表的每一行说明一个目标站对应的路由器地址。 路…

如何在Ubuntu20.04中配置 libarchive 库

libarchive 是什么&#xff1f; libarchive是一个开源的压缩和归档库。 它支持实时访问多种压缩文件格式&#xff0c;比如7z、zip、cpio、pax、rar、cab、uuencode等&#xff0c;因此应用十分广泛。 举个例子&#xff0c;我写了一段代码&#xff0c;想要解压一个压缩包&#…

HARVEST基音检测算法

Harvest: A high-performance fundamental frequency estimator from speech signals一种基于语音信号的高性能基频估计算法 Harvest的独特之处在于可以获得可靠的F0轮廓&#xff0c;减少了将浊音部分错误地识别为清音部分的错误。 它包括两个步骤:估计F0候选点和在这些候选点…

17JS08——函数

函数 一、函数的概念二、函数的使用2.1 声明函数2.2 调用函数2.3 函数的封装 三、函数的参数3.1 形参和实参3.2 形参和实参个数不匹配问题3.3 小结 四、函数的返回值4.1 return语句4.2 return终止函数4.3 break、continue、return的区别4.4 案例 五、arguments的使用案例1&…

案例30:基于Springboot酒店管理系统开题报告设计

博主介绍&#xff1a;✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专…

Java-多线程解析1

一、线程的描述&#xff1a; 1、线程是一个应用程序进程中不同的执行路径比例如&#xff1a;一个WEB服务器&#xff0c;能够为多个用户同时提供请求服务&#xff1b;而 -> 进程是操作系统中正在执行的不同的应用程序,比如&#xff1a;我们可以同时打开系统的word和游戏 2、多…

Tomcat优化及Nginx、tomcat动静分离配置

Tomcat优化及Nginx、tomcat动静分离配置 一、Tomcat优化1、操作系统优化&#xff08;内核参数优化&#xff09;2、Tomacat配置文件优化3、Java虚拟机&#xff08;JVM&#xff09;调优 二、Nginx、tomcat动静分离配置(七层代理)三、四层代理 一、Tomcat优化 Tomcat默认安装下的…

八、进程等待

文章目录 一、进程创建&#xff08;一&#xff09;fork函数概念1.概念2.父子进程共享fork之前和fork之后的所有代码&#xff0c;只不过子进程只能执行fork之后的&#xff01; &#xff08;二&#xff09;fork之后&#xff0c;操作系统做了什么?1.进程具有独立性&#xff0c;代…

(二)CSharp-字段-属性-常量

一、字段 什么是字段 字段&#xff08;filed&#xff09;是一种表示与对象或类型&#xff08;类或结构体&#xff09;关联的变量字段是类型的成员&#xff0c;旧称“成员变量”与对象关联的字段亦称“实例字段”与类型关联的字段称为“静态字段”&#xff0c;由 static 修饰 …

java SSM 学生家长联系系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM学生家长联系系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用…

docker 安装 oracle19c

docker 安装 oracle19c 拉取镜像 sudo docker pull registry.cn-hangzhou.aliyuncs.com/zhuyijun/oracle:19c创建挂载目录 sudo mkdir -p /mydata/oracle/oradata授权 sudo chmod 777 /mydata/oracle/oradata安装 sudo docker run -d \ -p 1521:1521 -p 5500:5500 \ -e ORACLE…

《C++高级编程》读书笔记(三:编码风格)

1、参考引用 C高级编程&#xff08;第4版&#xff0c;C17标准&#xff09;马克葛瑞格尔 2、建议先看《21天学通C》 这本书入门&#xff0c;笔记链接如下 21天学通C读书笔记&#xff08;文章链接汇总&#xff09; 1. 为代码编写文档 在编程环境下&#xff0c;文档通常指源文件中…