Servlet的使用

一.Servelt简介

1.为什么需要servlet:因为前端三件套无法操控数据库,即与用户进行交互操作
2.servlet由服务器端调用和执行的(由tomcat解析和调用的),由java语言编写,本质就是java类
3.功能强大,可以完成几乎所有的网站功能,按照Servlet规范开发

二.手动开发Servelt

1.Servlet起到的作用:tomcat无法去操控数据库,前端请求的数据给到tomcat,tomcat再给到Servlet,Servlet再去操控数据库.
在这里插入图片描述
2.实现Servelet的接口

package com.hspedu.servlet;import javax.servlet.*;
import java.io.IOException;//开发一个Servlet需要实现Servelet接口
public class HelloServlet implements Servlet {/*** 1.初始化servlet*2.当创建helloServt实例时,会调用init方法* 3.该方法只会被调用一次
* */@Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println("init方法被调用");}
/*
* 此方法返回Servlet的配置*/@Overridepublic ServletConfig getServletConfig() {return null;}
/*
* 1.该方法处理浏览器的请求(包括get/post)
* 。当浏览器每次请求Servlet时,就会调用一次service
* 3.当tomcat调用该方法时,会把http请求的数据封装成ServletRequest接口的request对象
* 4.通过servletRequest对象,可以得到用户的数据
* 5.servletRespons对象可以用于返回数据给tomcat,tomcat再把数据封装成http响应格式再打回给浏览器
* 6.接口(Interface)在Java中是用来定义一组方法签名,而不能直接实例化对象。它们是一种抽象的概念,主要是为了提供一种规范或契约,让其他类去实现这些方法。然而,在Java中,像ServletRequest这样的接口并不是简单地定义了一个功能列表,而是由JDK提供的一个内置接口,专门用于处理HTTP Servlet请求。
当你在Servlet容器启动时,如Tomcat或Jetty,它会在后台自动创建并初始化一个实现了ServletRequest接口的对象,这个对象实际上是由底层网络协议栈创建的,然后映射到Java的应用程序层面上。当我们编写Servlet代码时,通过HttpServletRequest(ServletRequest的一个子接口)类型来引用这个对象,实际上是通过容器间接创建的。
因此,尽管我们不能直接创建一个实现了接口的对象,但在Servlet的世界里,由于框架的特殊处理,我们可以方便地使用这些接口来访问和操作请求信息。这允许我们在Servlet中对HTTP请求进行处理,就像它们是可以直接操作的对象一样。
* */@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {}/** 返回servlet的信息,使用较少*/@Overridepublic String getServletInfo() {return null;}
/*该方法是在servlet销毁时被调用,只会代用一次*/@Overridepublic void destroy() {}
}

