【网络应用开发】实验5—— JDBC数据库访问与DAO设计模式

news2024/9/22 7:34:54

目录

JDBC数据库访问与DAO设计模式预习报告

一、实验目的

二、实验原理 

三、实验预习内容 

1. JDBC常用的类对象与接口有哪些?它们的功能如何?

2.使用数据源访问数据库的基本思想是什么?这样做有什么好处?

3.什么是DAO?DAO设计模式有什么好处?

JDBC数据库访问与DAO设计模式实验报告

一、实验目的

二、实验要求

三、实验内容与步骤

1. 使用传统JDBC方法与Model 1模型通过JSP页面访问数据库。

 2. 基于实验内容1创建的数据库表和模型,采用MVC设计模式,通过数据源和DAO对象访问数据库。其中JavaBeans实现模型与数据库访问与操作,Servlet实现控制器,JSP页面实现视图。

 3. DAO设计模式练习

三、思考题

1. 总结并归纳传统JDBC方法访问数据库的步骤。

2. 总结并归纳使用数据源访问数据库的步骤。


JDBC数据库访问与DAO设计模式预习报告

一、实验目的

1. 掌握传统的JDBC数据库访问方法;

2. 掌握基于JNDI数据源的数据库访问方法。

3. 掌握DAO设计模式及其应用方法。

二、实验原理 

        数据库应用是Web应用开发的一个重要方面。Web应用程序访问数据库有两种方法:传统的方法和使用JNDI数据源的方法。

        传统方法访问数据库的步骤是:①加载数据库驱动程序;②建立连接对象;③创建语句对象;④获得结果集;⑤关闭有关连接对象。

        使用数据源访问数据库的步骤是:①配置数据源(局部数据源或全局数据源);②通过JNDI机制查找命名数据源;③通过数据源对象创建连接对象;④其他与传统方法一致。

        DAO(Data Access Object)是指数据访问对象,将数据访问方法(通常使用JDBC技术)封装在DAO类中,提高应用程序的灵活性和可复用性,实现业务逻辑和数据访问逻辑分离,使应用维护变得更简单。

三、实验预习内容 

1. JDBC常用的类对象与接口有哪些?它们的功能如何?

Driver接口:通过Class.forName()装载特定厂商提供的数据库驱动程序;

DriverManager类:管理驱动程序,通过getConnection()方法建立与数据库的连接。

Connection对象:代表与数据库的连接,不同的数据库驱动程序和连接的URL都不相同

Statement对象:提供在基层连接上运行SQL语句并访问结果。

(1)Statement执行一般的SQL语句,包括插入、删除、更新、查询等。

(2)PreparedStatement称为准备语句,它是将SQL语句中的某些参数暂不指定,而等到执行时再统一指定。

(3)CallableStatement用于执行数据库的存储过程。

ResultSet对象:提供对查询结果集的行访问的方法,并且可以访问结果的不同字段。

2.使用数据源访问数据库的基本思想是什么?这样做有什么好处?

        事先建立若干连接对象,存放在数据库连接池中,供数据访问组件共享。应用程序在启动时只需创建少量的连接对象,不需要为每个HTTP请求都创建一个连接对象,大大降低请求的响应时间。

3.什么是DAO?DAO设计模式有什么好处?

DAO:数据访问对象。

DAO设计模式的好处:将数据访问方法(通常使用JDBC技术)封装在DAO类中,提高应用程序的灵活性和可复用性。实现业务逻辑和数据访问逻辑分离,使应用维护变得更简单。

JDBC数据库访问与DAO设计模式实验报告

一、实验目的

1. 掌握传统的JDBC数据库访问方法;

2. 掌握基于JNDI数据源的数据库访问方法。

3. 掌握DAO设计模式及其应用方法。

二、实验要求

1. 实验前进行预习,完成实验预习报告,将预习内容以简答题的形式进行回答;

2.按照每一项实验内容进行上机实践与编程,将程序源代码和运行结果图附在实验报告中实验内容对应的部分。

