Java24:会话管理 过滤器 监听器


一 会话管理


 1.cookie
  是一种客户端会话技术,cookie由服务端产生,它是服务器存放在浏览器的一小份数据,浏览器
  以后每次访问服务器的时候都会将这小份的数据带到服务器去。
    //创建cookie对象
        Cookie cookie1=new Cookie("keya","valuea");
        Cookie cookie2=new Cookie("keyb","valueb");
        //设置cookie的时效性,单位为秒
        cookie1.setMaxAge(10);
        //设置访问路径
        cookie1.setPath("/servlet1");
        //把cookie对象返回客户端
        resp.addCookie(cookie1);
        resp.addCookie(cookie2);
   2. session
    HttpSession 是一种保留更多信息在服务端的一种技术,服务器会为每个客户端开辟一块内存空     间,即session对象,
    客户端在发送请求时,都可以使用自己的session,这样服务端就可以通过session来记录
    某个客户端的状态了
      服务器在为客户端创建session时,会同时将session对象的id即,JSESSIONID以cookie的
      形式放入响应对象
      后端在创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID
      客户端下一次请求时携带JSESSINID,后端收到后,根据JESSINID找到对应的session对象
      通过该机制,服务端通过session 就可以存储一些专门针对某个客户端的信息了。
      session 也是域对象
     
        //创建session对象
        HttpSession session = req.getSession();
        //设置session属性
        session.setAttribute("name","zhanasan");
        //获取sessionid
        String id = session.getId();
        System.out.println(id);
        //判断session是否新建
        System.out.println(session.isNew());
 
    3.ServletContext
      应用域对象是ServletContext,传递数据范围是本应用之内,可以跨多个会话
     创建ServletContext对象
     getServletContext()
     三大域使用场景:
     请求转发时,请求域可以传递数据:请求域内一般存放本次请求业务相关的数据,如查询到的所有部门信息
     同一个会话内,不用请求转发,会话域可以传递数据,会话域内一般放本次会话的客户端有关的数据,如当前客户端登录的用户
     同一个app内,不同的客户端应用域可以传递数据,应用域内一般放本程序应用有关的数据 ,如Spring框架的IOC容器

4.实例:获取三大域属性 :ServletA 设置三个域的属性,ServletB获取三个域的属性,通过变更访问路径验证三个域的范围
     

@WebServlet("/servletA")
public class ServletA extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      // 请求域
        req.setAttribute("request","requestvalue");
        // 会话域
        HttpSession session = req.getSession();
        String id = session.getId();
        System.out.println("session:"+id);

        session.setAttribute("session","sessionvalue");
        //应用域
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("application","applicationvalue");

        //请求转发
        req.getRequestDispatcher("/servletB").forward(req,resp);


    }
}

      

@WebServlet("/servletB")
public class ServletB extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      // 获取请求域对象属性值
       String  requestvalue = (String) req.getAttribute("request");
        System.out.println("request:"+requestvalue);
        // 获取会话域属性值
        HttpSession session = req.getSession();
        String id = session.getId();
        System.out.println("session:"+id);
        String sessionvalue = (String) session.getAttribute("session");
        System.out.println("session:"+sessionvalue);
        //应用域
        ServletContext servletContext = this.getServletContext();
        servletContext.setAttribute("application:","applicationvalue");
        String applicationvalue = (String) servletContext.getAttribute("application");
        System.out.println("application:"+applicationvalue);


    }
}

二:过滤器

1.定义

过滤器 是JAVAEE技术规范之一,作用目标资源的请求进行过滤的一套技术规范,是java web项目中最为实用的技术之一。

2.过滤器位置

3.过滤器原理及实现

 》Filter接口定义了过滤器的开发规范,所有的过滤器都要实现该接口

》Filter的工作位置是项目中所有目标资源之前,容器在创建HttpServletRequest和HttpServletResponse对象后,会先调用Filter的doFilter方法

》Filter的doFilter方法可以控制请求是否继续,如果放行,则请求继续,如果拒绝,则请求到此为止,由过滤器本身做出响应

》Filter 不仅可以对请求做出过滤,也可以在目标资源做出响应前,对响应再次进行处理

》过滤器实现过滤需在web.xml 配置过滤资源路径或者通过注解实现(@WebFilter)