3.配置xml文件,然后浏览器发起请求即可(http://locahost:8080/servlet/helloservlet)

<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"version="4.0"><!--web.xml主要用来配置该应用使用到的Servlet,在servlet中配置全类名,在servlet-mapping中配置访问路径1.servlet-name:给Servlet取名(程序员自己决定) 其实就是创建单例对象的对象名2.servlet-class:Servlet的类的全路径:tomcat在反射生成该Servlet需要使用3.url-pattern:这个就是该servlet访问的url的配置4.这时我们应该这样访问servlet http://locahost:8080/servlet/helloservlet5.url-pattern取名是程序员自己决定的-->
<servlet><servlet-name>HelloServlet</servlet-name><servlet-class>com.hspedu.servlet.HelloServlet</servlet-class>
</servlet><servlet-mapping><servlet-name>HelloServlet</servlet-name><url-pattern>/helloServlet</url-pattern></servlet-mapping>
</web-app>

4.tomcat处理浏览器http请求的原理
第一次请求:
①查询web.xml
②看请求的资源/helloServlet,在web.xml配置url-pattern
③如果找到url-pattern,就会得到servlet-name: HelloServlet (将xml解析成一个dom对象,然后得到上述的这些)
④Tomcat维护了一个大的HashMap<id,Servlet>,查询该HashMap看卡有没有这个Servlet的实例
⑤如果没有查询到该servletname对应的id,即没有这个Servlet实例
⑥根据servlet-name去得到servlet-calss:类的全路径
⑦使用反射技术将servlet实例化再调用init,并将实例放入到TomCat维护的HashMap表中

第二次请求:
到第④步与第一次请求一样
⑤如果查询到,就直接调用Servlet的service
⑥结果显示

三.Servelt的生命周期

1.Servlet容器(比如:tomcat)加载Servlet,加载完成后,Servlet容器会创建一个Servlet实例并调用init()方法<Servlet容器在下面的情况下会装载Servlet :
①Servlet容器(Tomcat)启动时自动装载某些servlet,实现这个需要在web.xml文件中添加1 1表示装载的顺序
②在Servlet容器启动后,浏览器首次向Servlet发送请求
③.Servlet重新装载时(比如tomcat进行redeploy[redploy会销毁所有的Servlet实例]),浏览器再向Servlet发送请求的第一次

2.处理浏览器请求阶段
①每收到一个http请求,服务器就会产生一个新的线程去处理
②创建一个用于封装HTTP请求消息的ServletRequest对象和一个代表HTTP响应消息的ServletResponse对象
③调用Servlet的service()方法并将请求和响应对象作为参数传递进去

3.终止阶段destory方法
当web应用被终止,或者Servlet容器终止运行,或者Servlet类重新装载时,会调用destory()方法.比如重启tomcat

四.get和set请求的分发处理

当浏览器发出一个请求时,tomcat处理请求,然后调用Servlet的service方法进行处理请求,下面是处理请求来得到请求的方式

@Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {System.out.println("service被访问");count++;System.out.println("count的值为:"+count);System.out.println("当前线程的id是:"+Thread.currentThread().getId());//1.从servletRequest对象来获取请求方式,而这个接口没有请求获取方式的方法//2.想到查到ServletRequest的子接口和子类有无实现获取请求方式的方法//向下转型HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;String method = httpServletRequest.getMethod();System.out.println("method="+method);}

五.Servlet使用的注意事项

1.Servlet是一个供其他Java程序调用的Java类,不能自己独立运行
2.对于浏览器多次的Servlet请求,通常情况下,服务器只会创建一个Servlet实例对象,也就是说Servlet实例对象一旦创建,它就会驻留在内存中,为后续的其他请求服务,直至web容器退出/redeploy该web应用 servlet实例的对象才会销毁
3.整个生命周期之内,init方法只被调用一次,而对每次的请求都会导致Servlet引擎去调用一次servlet的service方法
4.对于每次访问请求,Servlet引擎都会创建新的HttpServletRequest请求对象用于封装请求的信息和一个新的HttpServletResponse响应对象然后将两个对象作为参数传递给service方法
5.如果元素在配置文件中配置了元素,那么web应用程序启动时就会装载并且创建Servlet的实例对象,以及调用实例对象的init()方法.

最后附上整个流程图(非常重要)
在这里插入图片描述

六.Servlet注解方式配置

package com.hspedu.servlet.annotation;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;//*使用注解方式来破解
//  以下注释是WebServlet的源码部分
// Target({ElementType.TYPE})  表示注解可以用在类型上比如类,接口
//@Retention(RetentionPolicy.RUNTIME) 表示作用域,在运行时可用
//@Documented 在javadoc工具生成文档会有记录
//public @interface WebServlet {
//    String name() default "";
//
//    String[] value() default {};
//
//    String[] urlPatterns() default {}; 对应的是web.xml里面的<url-pattern></url-pattern>
//
//    int loadOnStartup() default -1;
//
//    WebInitParam[] initParams() default {};
//
//    boolean asyncSupported() default false;
//
//    String smallIcon() default "";
//
//    String largeIcon() default "";*/
//{"/ok1","/ok2"} 可以给OkServlet配置多个url-pattern,整个注解代替了web.xml的配置,浏览器访问OkServlet时,最后的域名就是/ok1或者/ok2
@WebServlet(urlPatterns = {"/ok1","/ok2"})
public class OkServlet extends HttpServlet {@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("注解方式的doPost()");}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {System.out.println("注解方式的doGet()");}
}

1.整个流程(TomCat)
①对src下的包进行扫描,如果发现某个类是@WebServlet,就说明该类是Servlet,读取后面的urlPatterns
②看请求的资源最后部分地址是否与urlPattern是否匹配,如果匹配,就得到被@webSevlet注解的类
③接下来与配置web.xml文件的方式的第四步开始一模一样

2.url-pattern的路径配置
①精准匹配@WebServlet(urlPatterns = {“/ok1”,“/ok2”}) 即精准的匹配到访问的每一个路径
②目录匹配@WebServlet(urlPatterns {/ok1/} 代表ok1目录的子级可以是任意的 如ok1/ok1
③扩展名匹配@WebServlet(urlPatterns = {"
.start"} 可以是任意的,前面不能够再加"/" 否则会报错
④任意匹配@WebServlet(urlPatterns {“/”,"/
“} 代表所有的请求都可以进行匹配
3.配置的注意事项和使用细节
①当Servlet配置了”/“,会覆盖掉tomcat的DefaultServlet,当其他的url-pattern都匹配不上时,都会走这个Servlet,这样其他的静态资源(如html,css,js,图片)都会被这个DefalutServlet拦截到,如果配置了”/" 静态资源就拦截不到了
②建议不要使用/*或者/ 尽量使用精确匹配,预防第①种情况

七.Http协议详解

1.请求头字段介绍:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
2.响应头字段介绍
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.Http响应的状态码说明
列举常用的:
①200 代表请求成功
②302 临时移动,请求的资源被刷新到新的url,客户端应继续持有原先的url
③304 请求的资源并没有修改过,服务端返回此状态码时不会返回任何的资源,客户端通常会缓存访问过的资源,即访问本地的资源
④404 服务器无法根据客户端的请求找到资源
⑤500 服务器内部错误无法完成请求

4.get请求有哪些(get请求传输的数据量较小,不能大于2kb)
①form 标签 method 指定为get
②a标签 点击跳转
③link 标签引入css(以get方式来获取资源)
④script标签引入js文件
⑤img标签引入图片
⑥iframe 引入html页面
⑦在浏览器地址栏输入地址后敲回车

5.post请求有哪些(传输的数据量较大,一般没有限制)
① from标签 method 指定为post

6.post和get请求的区别
①post请求会在浏览器上隐藏参数部分,而get不会.在安全的要求情况下使用post,如用户登录
②用来分享和传播时可使用get请求.
7.MIME介绍
MIME是http协议中的数据类型,全称是多功能Internet邮件扩展服务.格式为大类型/小类型,并与某一种文件的扩展名相对应 ,通过MIME,浏览器就知道如何解析服务器响应的内容
常见的MIME类型:
在这里插入图片描述

八.ServletConfig和ServletContext

1.ServletConfig基本介绍
①ServletConfig类是为Servlet程序的配置的信息的类
②Servlet程序和ServletConfig对象都是由Tomcat创建的
③Servlet程序默认是第一次访问的时候创建,ServletCongfig在Servlet程序创建时,就创建一个对应的ServletConfig对象
2.作用
①获取Servlet程序的servlet-name的值
②获取初始化参数init-param
③获取ServletContext对象

package com.hspedu.servlet;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class DBServlet extends HttpServlet {//如果重写了init方法,并且想要在其他方法通过getServletConfig()方法获取ServletConfig,则一定要调用super.init(config)@Overridepublic void init(ServletConfig config) throws ServletException {//调用父类的GenericServlet,会把Tomcat创建的ServletConfig对象赋给GenericServlet的属性configSystem.out.println(config);super.init(config);}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//得到一个配置类对象ServletConfig servletConfig = this.getServletConfig();String username = servletConfig.getInitParameter("username");String psd = servletConfig.getInitParameter("pwd");System.out.println("名字是:"+username+"\t\t\t"+"密码是:"+psd);}
}

3.ServletContext介绍
①可以被多个Servlet共享
②存储数据形式为k-v 类似于Map
③可以实现多个Servlet的通信,数据在内存
④一个web工程,只会有一个ServletContxt对象实例,在web工程启动的时候创建,在停止的时候销毁
⑤通过ServletConfig.getServletContext方法获得对ServletContext对象的引用,或者通过this.getServletContext来获得对象的引用

4.ServletContext的作用
①获取配置文件的上下文参数context-param
②获取当前的工程路径
③获取工程部署后再服务器硬盘上的绝对路径
④像Map一样存取数据,多个Servlet共享数据

5.ServletContext案例

package com.hspedu.servlet.servletContext;import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;public class ServletContext extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)  {//获取配置文件的conText-paramjavax.servlet.ServletContext servletContext = this.getServletContext();//获取websiteString website = servletContext.getInitParameter("website");String company = servletContext.getInitParameter("company");System.out.println("网址是:"+website);System.out.println("公司名称是:"+company);//获取项目的工程路径String contextPath = servletContext.getContextPath();System.out.println("工程路径为:"+contextPath);//获取项目发布后正在工作的路径// /表示项目发布后的根路径String realPath = servletContext.getRealPath("/");System.out.println("根路径为:"+realPath);}
}

配置文件代码

<!--    配置整个网站的信息--><context-param><param-name>website</param-name><param-value>http://www.baidu.com</param-value></context-param><context-param><param-name>company</param-name><param-value>百度公司</param-value></context-param>

统计网站访问次数案例:

package com.hspedu.servlet.servletContext;import javax.servlet.*;
import javax.servlet.ServletContext;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;public class PayServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//获取ServletContext对象ServletContext servletContext = this.getServletContext();//从servletContext获取visit_count属性Object visit_count = servletContext.getAttribute("visit_count");if(visit_count == null){servletContext.setAttribute("visit_count",1);visit_count = 1;System.out.println("输出visit_count的类型"+visit_count.getClass());}else {visit_count = Integer.parseInt(visit_count+"")+1;System.out.println("第二次输出类型"+visit_count.getClass());//放回servletContextservletContext.setAttribute("visit_count",visit_count);}//输出显示response.setContentType("text/html;charset = utf-8");PrintWriter writer = response.getWriter();writer.println("<h1>该网站被访问的的次数为"+visit_count+"</h1>");writer.flush();writer.close();}
}

九.HttpServletRequest

1.HttpServletRequest介绍
①HttpServletRequest对象代表客户端的请求
②当客户端通过HTTP协议访问服务器时,HTTP请求头中的信息都封装在这个对象中
③通过这个对象的方法,可以获得客户的信息

2.HttpservletRequest的一些常用方法
在这里插入图片描述

代码演示:在一个表单提交数据给Servlet,然后在Servlet通过HttpServletRequest对象获取相关数据

package com.hspedu.servlet.request;import javax.servlet.*;
import javax.servlet.http.*;
import javax.swing.*;
import java.io.IOException;
import java.io.PrintWriter;public class HttpServletRequestMethod extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request,response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//使用request对象,使用各种方法System.out.println("请求的资源路径URI:"+request.getRequestURI());System.out.println("请求的资源的URL:"+request.getRequestURL());System.out.println("获取客户端的IP地址:"+request.getRemoteAddr());System.out.println("获取客户端的主机:"+request.getHeader("Host"));//如果想要得到请求头相关的信息,可以使用request.getHeader("请求头字段")方法//获取请求的浏览器名称String userAgent = request.getHeader("User-Agent");String[] s = userAgent.split(" ");System.out.println("浏览器是:"+s[s.length-2].split("\\/")[0]);System.out.println("获取http的请求方式:"+request.getMethod());//获取和请求参数的信息//1.获取表单中的数据[单个数据]String username = request.getParameter("username");System.out.println(username);//2.获取表单中的多个数据//解决中文乱码问题request.setCharacterEncoding("utf-8");String[] teachers = request.getParameterValues("teacher");for (String teacher : teachers) {System.out.println("多个数据之一是:"+teacher);}//3.获取请求头中的setionString cookie = request.getHeader("Cookie");String JSession = cookie.split(" ")[0].split("=")[1];System.out.println("JSession是:"+JSession);//返回接收到的信息,给浏览器回显回去response.setContentType("text/html;charset=utf-8");PrintWriter writer = response.getWriter();writer.println("提交的用户名:"+username);writer.flush();writer.close();}
}

web配置:

<servlet><servlet-name>HttpServletRequestMethod</servlet-name><servlet-class>com.hspedu.servlet.request.HttpServletRequestMethod</servlet-class></servlet><servlet-mapping><servlet-name>HttpServletRequestMethod</servlet-name><url-pattern>/requestMethods</url-pattern></servlet-mapping>

表单自己写一个即可

3.HttpServletRequest注意事项
①:获取doPost参数中文乱码问题,要将下列语句写在请求参数前面

    request.setCharacterEncoding("utf-8");

②通过PrintWriter返回接收到的信息,需要加上以下语句,要写在获取流之前

//返回接收到的信息,给浏览器回显回去response.setContentType("text/html;charset=utf-8");

3.请求转发
请求转发是指一个web资源收到客户端的请求后,通知服务器去调用另外一个web资源进行处理.
HttpServletrequest对象提供了一个getRequestDispatcher方法,返回一个RequestDispatcher对象,调用这个对象的forword方法可以实现请求转发
request对象同时也是一个域对象,数据通过request对象可以带给其他的web资源进行处理
①请求转发示意图
在这里插入图片描述

4.请求转发注意事项
①浏览器的地址不会发生变化,仍然会保留第一次的url
②在同一次的HTTP请求当中进行多次转发,仍然是一次HTTP请求
③在同一次的HTTP请求转发中,进行多次转发,多个Servlet可以共享一个request和response
④可以转发到WEB-INF目录下
⑤不能访问当前web工程外的资源
⑥浏览器地址栏会停止在第一个servlet,如果刷新页面,则会再次发出请求并且会带数据,所以在支付时不要使用请求转发.

十.HttpServletResponse

介绍:每次的http请求,Tomcat会创建一个HttpServletResponse对象给Servlet程序使用,作用是给客户端返回信息

1.请求重定向示意图
在这里插入图片描述
2.重定向语法,就是调用HttpServletResponse对象的一个方法指定一个新的Servlet

//sendDirect本质就会返回302状态码和location:/servlet/downServletNew//浏览器在解析/servlet/downServletNew的时候会拼接主机response.sendRedirect("/servlet/downServletNew");

3.请求重定向注意事项和细节
①最佳应用场景:网站迁移,比如原域名是www.baidu.com 迁移到www.baidu.cn 但是抓取的网址还是原网址
②浏览器地址会发生变化,本质是两次http请求
③不能共享Request域中的数据,本质是两次http请求会生成两个HttpServletRequest对象
④不能重定向到/Web-INF下的资源
⑤可以重定向到Web工程以外的资源,比如重定向到淘宝网站
⑥重定向有两种方式,第二种是

//第二种重定向方式response.setStatus(302);response.setHeader("Location","/servlet/downServletNew");

⑦获取配置的Appliction content
在这里插入图片描述

语法:

String contextPath = this.getServletContext().getContextPath();

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

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

相关文章

【嵌入式C语言】GCC概述+C语言编译过程

目录 前言1 课程介绍1.1 计算机程序语言的学习思路?1.2 基本程序设计思想:1.3 C语言工具的特性:1.4 推荐教材 2 GCC的使用及其常用选项介绍2.1 GCC概述gcc -vgcc -ogcc -v -o 2.2 C语言编译过程2.2.1 预处理2.2.2 编译2.2.3 汇编2.2.4 链接2.2.5 问题 2.3 宏的使用 前言 重新学…

C语言 数组排序 – 插入法排序 - C语言零基础入门教程

目录 一.简介二.数组插入法排序原理三.数组插入法排序实战四.猜你喜欢 零基础 C/C 学习路线推荐 : C/C 学习目录 >> C 语言基础入门 一.简介 经过前面的学习&#xff0c;我们已经学会了数组遍历&#xff0c;在开发中&#xff0c;我们经常回碰到对数组进行排序&#xff0c…

vulnhub- Machine_Matrix_v3靶机的测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、信息搜集 2、Getshell 3、提权 四、结论 一、测试环境 1、系统环境 渗透机&#xff1a;kali2021.1(192.168.200.131) 靶 机&#xff1a;Linux matrix 4.16.3-porteus(192.168.200.1…

2024-11-13 Unity Addressables1——概述与导入

文章目录 1 概述1.1 介绍1.2 主要作用1.3 Addressables 与 AssetBundle 的区别 2 导入3 配置3.1 方法一3.2 方法二 1 概述 1.1 介绍 ​ Addressables 是可寻址资源管理系统。 ​ Unity 从 2018.2 版本开始&#xff0c;建议用于替代 AssetBundle 的高阶资源管理系统。在 Unit…

操作系统lab4-页面置换算法的模拟

操作系统lab4-页面置换算法的模拟 文章目录 操作系统lab4-页面置换算法的模拟实验目的实验内容实验分析 代码测试用例运行结果 实验目的 1、掌握请求分页存储管理的常用理论&#xff1a;页面置换算法。 2、理解请求分页中的按需调页机制。 实验内容 独立地用高级语言编写和…

springboot的依赖实现原理:spring-boot-starter-parent解析

01 dependencyManagement的作用 在使用springboot时我们会在项目pom引入以下配置和依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.7.18</version> &l…

基于Java Springboot图书馆管理系统

一、作品包含 源码数据库文档全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据库&#xff1a;MySQL8.0 数据…

MySQL联合索引(abc)命中测试

1.建表 mysql创建一张表&#xff0c;表名&#xff1a;‘test_models’ id列为 主键&#xff0c;int类型 &#xff0c;自增a,b,c,d,e 全部是int&#xff08;11&#xff09;为&#xff08;a,b,c&#xff09;添加一个联合索引 index_abc 执行语句&#xff1a;创建表 CREATE TA…

Linux信号

1. 什么是进程&#xff1f; 从内核的角度&#xff0c;进程是系统分配资源的单位。当一个程序(静态)被加载到内存&#xff0c;操作系统为程序分配一个PCB&#xff08;进程控制块&#xff09;。 PCB&#xff1a;Process Control Block。在Linux中PCB叫做task_struct的结构体&am…

07-案例-图书管理

欢迎来到“雪碧聊技术”CSDN博客&#xff01; 在这里&#xff0c;您将踏入一个专注于Java开发技术的知识殿堂。无论您是Java编程的初学者&#xff0c;还是具有一定经验的开发者&#xff0c;相信我的博客都能为您提供宝贵的学习资源和实用技巧。作为您的技术向导&#xff0c;我将…

js中typeOf无法区分数组对象

[TOC]&#xff08;js中typeOf无法区分数组对象) 前提&#xff1a;很多时候我们在JS中用typeOf来判断值类型&#xff0c;如&#xff1a;typeOf ‘abc’//string ,typeOf 123 //number; 但当判断对象为数组时返回的仍是’object’ 这时候我们可以使用Object.prototype.toString.c…

【时间之外】IT人求职和创业应知【36】-肖申克的救赎

目录 新闻一&#xff1a;信息技术应用创新产业大会在深圳开幕 新闻二&#xff1a;人工智能与大数据融合应用成为创业新热点 新闻三&#xff1a;云计算与边缘计算协同发展推动IT行业创新 认知和思考决定了你的赚钱能力。以下是今天可能引起你思考的热点新闻&#xff1a; 新闻…

STL之vecor的使用(超详解)

目录 1. C/C中的数组 1.1. C语言中的数组 1.2. C中的数组 2. vector的接口 2.1. vector的迭代器 2.2. vector的初始化与销毁 2.3. vector的容量操作 2.4. vector的访问操作 2.5. vector的修改操作 &#x1f493; 博客主页&#xff1a;C-SDN花园GGbond ⏩ 文章专栏…

Python异常处理day8

1、异常处理机制 1.1内置异常 常见的内置异常&#xff0c;修改元组&#xff0c;输出变量为被定义&#xff0c;强转错误&#xff0c;将字符串转成整型&#xff0c;索引超范围&#xff0c;除数不能为0&#xff0c;引用未被定义的模组&#xff0c;字符串与整型加减&#xff0c;各…

FFmpeg 4.3 音视频-多路H265监控录放C++开发十三.2:avpacket中包含多个 NALU如何解析头部分析

前提&#xff1a; 注意的是&#xff1a;我们这里是从avframe转换成avpacket 后&#xff0c;从avpacket中查看NALU。 在实际开发中&#xff0c;我们有可能是从摄像头中拿到 RGB 或者 PCM&#xff0c;然后将pcm打包成avframe&#xff0c;然后将avframe转换成avpacket&#xff0…

软件测试之缺陷编写

软件测试之缺陷编写 1. 缺陷报告示例2. 缺陷的跟踪流程3. 提交缺陷注意事项 1. 缺陷报告示例 2. 缺陷的跟踪流程 发现bug后怎么办? 要确认bug的可复现. 3. 提交缺陷注意事项

建筑工程内部知识库:提升项目管理效率的关键

在建筑工程领域&#xff0c;项目管理的效率直接关系到项目的成本、进度和质量。随着信息技术的快速发展&#xff0c;内部知识库已成为提升项目管理效率的关键工具。本文将探讨如何通过内部知识库优化建筑工程项目管理&#xff0c;并提供一些实用的策略和建议。 一、内部知识库…

Vue前端开发之组件事件

在一个组件中&#xff0c;不仅可以定义属性&#xff0c;还能定义事件&#xff0c;同时&#xff0c;在定义的事件中&#xff0c;还可以传递事件参数&#xff0c;校验参数&#xff0c;组件中定义的事件&#xff0c;可以被调用此组件的父级组件监听&#xff0c;当触发子级组件的事…

Springboot 整合 Java DL4J 打造金融风险评估系统

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/literature?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;…

【Unity】ScriptableObject的应用:利用配方合成新物体

前一篇已经使用ScriptableObject(SO)类配置可放置物体&#xff0c;本篇探索更多的SO类应用场景。 需求分析 将若干指定物体放在工作台上&#xff0c;可以生成新的物体。 成果展示 Scene部分 准备工作台&#xff0c;放在工作台上的物体全部放在指定PlacedObjects空物体下。 …