3. 实验预习报告和实验报告打印装订在一起。

4. 将每一次实验的源代码按目录组织保存并压缩,按照老师指定的要求进行提交。代码保存方式如:exp05表示实验五Web项目的名称,其下保存各项实验内容的源文件及相关资源,将整个exp05文件夹进行压缩后命名为班级-姓名-实验05,如:计171-张三-实验05。

三、实验内容与步骤

1. 使用传统JDBC方法与Model 1模型通过JSP页面访问数据库。

【步骤1】在MySQL数据库test中创建books表,其结构如下:

向books表中插入几条记录,如下:

向books表中插入几条记录,如下:

 

注意:需要将数据库的JDBC驱动程序安装到Web应用程序的WEB-INF\lib目录中。

建表:

create table books (
bookid varchar (10) not null primary key,
title varchar (50),
author varchar(20),
publisher varchar (40),
price float
);

INSERT INTO books VALUES
('204','Head First Servlets & JSP', 'Bryan Basham', '中国电力出版社',98);
INSERT INTO books VALUES
('201', 'Servlets 与JSP 核心教程', 'Hall Marty','清华大学出版社',45);
INSERT INTO books VALUES
('202', 'Tomcat与Java Web 开发技术祥解', '孙卫琴', '机械工业出版社',45);
INSERT INTO books VALUES
('203', 'JSP 应用开发技术', '柳永坡','人民邮电出版社',52);
INSERT INTO books VALUES
('205', 'J2EE 1.4 编程指南', 'Spielman Sue','电子工业出版社',68);

 【步骤2】创建模型:编写名称为BookBean.java的JavaBean用于封装图书的信息;编写BookDAO.java,采用传统JDBC方法创建数据库连接,对图书信息进行查询。

package exp05;

import java.io.Serializable;

@SuppressWarnings("serial")
public class BookBean implements Serializable{

    private String bookid;
    private String title;
    private String author;
    private String publisher;
    private float price;


    public BookBean(String bookid,String title,String author,String publisher,float price)
    {
        this.bookid=bookid;
        this.title=title;
        this.author=author;
        this.publisher=publisher;
        this.price=price;
    }

    public BookBean() {

    }

    public String getBookid() {
        return bookid;
    }
    public void setBookid(String bookid) {
        this.bookid = bookid;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getAuthor() {
        return author;
    }
    public void setAuthor(String author) {
        this.author = author;
    }
    public String getPublisher() {
        return publisher;
    }
    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }
    public float getPrice() {
        return price;
    }
    public void setPrice(float price) {
        this.price = price;
    }
}


【步骤3】创建兼具视图与控制器功能的JSP页面:编写displayBooks.jsp页面,使用<jsp:useBean>动作调用BookDAO查询所有图书的信息,以表格的形式显示所有图书的书号、书名、作者、价格和出版社名称。
<%@ page import="java.sql.ResultSet" %>
<%--
  Created by IntelliJ IDEA.
  User: The Last SundayTime
  Date: 2021/5/13
  Time: 21:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" %>
<jsp:useBean id="book" class="exp05.BookDAO" scope="session"/>
<html>
<head>
    <title>displayBooks</title>
<style>
    td{
        text-align: center;
    }
</style>
</head>
<body>
<table width="500" height="256" border="1" align="center">
    <tr>
        <th scope="col">bookid</th>
        <th scope="col">title</th>
        <th scope="col">author</th>
        <th scope="col">publisher</th>
        <th scope="col">price</th>
    </tr>
    <%!int i=1;%>
    <%
        try
        {
            ResultSet rs=book.result();
            while(rs.next()){%>
    <tr>
        <td><%=rs.getString(1)   %> </td>
        <td><%=rs.getString(2)   %></td>
        <td><%=rs.getString(3)   %></td>
        <td><%=rs.getString(4)   %></td>
        <td><%=rs.getString(5)   %></td>
    </tr>

    <% i++; }
        rs.close();
    }catch(Exception e)
    {   } %>