》web.xml配置方式:

<filter>
    <filter-name>filter1</filter-name>

    <filter-class>com.cn.filter.Filter1</filter-class>
</filter>

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>

 4.过滤器实现访问资源耗时统计

@WebFilter("/*")
public class FilterTest implements Filter {
    private SimpleDateFormat simpleDateFormat= new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //请求父转子,获取请求资源
        HttpServletRequest httpServletRequest= (HttpServletRequest) servletRequest;
        HttpServletResponse httpServletResponse= (HttpServletResponse) servletResponse;
        StringBuffer requestURL = httpServletRequest.getRequestURL();
        String format = simpleDateFormat.format(new Date());
        String  info="在"+format+"访问资源"+requestURL;
        System.out.println(info);
        long t1 = System.currentTimeMillis();
        //放行过滤器
        filterChain.doFilter(servletRequest,servletResponse);
        //统计访问资源耗时
        long t2 = System.currentTimeMillis();
        System.out.println(info+"共耗时"+(t2-t1)+"毫秒");
    }
}
@WebServlet("/servlet1")
public class MyServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet。。。");
        resp.getWriter().write("hello");
    }
}

5.过滤器生命周期

阶段            对应方法                                            执行时机       执行次数

创建对象    构造器                                                web应用启用     1

初始化方法 void init(FilterConfig filterConfig)  构造完毕            1

过滤请求    void doFilter(三个参数)                      每次请求           多次

销毁          defalut void destroy()                       weby 应用关闭     1

6.过滤器链执行顺序 

一个web项目中 ,可以同时定义多个过滤器,多个过滤器对同一个资源过滤时,工作位置有先后,整体形成一个工作链,称之为过滤器链

》过滤器链中的过滤器顺序由filter-mapping顺序决定

》每个过滤器过滤的范围不同,针对同一个资源来说,过滤器链中的过滤器个数可能是不同的

》如果某个Filter是使用ServletName进行匹配规则的配置,那么这个Filter执行的优先级要更低

过滤器执行顺序实现

三个过滤器

public class Filter1 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("dofilter1 before invoke");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("dofilter1 after invoke");
    }
}
public class Filter2 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("dofilter2 before invoke");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("dofilter2 after invoke");
    }
}
public class Filter3 implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("dofilter3 before invoke");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("dofilter3 after invoke");
    }
}
访问资源
@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet1");
        resp.getWriter().write("good!");
    }
}

过滤路径配置:(如果使用注解,则按照过滤器类名排序)

<filter>
    <filter-name>filter1</filter-name>

    <filter-class>com.cn.filter.Filter1</filter-class>
</filter>

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>


<filter>
    <filter-name>filter2</filter-name>

    <filter-class>com.cn.filter.Filter2</filter-class>
</filter>

<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


<filter>
    <filter-name>filter3</filter-name>

    <filter-class>com.cn.filter.Filter3</filter-class>
</filter>

