java web 实验五 Servlet控制层设计(设计性)

实验  Servlet控制层设计(设计性)

//代码放在资源包里了

  1. 实验目的
    1. 熟悉Servlet的基本语法。
    2. 掌握采用HTML、JS、JDBC、JSP、Servlet和四层结构的综合应用。
  2. 实验要求
    1. 本实验要求每个同学单独完成;
    2. 调试程序要记录调试过程中出现的问题及解决办法,并写入到实验总结和心得;
    3. 完成实验后直接在题目后面按要求给出本实验的实验报告。
  3. 实验设备、环境

奔腾以上计算机,装有Myeclipse 6.0以上。

  1. 实验内容
    1. 使用前面所介绍的Servlet知识构建一个登陆应用,具体要求如下:
    1. 创建一个登陆应用,如下图所示。
    2. 用户输入登陆信息,如用户名和密码,
    3. LoginServlet调用UserBean完成身份验证(编写UserService,UserDao类,完成数据的访问),如果身份验证成功,跳转到成功页面,否则,跳转到失败页面。

`

把程序运行界面截图贴在这里,源码贴到附录部分

    1. 使用Servlet和四层结构知识,改进实验四中题4.2的用户信息管理系统,使其具有更好的软件结构,以及提升可读性和可扩展性。

把程序运行界面截图贴在这里,源码贴到附录部分

  1. 实验总结与心得请详细叙述你通过该实验掌握的知识点和心得,比如对错误的解决办法等)

问题:

1.java.lang.IllegalArgumentException: 名为 [LoginServlet]和 [com.example.controller.LoginServlet] 的servlet不能映射为一个url模式(url-pattern) [/login]

有两个Servlet试图映射到相同的URL模式(/login),这是不允许的。以下是解决此问题的步骤:

后面重新检查了web.xml配置解决了问题

<servlet>

    <servlet-name>LoginServlet</servlet-name>

    <servlet-class>com.example.controller.LoginServlet</servlet-class>

</servlet>

<servlet-mapping>

    <servlet-name>LoginServlet</servlet-name>

    <url-pattern>/login</url-pattern>

</servlet-mapping>

   

      2. SQL异常处理:在与数据库交互时,我经常遇到SQLException。我学会了如何使用try-catch块来捕获异常,并在控制台输出错误信息。这不仅帮助我快速定位问题,还让我意识到在生产环境中需要更优雅的错误处理机制,比如记录日志或向用户显示友好的错误信息。

3.表单验证:在用户注册和登录过程中,我发现表单输入的有效性非常重要。我通过在JSP中使用required属性来确保用户输入的完整性。此外,我还学习了如何在服务层中进行更复杂的验证,比如检查用户名是否已存在。

4.调试技巧:在调试过程中,我使用了System.out.println和调试器来跟踪程序的执行流程。这让我能够清晰地看到每一步的输出,帮助我理解程序的运行状态。

  

心得:

表现层:学习了如何使用JSP页面来构建用户界面。通过JSP,我能够动态生成HTML内容,并与用户进行交互。理解了如何使用JSP表达式和脚本来处理用户输入和显示信息。

  

控制层:在UserServlet中,我实现了请求的处理逻辑。通过doPost和doGet方法,我能够根据不同的请求参数(如action)调用相应的服务层方法。这让我认识到控制层在MVC架构中的重要性,它负责协调表现层和服务层之间的交互。

服务层:在UserService中,我实现了用户注册、删除和验证等业务逻辑。通过将业务逻辑与控制层分离,我提高了代码的可维护性和可读性。这一层的设计让我意识到,良好的业务逻辑封装可以使得后续的功能扩展更加容易。

数据访问层:在UserDAO中,我学习了如何使用JDBC与数据库进行交互。通过封装数据库操作,我能够更好地管理数据访问逻辑,避免在控制层中直接处理SQL语句。这种分层设计使得代码更加模块化。

  1. 源码附录

4.1实验

DatabaseConnection.java

package com.example;

import java.sql.Connection;

import java.sql.DriverManager;

// 数据库连接类

public class DatabaseConnection {

    // 获取数据库连接的方法

    public static Connection getConnection() {

        Connection con = null; // 初始化连接对象

        try {

            // 加载MySQL JDBC驱动

            Class.forName("com.mysql.cj.jdbc.Driver");

            // 连接到数据库

            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/user_system", "root", "123456");

        } catch (Exception e) {

            e.printStackTrace(); // 打印异常信息

        }

        return con; // 返回连接对象

    }

}

package com.example;

import java.io.IOException;

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

@WebServlet("/LoginServlet") // 映射URL到此Servlet

public class LoginServlet extends HttpServlet {

 private static final long serialVersionUID = 1L;

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

        // 获取用户输入的用户名和密码

        String username = request.getParameter("username");

        String password = request.getParameter("password");

        // 创建UserService实例以验证用户

        UserService userService = new UserService();

        boolean isValidUser = userService.validateUser(username, password);

        // 根据验证结果重定向到相应的页面

        if (isValidUser) {

            response.sendRedirect("success.jsp"); // 验证成功,跳转到成功页面

        } else {

            response.sendRedirect("failure.jsp"); // 验证失败,跳转到失败页面

        }

    }

}

package com.example;

// 用户数据模型类

public class UserBean {

    private String username; // 用户名

    private String password; // 密码

    // 获取用户名

    public String getUsername() {

        return username;

    }

    // 设置用户名

    public void setUsername(String username) {

        this.username = username;

    }

    // 获取密码

    public String getPassword() {

        return password;

    }

    // 设置密码

    public void setPassword(String password) {

        this.password = password;

    }

}

package com.example;

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

// 数据访问类,用于与数据库交互

public class UserDao {

    // 验证用户凭据的方法

    public boolean validate(String username, String password) {

        boolean status = false; // 默认状态为无效用户

        try {

            // 获取数据库连接

            Connection con = DatabaseConnection.getConnection(); // 假设您有一个DatabaseConnection类

            // 准备SQL查询

            PreparedStatement ps = con.prepareStatement("SELECT * FROM users WHERE username=? AND password=?");

            ps.setString(1, username); // 设置用户名参数

            ps.setString(2, password); // 设置密码参数

            ResultSet rs = ps.executeQuery(); // 执行查询

            status = rs.next(); // 如果找到记录,则用户有效

        } catch (Exception e) {

            e.printStackTrace(); // 打印异常信息

        }

        return status; // 返回用户验证状态

    }

}

package com.example;

// 用户服务类,处理用户相关的业务逻辑

public class UserService {

    private UserDao userDao = new UserDao(); // 创建UserDao实例

    // 验证用户的方法

    public boolean validateUser(String username, String password) {

        return userDao.validate(username, password); // 调用UserDao的验证方法

    }

}

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

    <title>Failure</title>

</head>

<body>

    <h2>登录失败</h2>

    <!-- 登录失败后的提示 -->

</body>

</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

    <title>Login</title>

</head>

<body>

    <h2>登录</h2>

    <!-- 表单提交到LoginServlet -->

    <form action="LoginServlet" method="post">

        用户名: <input type="text" name="username" required /><br />

        密码: <input type="password" name="password" required /><br />

        <input type="submit" value="登录" />

    </form>

</body>

</html>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

    <title>Success</title>

</head>

<body>

    <h2>登录成功</h2>

    <!-- 登录成功后的提示 -->

</body>

</html>

4.2实验

editUser

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"

         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee

         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

         version="3.1">

    <servlet>

        <servlet-name>UserServlet</servlet-name>

        <servlet-class>com.example.controller.UserServlet</servlet-class> <!-- 确保包名正确 -->

    </servlet>

    <servlet-mapping>

        <servlet-name>UserServlet</servlet-name>

        <url-pattern>/user</url-pattern>

    </servlet-mapping>

    <servlet>

        <servlet-name>LoginServlet</servlet-name>

        <servlet-class>com.example.controller.LoginServlet</servlet-class>

    </servlet>

    <servlet-mapping>

        <servlet-name>LoginServlet</servlet-name>

        <url-pattern>/login</url-pattern>

    </servlet-mapping>

    

    

</web-app>

Index.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>用户信息管理系统</title>

</head>

<body>

    <h1>欢迎来到用户信息管理系统</h1>

    <a href="login.jsp">登录</a> | <a href="register.jsp">注册</a>

</body>

</html>

Login.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>用户登录</title>

</head>

<body>

    <h1>用户登录</h1>

    <form action="login" method="post">

        用户名: <input type="text" name="username" required><br>

        密码: <input type="password" name="password" required><br>

        <input type="submit" value="登录">

    </form>

    <%

        String errorMessage = (String) request.getAttribute("errorMessage");

        if (errorMessage != null) {

            out.println("<p>" + errorMessage + "</p>");

        }

    %>

</body>

</html>

Register.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<html>

<head>

    <title>注册</title>

</head>

<body>

    <h1>用户注册</h1>

    <form action="user" method="post">

        <input type="hidden" name="action" value="register">

        用户名: <input type="text" name="username" required><br>

        密码: <input type="password" name="password" required><br>

        年龄: <input type="number" name="age" required><br>

        <input type="submit" value="注册">

    </form>

</body>

</html>

userList.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

<%@ page import="com.example.entity.User" %>

<%@ page import="com.example.service.UserService" %>

<%@ page import="java.util.List" %>

<%@ page import="java.sql.SQLException" %>

<html>

<head>

    <title>用户列表</title>

    <script>

        function confirmDelete() {

            return confirm("您确定要删除该用户吗?");

        }

    </script>

</head>

<body>

    <h1>用户列表</h1>

    <%

        String deleteMessage = request.getParameter("message");

        if (deleteMessage != null) {

    %>

        <p style="color: green;"><%= deleteMessage %></p>

    <%

        }

    %>

    <h2>通过 JavaBean 删除用户</h2>

    <form action="user" method="post" οnsubmit="return confirmDelete();">

        <input type="hidden" name="action" value="delete">

        <label for="usernameToDelete">用户名:</label>

        <input type="text" id="usernameToDelete" name="username" required>

        <input type="submit" value="删除用户">

    </form>

    <table border="1">

        <tr>

            <th>用户名</th>

            <th>年龄</th>

            <th>操作</th>

        </tr>

        <%

            UserService userService = new UserService();

            try {

                List<User> users = userService.getAllUsers();

                for (User user : users) {

        %>

        <tr>

            <td><%= user.getUsername() %></td>

            <td><%= user.getAge() %></td>

            <td>

                <form action="user" method="post" style="display:inline;">

                    <input type="hidden" name="action" value="edit">

                    <input type="hidden" name="username" value="<%= user.getUsername() %>">

                    <input type="submit" value="编辑">

                </form>

            </td>

        </tr>

        <%

                }

            } catch (SQLException e) {

                e.printStackTrace();

                out.println("<tr><td colspan='3'>无法获取用户列表: " + e.getMessage() + "</td></tr>");

            }

        %>

    </table>

    <a href="login.jsp">注销</a>

</body>

</html>

package com.example.controller;

import javax.servlet.ServletException;

import javax.servlet.http.*;

import com.example.service.UserService;

import java.io.IOException;

import java.sql.SQLException;

public class LoginServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private UserService userService = new UserService();

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

        String username = request.getParameter("username");

        String password = request.getParameter("password");

        try {

            if (userService.validateUser(username, password)) {

                request.getSession().setAttribute("user", username);

                response.sendRedirect("userList.jsp");

            } else {

                request.setAttribute("errorMessage", "用户名或密码错误");

                request.getRequestDispatcher("login.jsp").forward(request, response);

            }

        } catch (SQLException e) {

            e.printStackTrace();

            response.sendRedirect("login.jsp?message=登录失败: " + e.getMessage());

        }

    }

}

//控制层(Controller Layer):负责接收用户请求并调用相应的服务层逻辑。在你的项目中,UserServlet类就是控制层的实现,它处理用户的请求,如注册、删除和更新用户信息。

package com.example.controller;

import java.io.IOException;

import java.sql.SQLException;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.net.URLEncoder;

import com.example.entity.User;

import com.example.service.UserService;

public class UserServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    private UserService userService = new UserService();

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

        String action = request.getParameter("action");

        String username = request.getParameter("username");

        try {

            if ("register".equals(action)) {

                String password = request.getParameter("password");

                int age = Integer.parseInt(request.getParameter("age"));

                User user = new User(username, password, age);

                userService.registerUser(user);//调用userService中的registerUser方法

                response.sendRedirect("login.jsp");

            } else if ("delete".equals(action)) {

                userService.deleteUser(username);

                response.sendRedirect("userList.jsp?message=" + URLEncoder.encode("用户 " + username + " 已成功删除。", "UTF-8"));

            } else if ("edit".equals(action)) {

                User user = userService.getUser(username);

                request.setAttribute("user", user);

                request.getRequestDispatcher("editUser.jsp").forward(request, response);

            } else if ("save".equals(action)) {

                String password = request.getParameter("password");

                int age = Integer.parseInt(request.getParameter("age"));

                User user = new User(username, password, age);

                userService.updateUser(user);

                response.sendRedirect("userList.jsp?message=用户 " + username + " 信息已成功保存。");

            }

        } catch (SQLException e) {

            e.printStackTrace();

            response.sendRedirect("userList.jsp?message=操作失败: " + e.getMessage());

        }

    }

}

package com.example.dao;

// UserDAO.java

import java.sql.*;

import java.util.ArrayList;

import java.util.List;

import com.example.entity.User;

public class UserDAO {

    private String jdbcURL = "jdbc:mysql://localhost:3306/user_management";

    private String jdbcUsername = "root";

    private String jdbcPassword = "123456";

    

    public void registerUser(User user) throws SQLException {

        String sql = "INSERT INTO users (username, password, age) VALUES (?, ?, ?)";

        try (Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);

             PreparedStatement ps = connection.prepareStatement(sql)) {

            ps.setString(1, user.getUsername());

            ps.setString(2, user.getPassword());

            ps.setInt(3, user.getAge());

            ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

            throw e; // 重新抛出异常以便上层处理

        }

    }

    

    public List<User> getAllUsers() throws SQLException {

        List<User> users = new ArrayList<>();

        try (Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);

             Statement stmt = connection.createStatement();

             ResultSet rs = stmt.executeQuery("SELECT * FROM users")) {

            while (rs.next()) {

                String username = rs.getString("username");

                String password = rs.getString("password");

                int age = rs.getInt("age");

                users.add(new User(username, password, age));

            }

        } catch (SQLException e) {

            e.printStackTrace();

            throw e; // 重新抛出异常以便上层处理

        }

        return users;

    }

    public void deleteUser(String username) throws SQLException {

        // 使用 try-with-resources 确保连接和语句被正确关闭

        try (Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);

             PreparedStatement statement = connection.prepareStatement("DELETE FROM users WHERE username=?")) {

            statement.setString(1, username);

            statement.executeUpdate();

        } catch (SQLException e) {

            // 记录异常信息

            e.printStackTrace();

            throw e; // 重新抛出异常以便上层处理

        }

    }

    public User getUser(String username) throws SQLException {

        User user = null;

        try (Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);

             PreparedStatement ps = connection.prepareStatement("SELECT * FROM users WHERE username=?")) {

            ps.setString(1, username);

            ResultSet rs = ps.executeQuery();

            if (rs.next()) {

                String password = rs.getString("password");

                int age = rs.getInt("age");

                user = new User(username, password, age);

            }

        } catch (SQLException e) {

            e.printStackTrace();

            throw e; // 重新抛出异常以便上层处理

        }

        return user;

    }

    public void updateUser(User user) throws SQLException {

        try (Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);

             PreparedStatement ps = connection.prepareStatement("UPDATE users SET password=?, age=? WHERE username=?")) {

            ps.setString(1, user.getPassword());

            ps.setInt(2, user.getAge());

            ps.setString(3, user.getUsername());

            ps.executeUpdate();

        } catch (SQLException e) {

            e.printStackTrace();

            throw e; // 重新抛出异常以便上层处理

        }

    }

    public boolean validateUser(String username, String password) throws SQLException {

        try (Connection connection = DriverManager.getConnection(jdbcURL, jdbcUsername, jdbcPassword);

             PreparedStatement ps = connection.prepareStatement("SELECT * FROM users WHERE username=? AND password=?")) {

            ps.setString(1, username);

            ps.setString(2, password);

            ResultSet rs = ps.executeQuery();

            return rs.next();

        } catch (SQLException e) {

            e.printStackTrace();

            throw e; // 重新抛出异常以便上层处理

        }

    }

}

//数据访问层: 负责与数据库进行交互,执行SQL查询和更新操作。UserDAO类则实现了这一层的功能,通过JDBC与数据库进行交互。

package com.example.entity;

public class User {

    private String username;

    private String password;

    private int age;

    public User(String username, String password, int age) {

        this.username = username;

        this.password = password;

        this.age = age;

    }

    // Getters and Setters

    public String getUsername() {

        return username;

    }

    public void setUsername(String username) {

        this.username = username;

    }

    public String getPassword() {

        return password;

    }

    public void setPassword(String password) {

        this.password = password;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

}

package com.example.service;

import com.example.dao.UserDAO;

import com.example.entity.User;

import java.sql.SQLException;

import java.util.List;

public class UserService {

    private UserDAO userDAO = new UserDAO();

    

    public void registerUser(User user) throws SQLException {

        userDAO.registerUser(user); // 调用 UserDAO 的 registerUser 方法

    }

    

    public List<User> getAllUsers() throws SQLException {

        return userDAO.getAllUsers();

    }

    public void deleteUser(String username) throws SQLException {

        try {

userDAO.deleteUser(username);

} catch (Exception e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

    }

    public User getUser(String username) throws SQLException {

        try {

return userDAO.getUser(username);

} catch (Exception e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

return null;

    }

    public void updateUser(User user) throws SQLException {

        try {

userDAO.updateUser(user);

} catch (Exception e) {

// TODO 自动生成的 catch 块

e.printStackTrace();

}

    }

    public boolean validateUser(String username, String password) throws SQLException {

        return userDAO.validateUser(username, password);

    }

}

//服务层:负责业务逻辑的处理。你的UserService类实现了用户相关的业务逻辑,例如注册、删除和验证用户。

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

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

相关文章

汽车保养系统+ssm

摘 要 由于APP软件在开发以及运营上面所需成本较高&#xff0c;而用户手机需要安装各种APP软件&#xff0c;因此占用用户过多的手机存储空间&#xff0c;导致用户手机运行缓慢&#xff0c;体验度比较差&#xff0c;进而导致用户会卸载非必要的APP&#xff0c;倒逼管理者必须改…

仿iOS日历、飞书日历、Google日历的日模式

仿iOS日历、飞书日历、Google日历的日模式&#xff0c;24H内事件可自由上下拖动、自由拉伸。 以下是效果图&#xff1a; 具体实现比较简单&#xff0c;代码如下&#xff1a; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color;…

网易云信荣获“HarmonyOS NEXT SDK星河奖”

近日&#xff0c;鸿蒙生态伙伴 SDK 开发者论坛在北京举行。 网易云信凭借在融合通信领域的技术创新和鸿蒙生态贡献&#xff0c;荣获鸿蒙生态“HarmonyOS NEXT SDK星河奖”。 会上&#xff0c;华为鸿蒙正式推出 SDK 生态繁荣伙伴支持计划&#xff0c;旨在为 SDK 领域伙伴和开发…

Electromagnetic Tracking Smart Car based on STM32F401 or GD32F450ZGT6

Electromagnetic Smart Car1 基于梁山派的电磁循迹智能车的主控芯片来自立创梁山派板载的国产兆易创新GD32F450ZGT6&#xff0c;整车采用模块化开发&#xff0c;由电源模块、L298N驱动模块、电磁循迹模块、梁山派、调试模块和显示模块组成。 嵌入式软件开发环境是&#xff1a;K…

Windows下Docker Desktop+k8s安装和部署程序

Windows下Docker Desktopk8s安装和部署程序 一、安装Docker DesktopKubernetes 1.需要安装windows版的docker 安装 Docker Desktop&#xff0c;启用Hyper-V、虚拟机平台和容器 https://www.docker.com/get-started/ 2.启用Kubernetes 打开Docker-Desktop&#xff0c;启用…

网络原理03

回顾 应用层&#xff1a;应用程序&#xff0c;数据具体如何使用 传输层&#xff1a;关注起点和终点 网络层&#xff1a;关注路径规划 数据链路层&#xff1a;关注相邻节点的转发 物理层&#xff1a;硬件设备 应用层 应用程序 在应用层&#xff0c;很多时候&#xff0c;…

HTTP 状态码大全

常见状态码 200 OK # 客户端请求成功 400 Bad Request # 客户端请求有语法错误 不能被服务器所理解 401 Unauthorized # 请求未经授权 这个状态代码必须和WWW- Authenticate 报头域一起使用 403 Forbidden # 服务器收到请求但是拒绝提供服务 404 Not Found # 请求资源不存…

Ajax--实现检测用户名是否存在功能

目录 &#xff08;一&#xff09;什么是Ajax &#xff08;二&#xff09;同步交互与异步交互 &#xff08;三&#xff09;AJAX常见应用情景 &#xff08;四&#xff09;AJAX的优缺点 &#xff08;五&#xff09;使用jQuery实现AJAX 1.使用JQuery中的ajax方法实现步骤&#xf…

unique_ptr自定义删除器,_Compressed_pair利用偏特化减少存储的一些设计思路

主要是利用偏特化&#xff0c; 如果自定义删除器是空类&#xff08;没有成员变量&#xff0c;可以有成员函数&#xff09;&#xff1a; _Compressed_pair会继承删除器&#xff08;删除器作为基类&#xff09;&#xff0c;但_Compressed_pair里不保存删除器对象&#xff0c;只…

AGCRN论文解读

一、创新点 传统GCN只能基于静态预定义图建模全局共享模式&#xff0c;而AGCRN通过两种GCN的增强模块&#xff08;NAPL、DAGG&#xff09;实现了更精细的节点特性学习和图结构生成。 1 节点自适应参数学习模块&#xff08;NAPL&#xff09; 传统GCN通过共享参数&#xff08;权重…

使用观测云排查数据库死锁故障

故障发现 核心应用 pod 发生重启&#xff0c;同时接收到对应使用者反馈业务问题&#xff0c;开始排查。 观测云排查现场 1、根据重启应用信息&#xff0c;查询 APM 执行数据库 update 操作大量报错&#xff0c;执行时间在 5min 以上。 分析 APM 链路异常&#xff0c;发现是触…

UNIX数据恢复—UNIX系统常见故障问题和数据恢复方案

UNIX系统常见故障表现&#xff1a; 1、存储结构出错&#xff1b; 2、数据删除&#xff1b; 3、文件系统格式化&#xff1b; 4、其他原因数据丢失。 UNIX系统常见故障解决方案&#xff1a; 1、检测UNIX系统故障涉及的设备是否存在硬件故障&#xff0c;如果存在硬件故障&#xf…

npm或yarn包配置地址源

三种方法 1.配置.npmrc 文件 在更目录新增.npmrc文件 然后写入需要访问的包的地址 2.直接yarn.lock文件里面修改地址 简单粗暴 3.yarn install 的时候添加参数 设置包的仓库地址 yarn config set registry https://registry.yarnpkg.com 安装&#xff1a;yarn install 注意…

opencv——图片矫正

图像矫正 图像矫正的原理是透视变换&#xff0c;下面来介绍一下透视变换的概念。 听名字有点熟&#xff0c;我们在图像旋转里接触过仿射变换&#xff0c;知道仿射变换是把一个二维坐标系转换到另一个二维坐标系的过程&#xff0c;转换过程坐标点的相对位置和属性不发生变换&a…

【学习】企业通过CMMI认证,还需要申请CSMM资质吗

​ 企业通过CMMI认证之后&#xff0c;是否还有必要申请CSMM资质&#xff1f;这是一个值得软件企业深思的问题。虽然CMMI和CSMM都在组织的软件过程改进和认证方面发挥着重要作用&#xff0c;但它们各自拥有自己的特点在。企业需要根据自身发展需求来选择适合的认证方式。首先我…

OpenHarmony-3.HDF input子系统(5)

HDF input 子系统OpenHarmony-4.0-Release 1.Input 概述 输入设备是用户与计算机系统进行人机交互的主要装置之一&#xff0c;是用户与计算机或者其他设备通信的桥梁。常见的输入设备有键盘、鼠标、游戏杆、触摸屏等。本文档将介绍基于 HDF_Input 模型的触摸屏器件 IC 为 GT91…

BurpSuite之移动端流量抓包

学习视频来自B站UP主泷羽sec&#xff0c;如涉及侵权马上删除文章。 笔记只是方便学习&#xff0c;以下内容只涉及学习内容&#xff0c;切莫逾越法律红线。 安全见闻&#xff0c;包含了各种网络安全&#xff0c;网络技术&#xff0c;旨在明白自己的渺小&#xff0c;知识的广博&a…

Any2Policy: Learning Visuomotor Policy with Any-Modality(类似AnyGPT)

发表时间&#xff1a;NeurIPS 2024 论文链接&#xff1a;https://readpaper.com/pdf-annotate/note?pdfId2598959255168534016&noteId2598960522854466816 作者单位&#xff1a;Midea Group Motivation&#xff1a;Current robotic learning methodologies often focus…

QTreeView 与 QTreeWidget 例子

1. 先举个例子 1班有3个学生&#xff1a;张三、李四、王五 4个学生属性&#xff1a;语文 数学 英语 性别。 语文 数学 英语使用QDoubleSpinBox* 编辑&#xff0c;范围为0到100,1位小数 性别使用QComboBox* 编辑&#xff0c;选项为&#xff1a;男、女 实现效果&#xff1a; 2…

计算机视觉与医学的结合:推动医学领域研究的新机遇

目录 引言医学领域面临的发文难题计算机视觉与医学的结合&#xff1a;发展趋势计算机视觉结合医学的研究方向高区位参考文章结语 引言 计算机视觉&#xff08;Computer Vision, CV&#xff09;技术作为人工智能的重要分支&#xff0c;已经在多个领域取得了显著的应用成果&…