</table>
</body>
</html>

 2. 基于实验内容1创建的数据库表和模型,采用MVC设计模式,通过数据源和DAO对象访问数据库。其中JavaBeans实现模型与数据库访问与操作,Servlet实现控制器,JSP页面实现视图。

  • 模型包括2个JavaBean:BookBean用于存放图书信息,BookDAO用于访问数据库。
  • 控制器包括2个Servlet:BookQueryServlet根据请求参数查询图书信息、BookInsertServlet用来向数据库中插入一条图书信息。
  • 视图包括4个JSP页面:bookQuery.jsp显示图书查询表单的页面、bookInsert.jsp显示收集图书信息表单的页面、display.jsp显示查询结果页面、errorPage.jsp显示查询错误页面。
    package exp05;
    import java.sql.*;
    public class BookDAO1 {
        private static  Connection con;
        public static void main(String args[]) throws SQLException, ClassNotFoundException
        {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1433;DatabaseName=test";
            con = DriverManager.getConnection(url, "sa", "123456");
            //BookBean book=new BookBean("303","34","34","55",45);
            //System.out.println(insertBook(book));
    
        }
        public BookDAO1() throws ClassNotFoundException, SQLException {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
            String url = "jdbc:sqlserver://localhost:1433;DatabaseName=test";
            con = DriverManager.getConnection(url, "sa", "123456");
        }
        public  BookBean searchBook(String bookid) throws SQLException, ClassNotFoundException
        {
            BookBean bookbean=new BookBean();
            Statement st=con.createStatement();
            String sql="select * from book where bookid="+bookid;
            ResultSet rs=st.executeQuery(sql);
            if(rs.next())
            {
                bookbean.setBookid(rs.getString(1));
                bookbean.setTitle(rs.getString(2));
                bookbean.setAuthor(rs.getString(3));
                bookbean.setPublisher(rs.getString(4));
                bookbean.setPrice(rs.getFloat(5));
            }else
            {
                return null;
            }
            return bookbean;
    
        }
        public boolean insertBook(BookBean book) throws SQLException
        {
            Statement st=con.createStatement();
            String sql="insert into book values('"+book.getBookid()+"','"+book.getTitle()+"','"+book.getAuthor()+"','"+book.getPublisher()+"',"+book.getPrice()+")";
            boolean rs=st.execute(sql);
            if(!rs)
            {
                return true;
            }
            return false;
        }
    
    }
    package exp05;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.annotation.*;
    import java.io.IOException;
    import java.sql.SQLException;
    
    /**
     * Servlet implementation class BookInsertServlet
     */
    @WebServlet("/BookInsertServlet")
    public class BookInsertServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            response.setCharacterEncoding("utf-8");
    
            BookBean book = new BookBean(
                    request.getParameter("bookid"),request.getParameter("title"),
                    request.getParameter("author"),request.getParameter("publisher"),
                    Float.parseFloat(request.getParameter("price"))
            );
    
            try {
                BookDAO1 bookdao = new BookDAO1();
                if(bookdao.insertBook(book)){
                    RequestDispatcher view = request.getRequestDispatcher("jsp/display.jsp");
                    view.forward(request, response);
                }else{
                    RequestDispatcher view = request.getRequestDispatcher("jsp/errorPage.jsp");
                    view.forward(request, response);
                }
                //request.setAttribute("result",message);
            } catch (SQLException | ClassNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
    
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
    
    package exp05;
    
    import javax.servlet.*;
    import javax.servlet.http.*;
    import javax.servlet.annotation.*;
    import java.io.IOException;
    import java.sql.SQLException;
    
    /**
     * Servlet implementation class BookQueryServlet
     */
    @WebServlet("/BookQueryServlet")
    public class BookQueryServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            response.setCharacterEncoding("utf-8");
            String bookid = request.getParameter("bookid");
            try {
                BookDAO1 bookdao = new BookDAO1();
                BookBean book = bookdao.searchBook(bookid);
                if(book!=null){
                    request.getSession().setAttribute("book", book);
                    RequestDispatcher view = request.getRequestDispatcher("jsp/display.jsp");
                    view.forward(request, response);
                }else{
                    RequestDispatcher view = request.getRequestDispatcher("jsp/errorPage.jsp");
                    view.forward(request, response);
                }
            } catch (ClassNotFoundException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            } catch (SQLException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
    
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }
    
    

    bookQuery.jsp显示图书查询表单的页面

    <%--
      Created by IntelliJ IDEA.
      User: The Last SundayTime
      Date: 2021/5/14
      Time: 0:00
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <jsp:useBean id="book" class="exp05.BookBean" scope="session"/>
    <jsp:setProperty name="book" property="*"/>
    <html>
    <head>
        <title>bookQuery</title>
    </head>
    <body>
    书号:<jsp:getProperty name="book" property="bookid"/><br><br>
    书名:<jsp:getProperty name="book" property="title"/><br><br>
    作者:<jsp:getProperty name="book" property="author"/><br><br>
    出版社:<jsp:getProperty name="book" property="publisher"/><br><br>
    价格:<jsp:getProperty name="book" property="price"/><br><br>
    </body>
    </html>
    
    

bookInsert.jsp显示收集图书信息表单的页面

<%--
  Created by IntelliJ IDEA.
  User: The Last SundayTime
  Date: 2021/5/14
  Time: 0:00
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="book" class="exp05.BookBean" scope="session"/>
<html>
<head>
    <title>bookInsert</title>
</head>
<body>
<h3>请输入图书信息:</h3>
<form action="BookInsertServlet" method="post">
    <table>
        <tr><td>书号</td> <td><input type="text" name="bookid" ></td></tr>
        <tr><td>书名</td><td><input type="text" name="title"></td></tr>
        <tr><td>作者</td><td><input type="text" name="author" ></td></tr>
        <tr><td>出版社</td><td><input type="text" name="publisher" ></td></tr>
        <tr><td>单价</td><td><input type="text" name="price" ></td></tr>
        <tr><td><input type="submit" value="确定" ></td>
            <td><input type="reset" value="重置" ></td>
        </tr>
    </table>
</form>
</body>
</html>

 display.jsp显示查询结果页面

<%--
  Created by IntelliJ IDEA.
  User: The Last SundayTime
  Date: 2021/5/14
  Time: 0:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>
<head>
    <title>display</title>
</head>
<body>
<form action="BookQueryServlet" method="post">
    请输入书号:<input type="text" name="bookid">
    <input type="submit" value="查询">
</form>
</body>
</html>

 

 errorPage.jsp显示

<%--
  Created by IntelliJ IDEA.
  User: The Last SundayTime
  Date: 2021/5/14
  Time: 0:01
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>errorPage</title>
</head>
<body>
对不起!该书不存在!请输入正确的书名!
</body>
</html>

 3. DAO设计模式练习

【步骤1】:使用root用户登录MySQL的test数据库,创建customer表,包括custName、email、phone等字段,设计CustomerBean传输对象,使其实现java.io.Serializable接口。

package exp05;

import java.io.Serializable;

@SuppressWarnings("serial")
public class CustomerBean implements Serializable {

    private  String custName;
    private String email;
    private String phone;
    public CustomerBean() {}
    public CustomerBean(String custName,String email,String phone)
    {
        this.custName=custName;
        this.email=email;
        this.phone=phone;
    }
    public String getCustName() {
        return custName;
    }
    public void setCustName(String custName) {
        this.custName = custName;
    }
    public String getEmail() {
        return email;
    }
    public void setEmail(String email) {
        this.email = email;
    }
    public String getPhone() {
        return phone;
    }
    public void setPhone(String phone) {
        this.phone = phone;
    }
}

【步骤2】:创建CustomerDAO类实现数据库访问逻辑,通过该类可以获得一个连接对象,对数据库进行查询、插入、修改和删除操作,最后关闭指定的对象。

package exp05;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;


public class CustomerDAO {
    private Connection con;
    public CustomerDAO()
    {
        try {
            Class.forName("com.mysql.jdbc.Driver");
            String url="jdbc:mysql://localhost:3306/test";
            con=DriverManager.getConnection(url,"root","123456");
        }
        catch(Exception e)
        {

        }
    }
    public boolean insertCustomer(CustomerBean customer) throws SQLException
    {
        Statement st=con.createStatement();
        String sql="insert into customer values('"+customer.getCustName()+"','"+customer.getEmail()+"','"
                +customer.getPhone()+"')";
        boolean rs=st.execute(sql);
        if(!rs)
        {
            return true;
        }
        return false;
    }

}

【步骤3】:创建insertCustomer.jsp页面,通过一个表单录入向数据库中插入的数据。

<%--
  Created by IntelliJ IDEA.
  User: The Last SundayTime
  Date: 2021/5/14
  Time: 0:35
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>insertCustomer</title>
</head>
<body>
<h3>请输入顾客信息:</h3>
<form action = "InsertCustomerServlet" method = "post">
    <table>
        <tr><td>姓名</td> <td><input type="text" name="custName" ></td></tr>
        <tr><td>邮箱</td><td><input type="text" name="email"></td></tr>
        <tr><td>电话</td><td><input type="text" name="phone" ></td></tr>
        <tr><td><input type="submit" value="确定" ></td>
            <td><input type="reset" value="重置" ></td>
        </tr>
    </table>
</form>
</body>
</html>

【步骤4】:创建InsertCustomerServlet.java控制器,调用CustomerDAO对象和传输对象,将数据插入到数据库中。

package exp05;

import java.io.IOException;
import java.sql.SQLException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class InsertCustomerServlet
 */
@WebServlet("/InsertCustomerServlet")
public class InsertCustomerServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public InsertCustomerServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");

        CustomerBean  customer = new CustomerBean(
                request.getParameter("custName"),request.getParameter("email"),
                request.getParameter("phone"));


        try {
            CustomerDAO customerdao = new CustomerDAO();
            if(customerdao.insertCustomer(customer)){
                RequestDispatcher view = request.getRequestDispatcher("jsp/showCustomer.jsp");
                view.forward(request, response);
                //request.setAttribute("result",message);
            }
        } catch (SQLException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
    }

}

 【步骤5】:创建showCustmer.jsp,显示所有客户的信息,每一条客户信息后面增加修改和删除超链接,编写ActionServlet.java控制器,调用DAO和传输对象实现对客户信息的删除和修改功能。