<filter-mapping>
    <filter-name>filter3</filter-name>
    <url-pattern>/*</url-pattern>

</filter-mapping>

7.过滤器实现登录控制 :实现浏览器在不登录的情况下不能直接访问资源:ScheduleController 和loginsucess.html

ScheduleController代码:

@WebServlet("/schedule/*")
public class ScheduleController extends BaseController{

    protected void add(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("add");
    }
}

loginsucess.html代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
<h1>登录成功!请浏览你的日程吧!</h1>

</body>
</html>
SysUserController 修改后的代码
@WebServlet("/sysuser/*")
public class SysUserController extends BaseController {
    private SysUserService userservice = new SysUserServiceImpl();
    protected void login(HttpServletRequest req, HttpServletResponse resp) throws Exception {
         //1获取请求参数

        String username = req.getParameter("username");
        String userPwd = req.getParameter("pwd");
        //调用服务层处理
        SysUser sysuer = userservice.login(username);

        if(null==sysuer){
           resp.sendRedirect("/loginusernameerror.html");
       }else if( !userPwd.equals(sysuer.getUserPwd())){
           resp.sendRedirect("/loginpassworderror.html");
       }else{
            //登录成功后,把用户信息存入session域
            HttpSession session = req.getSession();
            session.setAttribute("sysuer",sysuer);
           resp.sendRedirect("/loginsucess.html");
       }
       }


    }
LoginFilter过滤器代码:

@WebFilter(urlPatterns = {"/schedule/*","/loginsucess.html"})
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     HttpServletRequest httpservletRequest= (HttpServletRequest) servletRequest;
     HttpServletResponse httpservletRespone = (HttpServletResponse) servletResponse;
        HttpSession session = httpservletRequest.getSession();
        Object sysuer = session.getAttribute("sysuer");
        if(sysuer==null){
            //未登录,直接跳转登录界面
            httpservletRespone.sendRedirect("/login.html");
        }else{
            //登录成功,直接放行
            filterChain.doFilter(servletRequest,servletResponse);
        }


    }
}

三.监听器


1. 定义:

专门用于对域对象身上发生的事件或状态改变进行监听和相应处理的对象
  
 》监听器时GOF设计模式中,观察者模式的典型案例
 》观察者模式:当被观察的对象发生某些改变时,观察者自动采取对应的行动的一种设计模式
 》监听器使用的感受类似JS中的事件,被观察的对象发生某些情况时,自动触发代码的执行
 》监听器并不监听web项目的所有组件,仅仅是对三大域对象做相关的事件监听
 
 2.监听器分类

 application域监听器:ServletContextListener, ServletContextAttributeListener
 session域监听器:HttpSessionListener , HttpSessionAttributeListener
 rquest域监听器:ServletRequestListener,ServletRequestAttributeListener

3.实例

servlet代码:

@WebServlet("/servlet1")
public class Servlet1 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext ServletContext = getServletContext();
        ServletContext.setAttribute("keya","keyavalue");
        HttpSession session = req.getSession();
        session.setAttribute("k1","v1");

    }
}
@WebServlet("/servlet2")
public class Servlet2 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext ServletContext = getServletContext();
        ServletContext.setAttribute("keya","keyaXXXX");
        HttpSession session = req.getSession();
        session.setAttribute("k1","v11");
    }
}
@WebServlet("/servlet3")
public class Servlet3 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext ServletContext = getServletContext();
        ServletContext.removeAttribute("keya");
        HttpSession session = req.getSession();
        session.removeAttribute("k1");
    }
}

监听器代码:

@WebListener
public class MyListener implements ServletContextListener, ServletContextAttributeListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println(sce.hashCode()+"初始化了");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        System.out.println(sce.hashCode()+"销毁了");
    }

    @Override
    public void attributeAdded(ServletContextAttributeEvent sce) {

        ServletContext servletContext = sce.getServletContext();
        String name = sce.getName();
        Object value = sce.getValue();
        System.out.println(sce.hashCode()+"新增属性"+name+"值为:"+value);

    }

    @Override
    public void attributeReplaced(ServletContextAttributeEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        String name = sce.getName();
        Object value = sce.getValue();
        Object newvalue = servletContext.getAttribute(name);

        System.out.println(sce.hashCode()+"修改属性"+name+"值为:"+value+"新值"+newvalue);
    }

    @Override
    public void attributeRemoved(ServletContextAttributeEvent sce) {
        ServletContext servletContext = sce.getServletContext();
        String name = sce.getName();
        servletContext.removeAttribute(name);
        System.out.println(sce.hashCode()+"删除属性"+name);
    }
}

四.Ajax

1.简介

Ajax=Asynchronous JavaScript and XML(异步的JavaScript和XML)
Ajax 不是新的编程语言,,而是一种使用现有标准的新方法
Ajax 最大的优点是在不重新加载整个界面的情况下,可以与服务器交换数据并更新部分网页内容
Ajax 不需要任何浏览器插件,但需要用户允许JavaScript在浏览器上执行
XMLHttpRequest只是实现Ajax的一种方式

2.实例:实现用户注册,用户名重复的提示功能,并使用json格式返回给前端

枚举类定义响应码和响应信息:ResultCodeEnum 
public enum ResultCodeEnum {
    SUCESS(200,"sucess"),
    USERNAME_ERROR(501,"username_error"),
    PASSWORD_ERROR(502,"password_error"),
    NOTLOGIN(503,"notlogin"),
    NAMEDUSED(505,"nameused");

    private Integer code;
    private String message;
   private ResultCodeEnum(Integer code,String message){
       this.code=code;
       this.message=message;
        }

    public Integer getCode() {
        return code;
    }

    public String getMessage() {
        return message;
    }
}
响应结果的实体类定义:Result<T> 

public class Result<T> {
    private Integer code;
    private String message;
    private  T data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public Result(){}

    protected  static <T> Result<T> build(T data){
    Result<T> result= new Result<T>();
    if(data!=null){
        result.setData(data);
    }
    return result;
    }
    public static <T> Result<T>build(T body,Integer code,String message){
        Result<T> result=build(body);
        result.setCode(code);
        result.setMessage(message);
        return result;

    }
    public static <T> Result<T> build(T body , ResultCodeEnum resultCodeEnum){
        Result<T> result=build(body);
        result.setCode(resultCodeEnum.getCode());
        result.setMessage(resultCodeEnum.getMessage());
        return result;
    }
  public  static <T> Result<T> ok(T data){
      Result<T> result=build(data);
      return build(data,ResultCodeEnum.SUCESS);

  }

}

 控制器新增方法:SysUserController

WebServlet("/sysuser/*")
public class SysUserController extends BaseController {
    protected void checkusernameused(HttpServletRequest req, HttpServletResponse resp) throws Exception {
        String username = req.getParameter("username");
        SysUser user = userservice.findByName(username);
        Result result=Result.ok(null);

        if(user!=null){
            result=Result.build(null, ResultCodeEnum.NAMEDUSED);
        }
        //把对象转换为json格式
        ObjectMapper objectMapper =new ObjectMapper();
        String info = objectMapper.writeValueAsString(result);
        //返回信息,设置格式为json
        resp.setContentType("application/json;charset=utf-8");
        resp.getWriter().write(info );

    }
}

前端register.html 修改的代码(红色部分为Ajax实现的部分)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>

 span{
    font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif;
    color: red;

 }

    </style>
    <script>
    //校验用户名
   function checkusername(){
    var reg=/^[a-zA-Z0-9]{6,10}$/
  var usernameobj= document.getElementById("user1")
 var uservalue=usernameobj.value
  var usercheck=reg.test(uservalue)
  var sp1= document.getElementById("sp1")
  if(!usercheck){
    sp1.innerText="用户名不正确"
    return false
  }
   //用户名登录正确,校验是否被占用
   //1.创建对象
  var request=  new XMLHttpRequest()

   //2.设置回调函数
       request.onreadystatechange=function (){
      if(request.readyState==4&&request.status==200){
       var info= JSON.parse(request.responseText)
          if(info.code==505){
              sp1.innerText="不可用"
          }
      }

       }
  // 3.设置访问路径
       request.open("get","/sysuser/checkusernameused?username="+uservalue)
  //4.发送访问
       request.send()
  sp1.innerText="OK"
 return true
      
   }
  //校验密码
   function checkpassword(){
  var reg=/^\d{6}$/
  var pwdobj= document.getElementById("pw1")
  var pwdvalue=pwdobj.value
  var pwdcheck=reg.test(pwdvalue)
  var sp2= document.getElementById("sp2")
  if(!pwdcheck){
    sp2.innerText="密码不正确"
    return false
  }
  sp2.innerText="OK"
  return true

   }
 //校验确认密码
 function checkconformpassword(){
  var reg=/^\d{6}$/
  var pwdobj2= document.getElementById("pw2")
  var pwdvalue2=pwdobj2.value
  var pwdcheck2=reg.test(pwdvalue2)
  var sp3= document.getElementById("sp3")
  if(!pwdcheck2){
    sp3.innerText="密码格式不正确"
    return false
  }

  //获取密码输入,并和确认密码比较是否相等
  var pwdobj= document.getElementById("pw1")
  var pwdvalue=pwdobj.value
  if(pwdvalue2!=pwdvalue){
    sp3.innerText="密码和确认密码不相等"
    return false
  }

  sp3.innerText="OK"
  return true

   }



//表单提交校验
 function checkregister(){
var flag1=checkpassword()
var flag2=checkpassword()
var flag3=checkconformpassword()
  return flag1&&flag2&&flag3

   }

    </script>
</head>
<body>
<h1 >登录管理系统</h1>
 
    <form action="/sysuser/register" method="get" οnsubmit="return checkregister()">
      <table cellspacing="0px"  >
    
    <tr>
      <td>用户名:</td>
      <td>
    <input type="text" name="username" id="user1"  οnblur="checkusername()">
    <span id="sp1"></span><br>
  </td>
  </tr>
  <tr>
    <td>密 码:</td>
    <td>
    <input type="password"name="userpwd" id="pw1" οnblur="checkpassword()">

    <span id="sp2"></span><br>
  </td>

  </tr>
  <tr>
    <td>确认密 码:</td>
    <td>
    <input type="password" id="pw2" οnblur="checkconformpassword()">

    <span id="sp3"></span><br>
  </td>

  </tr>
  <tr>
    <td colspan="2">
    <input type="submit" value="注册">
  
    <input  type="reset" value="重置">
    <button> <a  href="login.html">登录</a> </button>
   
  </td>
  </tr>

</table>
    </form>
</body>
</html>

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

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

相关文章

使用DPO微调大模型Qwen2详解

简介 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback&#xff0c;RLHF) 事实上已成为 GPT-4 或 Claude 等 LLM 训练的最后一步&#xff0c;它可以确保语言模型的输出符合人类在闲聊或安全性等方面的期望。但传统的RLHF比较复杂&#xff0c;且还需要奖励…

OSPF LSA头部详解

LSA概述 LSA是OSPF的本质 , 对于网工来说能否完成OSPF的排错就是基于OSPF的LSDB掌握程度 . 其中1/2类LAS是负责区域内部的 类似于设备的直连路由 . 加上对端的设备信息 3 类LSA是区域间的 指的是Area0和其他Area的区域间关系 , 设计多区域的初衷就是避免大型OSPF环境LSA太多…

AMD在行动:揭示应用程序跟踪和性能分析的力量

AMD in Action: Unveiling the Power of Application Tracing and Profiling — ROCm Blogs 导言 Rocprof是一款强大的工具&#xff0c;设计用于分析和优化基于AMD ROCm平台上运行的HIP程序的性能&#xff0c;帮助开发者找出并解决性能瓶颈。Rocprof提供了多种性能数据&#x…

生成树协议(思科)

#交换设备 生成树协议&#xff08;STP) 目的 1.理解生成树的原理 理解STP的选举过程 2.会配置STP 为什么只有交换机0的f0/1接口变成了阻塞状态&#xff1f; 在环形的交换网络中&#xff0c;如果所有的接口都通畅&#xff0c;会形成闭回路&#xff0c;造成网路风暴 一、STP…

【优选算法】字符串

一、相关编程题 1.1 最长公共前缀 题目链接 14. 最长公共前缀 - 力扣&#xff08;LeetCode&#xff09; 题目描述 算法原理 编写代码 // 解法一&#xff1a;两两比较 class Solution { public:string longestCommonPrefix(vector<string>& strs) {int k strs[0…

《QT实用小工具·七十》openssl+qt开发的P2P文件加密传输工具

1、概述 源码放在文章末尾 该项目实现了P2P的文件加密传输功能&#xff0c;具体包含如下功能&#xff1a; 1、 多文件多线程传输 2、rsaaes文件传输加密 3、秘钥随机生成 4、断点续传 5、跨域传输引导服务器 项目界面如下所示&#xff1a; 接收界面 发送界面 RSA秘钥生成…

CTF-PWN-kernel-UAF

文章目录 参考slub 分配器kmem_cache_cpukmem_cache_node[ ]冻结和解冻分配释放 fork绑核Kmalloc flag和slub隔离CISCN - 2017 - babydriver检查babtdriver_initstruct cdevalloc_chrdev_regioncdev_initownercdev_add_class_createdevice_create babyopenbabyreleasebabyreadb…

CleanMyMac2024最新免费电脑Mac系统优化工具

大家好&#xff0c;我是你们的好朋友——软件评测专家&#xff0c;同时也是一名技术博主。今天我要给大家种草一个超级实用的Mac优化工具——CleanMyMac&#xff01; 作为一个长期使用macOS的用户&#xff0c;我深知系统运行时间长了&#xff0c;缓存文件、日志、临时文件等都会…

数据库管理-第200期 身边的数据库从业者(20240610)

数据库管理200期 2024-06-10 数据库管理-第200期 身边的数据库从业者&#xff08;20240610&#xff09;首席-薛晓刚院长-施嘉伟邦德-王丁丁强哥-徐小强会长-吴洋灿神-熊灿灿所长-严少安探长-张震总结活动预告 数据库管理-第200期 身边的数据库从业者&#xff08;20240610&#…

**《Linux/Unix系统编程手册》读书笔记24章**

D 24章 进程的创建 425 24.1 fork()、exit()、wait()以及execve()的简介 425 . 系统调用fork()允许父进程创建子进程 . 库函数exit(status)终止进程&#xff0c;将进程占用的所有资源归还内核&#xff0c;交其进行再次分配。库函数exit()位于系统调用_exit()之上。在调用fo…

HTML开发的最主要的三种框架及Python实现

一、介绍 HTML本身是一种标记语言&#xff0c;用于构建网页的结构。然而&#xff0c;当谈到HTML开发框架时&#xff0c;通常指的是那些提供了额外的功能和工具&#xff0c;以帮助开发者更高效地构建网页和应用程序的框架。有三种流行的HTML开发框架&#xff1a; Bootstrap 简介…

基于JSP技术的网络视频播放器

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;IDEA/Eclipse、Navicat、Maven 系统展示 首页 管理员界面 用户界…

网络分析(ArcPy)

一.前言 GIS中的网络分析最重要的便是纠正拓扑关系&#xff0c;建立矫正好的网络数据集&#xff0c;再进行网络分析&#xff0c;一般大家都是鼠标在arcgis上点点点&#xff0c;今天说一下Arcpy来解决的方案&#xff0c;对python的要求并不高,具体api参数查询arcgis帮助文档即可…

渗透测试模拟实战(二)-BlueCMS平台

渗透测试 渗透测试是维护网络安全的重要组成部分&#xff0c;可以帮助组织识别并修复潜在的安全漏洞&#xff0c;减少被恶意攻击的风险。然而&#xff0c;进行渗透测试时必须遵守法律和道德规范&#xff0c;确保所有活动都在授权范围内进行。 环境部署&#xff1a; study2016、…

逆序队专题

逆序对的定义是&#xff0c;在一个数组中&#xff0c;对于下标 ( i ) 和 ( j )&#xff08;其中 ( i < j )&#xff09;&#xff0c;如果 ( a[i] > a[j] )&#xff0c;则称 ((a[i], a[j])) 为数组的一个逆序对。 换句话说&#xff0c;逆序对就是在数组中前面的元素大于后…

分布式事务AP控制方案(上)

分布式事务控制方案 本篇文章给出一种要求高可用性&#xff08;AP思想&#xff09;的分布式事务控制方案 下篇新鲜出炉&#xff1a;点我查看 分布式事务控制方案1、业务背景2、本地消息表的设计3、对消息表的操作4、任务调度5、任务流程控制的抽象类6、课程发布的实现类7、总…

【C++】C++ QT实现Huffman编码器与解码器(源码+课程论文+文件)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

Vue17-条件渲染

一、使用v-show属性做条件渲染 控制元素的显示和隐藏 v-show里面也能是表达式&#xff0c;只要表达式的值是boolean就行。 或者 当时结构还在&#xff1a; 二、使用v-if属性做条件渲染 结构也不在了 三、示例 方式一&#xff1a; 方式二&#xff1a; 当元素有很高的切换频率&am…

机器学习实验----支持向量机(SVM)实现二分类

目录 一、介绍 (1)解释算法 (2)数据集解释 二、算法实现和代码介绍 1.超平面 2.分类判别模型 3.点到超平面的距离 4.margin 间隔 5.拉格朗日乘数法KKT不等式 (1)介绍 (2)对偶问题 (3)惩罚参数 (4)求解 6.核函数解决非线性问题 7.SMO (1)更新w (2)更新b 三、代…

我在得物的这两年

写在前面 这篇文章非常简单&#xff0c;和大家简单聊聊我在得物的这两年&#xff0c;也是从学生到社会人的这两年。 我是2022年的6月加入得物实习&#xff0c;负责某个业务中台的后端研发&#xff0c;那一年我21岁&#xff0c;还在读大三&#xff0c;还在迷茫未来是读研还是工…