<%--
  Created by IntelliJ IDEA.
  User: The Last SundayTime
  Date: 2021/5/14
  Time: 0:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<jsp:useBean id="customer" class="exp05.CustomerBean" scope="session"/>
<jsp:setProperty name="customer" property="*"/>
<html>
<head>
    <title>showCustomer</title>
</head>
<body>
姓名:<jsp:getProperty name="customer" property="custName"/><br><br>
邮箱:<jsp:getProperty name="customer" property="email"/><br><br>
电话:<jsp:getProperty name="customer" property="phone"/><br><br>
</body>
</html>

三、思考题

1. 总结并归纳传统JDBC方法访问数据库的步骤。

(1)加载驱动程序。

(2)建立连接对象。

(3)创建语句对象。

(4)执行SQL语句并处理结果。

(5)关闭建立的对象。

2. 总结并归纳使用数据源访问数据库的步骤。

在DataSource中事先建立数据库连接,将这些连接保存在连接池中,当java程序访问数据库时,就从连接池中取出空闲状态的连接,当我们的程序访问结束时,再把这些数据库连接放回连接池,从而提高访问数据库的效率。

 

 

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

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

相关文章

vscode使用虚拟环境

我的conda没有添加入path&#xff0c;每次打开总是报错 一、选择对应虚拟环境的解释器 1.点击vscode的右下角这里 2.点击后可能会在vscode上方出现下图样子&#xff0c;如果出现下图&#xff0c;则点击第二项Select at workspace level&#xff0c; 3.接着出现下图样式&#…

2022年营收破百亿,零跑汽车展现超强实力

此前&#xff0c;零跑已正式公布了2022年的财务数据。可以看到&#xff0c;零跑去年的营收破百亿&#xff0c;增速将近300%&#xff0c;这一成绩在汽车界是相当优越的。说到为何零跑能够实现如此快速的成长&#xff0c;那就不得不提其全域自研的核心优势。 如今&#xff0c;无论…

有始有终的编码原则

基本情况 在程序员的修炼之道之中&#xff0c;说到&#xff1a; 这个建议能简单地应用到大多数场合。简单说就是&#xff0c;分配资源的函 数或对象&#xff0c;对释放资源应负有责任。 这其实就是我们常说的谁分配的就谁负责释放&#xff0c;这也是内存释放的一个原则&#x…

微搭低代码实现投票功能

经常有一类需求&#xff0c;就是投票的功能&#xff0c;需要限制每一个选项每个人只可以投一票&#xff0c;投完之后需要统计票数。本篇教程我们讲解一下如何利用微搭低代码工具来实现投票功能。 1 设计数据源 我们需要设计一个数据源来记录用户的投票&#xff0c;如何限制用…

Docker网络模式详解

文章目录 一、docker网络概述1、docker网络实现的原理1.1 随机映射端口( 从32768开始)1.2 指定映射端口1.3 浏览器访问测试 二、 docker的网络模式1、默认网络2、使用docker run 创建Docker容器时&#xff0c;可以用--net或--network 选项指定容器的网络模式 三、docker网络模式…

代码审计实战3-android java

jks java keystore 作用&#xff1a;保证应用的唯一性 简介&#xff1a;可以理解为java的密钥库&#xff0c;是一个用来存放密钥和证书的仓库。 &#xff08;而keytool就是密钥和证书的管理工具&#xff0c;它把key&#xff08;密钥&#xff09;和certificate&#xff08;证…

一零五六、Jsp+mysql 实现学生选课系统(附源码及数据库)

目录 实现效果 项目代码 数据库 结语 实现效果 login.jsp index.jsp course_query.jsp course_selection.jsp course_withdraw.jsp selection_query.jsp 项目代码 checkSelectionStatus.jsp % page contentType"text/html;charsetUTF-8" language"java&q…

图像处理:均值滤波算法

目录 前言 概念介绍 基本原理 Opencv实现中值滤波 Python手写实现均值滤波 参考文章 前言 在此之前&#xff0c;我曾在此篇中推导过图像处理&#xff1a;推导五种滤波算法&#xff08;均值、中值、高斯、双边、引导&#xff09;。这在此基础上&#xff0c;我想更深入地研…

4月23号软件更新资讯合集.....

微软发布 Web 渲染引擎 Babylon.js 6.0 Babylon.js 是一个强大、简单、开放的游戏和 Web 渲染引擎&#xff0c;并被封装在一个友好的 JavaScript 框架中。 Babylon.js 6.0 带来了性能改进、渲染增强和一系列新功能。 新物理插件 Havok 团队通过一个特殊的新 WASM 插件和对 Ba…

sar基本命令格式操作及使用方法学习笔记

目录 SAR说明Centos7安装Sar命令sar命令显示时间改为24小时制查询某天某个时间段内的数据 SAR说明 sar是一个采集&#xff0c;报告和存储计算机负载信息的工具。自下载安装好后每10分钟对系统性能进行一次采集&#xff0c;每天的日志文件保存再/var/log/sa/下&#xff0c;sa17…

Docker 部署Redis

由于项目需要&#xff0c;上了redis。公司用的是OKD4.x&#xff0c;所以在自己的环境上也直接上docker&#xff0c;比下载、编译、安装省心多了。 1、下载镜像 官网地址&#xff1a;https://hub.docker.com/_/redis 我选择的是docker pull redis:7.0-bullseye 具体版本号的含…

Web3D包装生产线 HTML5+Threejs(webgl)开发

生产线三维可视化解决方案就是通过物联网、虚实联动和三维建模等先进技术&#xff0c;以一个3D立体模型展现出来&#xff0c;可以让我们很直观的看到生产线的运作以及对数据的监控。3D运用数据孪生技术可以让工业3D物联网管理系统的界面变得非常的简单易看&#xff0c;并且能够…

软件测试的新技术和方法

作为一位资深的IT领域博主&#xff0c;我一直在关注软件测试领域的发展趋势。随着技术的不断发展&#xff0c;软件测试领域也在不断更新换代。在本文中&#xff0c;我将分享一些最新的软件测试技术和方法&#xff0c;希望能对广大软件测试工程师提供一些参考。 一、自动化测试…

【教程】保姆级红米AX6000刷UBoot和OpenWrt固件

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhang.cn] 目录 开启SSH 刷入UBoot 刷入Openwrt 设置Openwrt 刷回小米原厂固件 开启SSH 1、下载官方指定版本固件&#xff1a;https://share.qust.me/redmi-ax6000-1.2.8.bin 2、进入路由器后台升级固件&#xff1a;h…

Nginx +Tomcat 负载均衡,动静分离集群

介绍 通常情况下&#xff0c;一个 Tomcat 站点由于可能出现单点故障及无法应付过多客户复杂多样的请求等情况&#xff0c;不能单独应用于生产环境下&#xff0c;所以我们需要一套更可靠的解决方案 Nginx 是一款非常优秀的http服务软件&#xff0c;它能够支持高达 50000 个并发…

IndexedDB的包装器JsStore - 分页功能

JsStore是IndexedDB的包装器。它提供了简单的SQL像api&#xff0c;这是容易学习和使用。IndexedDb查询可以在web worker内部执行&#xff0c;JsStore通过提供一个单独的worker文件来保持这种功能。 由于之前使用IndexedDB时&#xff0c;提供api不太丰富&#xff0c;就自己写了一…

Ubuntu2204安装pycharm社区版

最近在学习人工智能相关的知识&#xff0c;比较流行的开源框架对windows操作系统的支持并不太友好&#xff0c;因此把学习测试的环境搭在了Ubuntu2204上。一开始我都是在win10系统中的pycharm上写python代码&#xff0c;然后再上传到Ubuntu2204中运行测试&#xff0c;这么做降低…

GIS基础概念与开发实践

GIS的应用价值 呈现、还原、规划空间信息数据挖掘、统计分析等等 Q&#xff1a;这么多软件可以做GIS&#xff0c;但是格式又不一样&#xff0c;怎么办&#xff1f;这普需要一个标准的出现。 GIS标准&#xff1a;OGC标准 不同GIS软件对空间数据定义和存储结构不同&#xff0…

远程访问及控制ssh

SSH远程管理 OpenSSH服务器 SSH(Secure Shell) 协议 是一种安全通道协议。主要用来实现字符界面的远程登录、远程复制等功能。对通信数据进行了加密处理&#xff0c;用于远程管理其中包括用户登录时输入的用户口令。因此SSH协议具有很好的安全性------------&#xff08;同样…

C嘎嘎~~ 【初识C++ 下篇】

初识C 下篇 1.引用1.1引用的概念1.2引用的特点1.3常引用1.4引用使用的场景1.5引用和指针的区别 2.指针空值 --- nullptr3.内联函数3.1 内联函数的概念3.2内联函数的使用场景3.3内联函数的特性 1.引用 1.1引用的概念 相信大家小时候&#xff0c; 肯定有小名、绰号、亲朋好友的昵…