一、基本概念

1.C/S

C/S架构是客户端服务器架构,将需要处理的业务合理的分配到客户端和服务器,客户端负责与用户的交互任务,服务器负责数据管理。

优点:

  • 客户端界面和功能可以很丰富
  • 应用服务器负荷减轻
  • 响应速度快

缺点

  • 适用面窄,用户群固定
  • 维护和升级的成本高,所有的客户端需要更新版本

2.B/S

B/S架构是浏览器服务器架构,将系统功能的主要业务逻辑集中到服务器端,极少的业务逻辑在浏览器实现。浏览器负责与用户的交互任务,服务器负责数据管理。

优点

  • 无需安装客户端,在浏览器中即可
  • 适用面广,用户群不固定
  • 通过控制权限实现多客户访问目的,交互性强
  • 维护和升级的成本低,无须升级所有客户端版本

缺点

  • 应用服务器负荷重
  • 浏览器界面想到达到客户端的丰富程度需要耗费大量成本
  • 浏览器上适配麻烦

3. javaWeb

  web是在互联网上提供外界访问的资源,分为静态资源(浏览器内容始终不变,如HTML语言,文本语言)和动态资源(浏览数据由程序产生,不同时间访问看到的页面不同,如Servlet JSP等)

  JavaWeb指使用java语言进行动态web资源开发技术,是解决相关web互联网领域的技术总和。

二、HTTP协议

HTTP协议是超文本传输协议,由W3C万维网联盟组织制定的应用层协议,用来规范浏览器和web服务器之间通讯的数据格式,主要涉及浏览器的请求格式和服务器的响应格式

HTTP协议承载于TCP 协议之上,HTTPS协议是承载于TLS或SSL协议层之上的协

HTTP与HTTPS区别:

  • HTTP明文传输,数据交互无加密,极易被监听破解或篡改,HTTPS在HTTP下加入SSL层,数据传输加密
  • HTTP无需身份认证,HTTPS需要经过CA多重认证,包括域名管理权限,单位身份合法性确认等,
  • HTTP无任何使用成本,而HTTPS需要申请SSL证书,需要花费
  • 页面显示时,HTTP提示网站不安全,而HTTPS在浏览器上提示网站链接是安全的
  • 访问速度上HTTP根据网站服务器配置和客户端浏览环境而定,但HTTPS在同样配置的服务器级客户端浏览环境下,可明显提高网页加载速度
  • HTTP端口号为80, HTTPS端口号为443

HTTP请求格式

客户端发送一个HTTP请求到服务器的消息包括:请求行,请求头,空白行,请求体

  • 请求行用来说明请求类型(get或post),访问的资源和使用的HTTP版本(1.0或1.1):  请求类型 请求路径  协议版本
  • 请求头是紧接着请求行之后的用来说明服务器使用的附加信息,格式是键值对: 主机 请求长度 请求的浏览器相关信息
  • 空白行是请求头部的空行,必须存在
  • 请求体,添加的请求数据

HTTP响应格式  

服务器接受并处理客户端的发过来的请求并返回HTTP响应信息,包括:响应行, 响应头,空白行,响应体

  • 响应行说明HTTP协议版本,状态码及状态信息: 协议版本  状态码(200 成功  404 路径错误  500服务错误) 状态信息
  • 响应头说明客户端使用到一些附加信息,格式为键值对
  • 空白行必须有
  • 响应体是服务器发送给客户端的结果的附加信息

三、Tomcat服务器

Tomcat最初由Sun公司软件架构师詹姆斯·邓肯·戴维开发的,后贡献给Apache软件基金会

Tomcat服务器是一个开源的轻量级web应用服务器,在中小型系统和开发量小的场合下被普遍使用,是开发和调试servlet、JSP 程序的首选

Tomcat目录结构:

  • bin主要存放二进制可执行文件和脚本,注意start和shutdown.bat
  • conf主要存放各种配置文件
  • lib主要存放Tomcat运行需要加载的jar包
  • logs主要存放Tomcat在运行过程中产生的日志文件
  • temp主要存放Tomcat在运行过程中产生的临时文件
  • webapps主要存放应用程序,当Tomcat启动时会加载该目录下的应用程序
  • work主要存放Tomcat在运行时的编译后文件,如JSP 编译后的文件

Tomcat启动和关闭

  • 启动:bin目录下的startup.bat,出现一个毫秒数说明启动成功,或者浏览器发送请求成功
  • 关闭:bin目录下的shutdown.bat
  • 改变Tomcat编码方式:logging.properties文件修改java.util.logging.ConsoleHandler.encoding = GBK
  • 修改端口号:
    • server.xml文件是服务器的主配置文件,可以设置端口号、设置域名或IP、默认加载的项目、请求编码等
<Connector port="8888" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
    • tomcat-users.xml文件用来配置管理Tomcat服务器的用户与权限   
<role rolename="manager-gui"/>
<user username="admin" password="123456" roles="manager-gui"/>
  • 访问路径时默认打开的是webapps下的root下的index.jsp;若设置好则默认为index.html文件,或者直接输入完整路径访问

四、Servlet

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,是Java语言编写的服务器端程序,换句话说,Servlet就是运行在服务器上的Java类。
Servlet用来完成B/S架构下客户端请求的响应处理,也就是交互式地浏览和生成数据,生成动态Web内容。

Servlet的编程步骤

  • 建立一个Java Web Application项目并配置Tomcat服务器。
  • 自定义类实现Servlet接口或继承 HttpServlet类(推荐) 并重写service方法。
  • 将自定义类的信息配置到 web.xml文件并启动项目,配置方式如下:   
 <!--配置文件-->
<servlet>
<!--起别名,最好与类名相同-->
<servlet-name>HelloServlet</servlet-name>
<!--对应哪个类-->
<servlet-class>com.HelloServlet</servlet-class>
</servlet> <!--servlet的映射配置-->
<servlet-mapping>
<!--对应的别名-->
<servlet-name>HelloServlet</servlet-name>
<!--访问路径-->
<url-pattern>/hello</url-pattern>
</servlet-mapping>

1.servlet 接口

  javax.servlet.Servlet接口用于定义所有servlet必须实现的方法

方法声明 功能介绍
void init(ServletConfig config) 由servlet容器调用,以向servlet指示servlet正在被放入服务中
void service(ServletRequest req,ServletResponse res) 由servlet容器调用,以允许servlet响应请求
ServletConfig getServletConfig() 返回ServletConfig对象,该对象包含此servlet的初始化和启动参数
String getServletInfo() 返回有关servlet的信息,如作者、版本和版权
void destroy() 由servlet容器调用,以向servlet指示该servlet正在退出服务
  • javax.servlet.GenericServlet主要用于定义一个通用的、与协议无关的servlet,该类实现了Servlet接口,若编写通用servlet,只需重写service抽象方法即可

    方法声明 功能介绍
    abstract void service(ServletRequest req,ServletResponse res) 由servlet容器调用允许servlet响应请求
  • javax.servlet.http.HttpServlet类是个抽象类并继承了GenericServlet,用于创建适用于网站的HTTP Servlet,该类的子类必须至少重写一个方法,推荐使用
方法声明 功能介绍
void doGet(HttpServletRequest req,HttpServletResponse resp) 处理客户端的GET请求
void doPost(HttpServletRequest req,HttpServletResponse resp) 处理客户端的POST请求
void init() 进行初始化操作
void service(HttpServletRequest req,HttpServletResponse resp) 根据请求决定调用doGet还是doPost方法
void destroy() 删除实例时释放资源
  • 使用注解方式生成Servlet类的简化

package com;

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(name = "HelloServlet4",urlPatterns = "/hello4")
public class HelloServlet4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("dopost请求");
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("doget请求");
}
/*
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("简化Servlet方式");
String method = req.getMethod();
System.out.println("请求方式为"+method);
if ("GET".equals(method)){
doGet(req,resp);
}
if ("post".equalsIgnoreCase(method)){
doPost(req,resp);
}
}*/
}

2.Servlet生命周期

  • 构造方法调用一次,当第一次请求Servlet时调用构造方法创建Servlet实例
  • 初始化方法调用一次,当第一次请求Servlet时立即调用该方法实现Servlet的初始化
  • 服务方法调用多次,每一次请求Servlet时就回调用该方法用于请求的响应
  • 销毁方法调用一次,当Servlet实例所在的web引用被卸载时调用该方法来释放当前占用的资源

3. get 和post请求

  • GET请求的主要方式:

    • 在浏览器输入URL按回车
    • 点击<a>超链接
    • 点击submit按钮,提交 <form method=“get”>表单
  • GET请求特点:会将请求数据添加到请求URL地址的后面,只能提交少量的数据、不安全
  • POST请求的方法如下:点击submit按钮,提交 <form method=“post”>表单
  • POST请求的特点:请求数据添加到HTTP协议体中,可提交大量数据、安全性好

4. ServletRequest接口 获取参数

  • javax.servlet.ServletRequest接口主要用于向servlet提供客户端请求信息,可以从中获取到任何请求信息。
  • Servlet容器创建一个ServletRequest对象,并将其作为参数传递给Servlet的service方法。
  • 常用方法
方法声明 功能介绍
String getParameter(String name) 以字符串形式返回请求参数的值,如果该参数不存在,则返回空值
String[] getParameterValues(String name) 返回一个字符串对象数组,其中包含给定请求参数所具有的所有值,如果该参数不存在,则返回空值
Enumeration getParameterNames() 返回包含此请求中包含的参数名称的字符串对象的枚举。如果请求没有参数,则方法返回空枚举
Map<String, String[]> getParameterMap() 返回请求参数的键值对,一个键可以对应多个值
String getRemoteAddr() 返回发送请求的客户端或最后一个代理的IP地址
int getRemotePort() 返回发送请求的客户端或最后一个代理的端口号

5. HttpServletRequest接口获取参数

  • javax.servlet.http.HttpServletRequest接口是ServletRequest接口的子接口,主要用于提供HTTP请求信息的功能。
  • 不同于表单数据,在发送HTTP请求时,HTTP请求头直接由浏览器设置
  • 常用方法
方法声明 功能介绍
String getRequestURI() 返回此请求的资源路径信息
StringBuffer getRequestURL() 返回此请求的完整路径信息
String getMethod() 返回发出此请求的HTTP方法的名称,例如GET、POST
String getQueryString() 返回路径后面请求中附带的参数
String getServletPath() 返回此请求中调用servlet的路径部分

6.ServletResponse接口响应客户端

  • javax.servlet.ServletResponse接口用于定义一个对象来帮助Servlet向客户端发送响应。
  • Servlet容器创建ServletResponse对象,并将其作为参数传递给servlet的service方法。
  • 常用方法
方法声明 功能介绍
PrintWriter getWriter() 返回可向客户端发送字符文本的PrintWriter对象
String getCharacterEncoding() 获取响应内容的编码方式
void setContentType(String type) 如果尚未提交响应,则设置发送到客户端响应的内容类型。内容类型可以包括字符编码规范,例如text/html;charset=UTF-8

7.Servlet接收中文乱码

  • 原因:浏览器在提交表单时,会对中文参数值进行自动编码。当Tomcat服务器接收到浏览器请求后自动解码,当编码与解码方式不一致时,就会导致乱码
  • 解决POST接收乱码:接收之前设置编码方式 request.setCharacterEncoding(“utf-8”)
  • 解决GET接收乱码:将接收到的中文乱码重新编码:
// 接收到get请求的中文字符串
String name = request.getParameter("name");
// 将中文字符重新编码,默认编码为ISO-8859-1
String userName = new String(name.getBytes(“ISO-8859-1”),“utf-8");
  • web.xml

<servlet>
<servlet-name>paraServlet</servlet-name>
<servlet-class>com.ParaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>paraServlet</servlet-name>
<url-pattern>/paraServlet</url-pattern>
</servlet-mapping>
  • parameter.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>parameter</title>
</head>
<body>
<form action="paraServlet" method="post">
姓名:<input type="text" name="name"> <br>
年龄:<input type="text" name="age"> <br>
爱好:<input type="checkbox" name="hobby" value="唱歌">唱歌
<input type="checkbox" name="hobby" value="舞蹈">舞蹈
<input type="checkbox" name="hobby" value="美术">美术<br>
<button >提交</button>
</form> </body>
</html>
  • ParaServlet类
package com;

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;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Map;
import java.util.Random;
import java.util.Set; @WebServlet(name = "ParaServlet")
public class ParaServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//ServletRequest接口
//设置字符编码
request.setCharacterEncoding("utf-8");
// 获取参数值
String name = request.getParameter("name");
System.out.println("姓名为"+name);
// 获取参数值集合
String[] hobbies = request.getParameterValues("hobby");
System.out.print("爱好是");
for (String s:hobbies) {
System.out.print(s+" ");
}
System.out.println();
// 获取所有参数名
Enumeration<String> parameterNames = request.getParameterNames();
System.out.print("所有参数名为:");
while (parameterNames.hasMoreElements()){
System.out.print(parameterNames.nextElement()+" ");
}
System.out.println();
// 获取键值对
Map<String, String[]> map = request.getParameterMap();
System.out.print("键值对:");
Set<Map.Entry<String, String[]>> entries = map.entrySet();
for (Map.Entry<String, String[]> entry : entries) {
System.out.print(entry.getKey()+"=");
for (String s:entry.getValue()) {
System.out.println(s+" ");
}
System.out.println();
}
System.out.println("------------------------------------");
//HttpServletRequest接口
// 获取发送请求的客户端或最后一个代理的IP地址
System.out.println("代理的IP地址"+request.getRemoteAddr());
// 获取发送请求的客户端或最后一个代理的端口号
System.out.println("代理的端口号"+request.getRemotePort());
//返回此请求的资源路径信息
System.out.println("请求的资源路径信息"+request.getRequestURI());
// 返回此请求的完整路径信息
System.out.println("请求的完整路径信息"+request.getRequestURL());
// 返回发出此请求的HTTP方法的名称,例如GET、POST
System.out.println("求的HTTP方法"+request.getMethod());
//返回路径后面请求中附带的参数
System.out.println("请求中附带的参数"+request.getQueryString());
//返回此请求中调用servlet的路径部分
System.out.println("调用servlet的路径部分"+request.getServletPath()); //ServletResponse接口响应客户端
// 查看字符编码
String characterEncoding = response.getCharacterEncoding();
System.out.println(characterEncoding);
//更改字符编码
response.setContentType("text/html;charset=utf-8");
//发送响应
PrintWriter writer = response.getWriter();
writer.write("我接受到了");
//获取随机数值
int num = (int) (Math.random() * 100 + 1);
writer.write(num);
writer.close(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}

8.ServletConfig接口

  • javax.servlet.ServletConfig接口用于描述Servlet本身的相关配置信息,在初始化期间用于将信息传递给Servlet配置对象
  • 常用方法
方法声明 功能介绍
String getServletName() 返回Servlet的别名
String getInitParameter(String name) 返回包含初始化参数值的字符串,如果该参数不存在,则返回null
Enumeration getInitParameterNames() 将servlet的初始化参数的名称作为字符串对象的枚举返回,如果servlet没有初始化参数,则返回空枚举
ServletContext getServletContext() 返回对调用方正在其中执行的ServletContext的引用
  • 配置信息  
<!-- 在web.xml中配置ServletConfig初始化参数 -->
<servlet>
<servlet-name>actionservlet</servlet-name>
<servlet-class>com.lagou.demo01.ActionServlet</servlet-class>
<!-- 配置 Serlvet 的初始化参数 -->
<init-param>
<!-- 参数名 -->
<param-name>config</param-name>
<!-- 参数值 -->
<param-value>struts.xml</param-value>
</init-param>
</servlet>
package com;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration; public class ConfigServlet implements Servlet {
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//参数信息
String para1 = servletConfig.getInitParameter("userName");
System.out.println(para1);
System.out.println("-------------");
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
while (initParameterNames.hasMoreElements())
System.out.println(initParameterNames.nextElement());
System.out.println("-------------"); //ConfigServlet的别名
System.out.println("ConfigServlet的别名"+servletConfig.getServletName());
//正在其中执行的ServletContext的引用
System.out.println("正在其中执行的ServletContext的引用"+servletConfig.getServletContext()); String servletName = servletConfig.getServletName();
} @Override
public ServletConfig getServletConfig() {
return null;
} @Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { } @Override
public String getServletInfo() {
return null;
} @Override
public void destroy() { }
}

9.ServletContext接口

  • javax.servlet.ServletContext接口主要用于定义一组方法,Servlet使用这些方法与它的Servlet容器通信。
  • 服务器容器在启动时会为每个项目创建唯一的一个ServletContext对象,用于实现多个Servlet之间的信息共享和通信。
  • 在Servlet中通过this.getServletContext()方法可以获得ServletContext对象
  • 常用方法
方法声明 功能介绍
String getInitParameter(String name) 返回包含初始化参数值的字符串,如果该参数不存在,则返回null
Enumeration getInitParameterNames() 将servlet的初始化参数的名称作为字符串对象的枚举返回,如果servlet没有初始化参数,则返回空枚举
String getRealPath(String
path)
返回包含给定虚拟路径的实际路径的字符串
String getContextPath() 返回与此上下文关联的主路径
InputStream getResourceAsStream(String path) 将位于指定路径的资源作为InputStream对象返回
void setAttribute(String name, Object object) 将指定的属性名和属性值绑定到当前对象
Object getAttribute(String name) 根据执行的属性名获取属性值
void removeAttribute(String name) 删除指定的属性名信息
  • 配置信息
<!--在web.xml中配置ServletContext初始化参数 -->
<context-param>
<param-name>username</param-name>
<param-value>scott</param-value>
<context-param>
<context-param>
<param-name>password</param-name>
<param-value>tiger</param-value>
<context-param>
package com;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
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;
import java.util.Enumeration; @WebServlet(name = "ContextServlet")
public class ContextServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } @Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
ServletContext servletContext = getServletContext(); //获取初始化内容参数
String userName = servletContext.getInitParameter("userName");
System.out.println(userName);//Scott
//获取所有参数
Enumeration<String> initParameterNames = servletContext.getInitParameterNames();
while (initParameterNames.hasMoreElements()){
String s = initParameterNames.nextElement();
System.out.println(s+servletContext.getInitParameter(s));
} //路径
String realPath = servletContext.getRealPath("/");
System.out.println("实际路径的字符串"+realPath);//实际路径的字符串C:\Users\Administrator\Desktop\java小白学习资料\java跟课学\第四阶段\模块一:JavaWeb核心(上)\out\artifacts\task02_war_exploded\
String contextPath = servletContext.getContextPath();
System.out.println("此上下文关联的主路径"+contextPath);//此上下文关联的主路径/task02 //设置参数信息
servletContext.setAttribute("para1","value1");
//获取设置的参数
System.out.println(servletContext.getAttribute("para1"));//value1
//删除参数
servletContext.removeAttribute("para1");
System.out.println(servletContext.getAttribute("para1"));//null }
}

Servlet核心技术的更多相关文章

  1. servlet 核心技术

    servlet 核心技术 servlet 生命周期 在 servlet 生命周期中,servlet 容器完成加载 servlet 类和实例化一个 servlet 实例,并通过3个方法来完成生命周期中的 ...

  2. servlet核心技术2

    一.Servet 与 JDBC 在Servlet中可以使用JDBC技术访问数据库,查询DB数据,然后生成显示页面,接收请求参数,然后对DB操作 为了方便重用和便于维护等目的,经常会采用DAO(Data ...

  3. Android 开发知识体系

    知识体系 1.Unix/Linux平台技术:基本命令,Linux下的开发环境 2.企业级数据库技术:SQL语言.SQL语句调优.Oracle数据库技术 3.Java 语言核心技术:Java语言基础.J ...

  4. javaweb核心技术servlet

      一.Servlet简介 1.什么是Servlet Servlet 运行在服务端的Java小程序,是sun公司提供一套规范(接口),用来处理客户端请求.响应给浏览器的动态资源.但servlet的实质 ...

  5. javaWeb核心技术第七篇之HTTP、Tomcat、Servlet、Request和Response

    - Web服务器 - 概念: - web资源: "英文直译"网"的意思 资源:一切数据文件 web资源:通过网络可以访问到的资源,通常指的是一切放在服务器上的文件&quo ...

  6. SpingMVC 核心技术帮助文档

    声明:本篇文档主要是用于参考帮助文档,没有实例,但几乎包含了SpringMVC 4.2版本的所有核心技术,当前最新版本是4.3,4.2的版本已经经是很新的了,所以非常值得大家一读,对于读完这篇文档感觉 ...

  7. Struts2核心技术简介

    Struts2核心技术简介 使用Struts2框架,只要注重以下三大元素:配置文件.映射文件和Action: 全局属性文件struts.properties:保存系统运行的一些参数变量,整个系统只有一 ...

  8. Struts核心技术简介

    Struts核心技术简介 1.Struts内部机制   Struts是一种基于MVC经典设计模式的开发源代码的应用框架,它通过把Servlet.JSP.JavaBean.自定义标签和信息资源整合到一个 ...

  9. 图解 & 深入浅出 JavaWeb:Servlet 再说几句

    Writer      :BYSocket(泥沙砖瓦浆木匠) 微         博:BYSocket 豆         瓣:BYSocket FaceBook:BYSocket Twitter   ...

随机推荐

  1. VMware vCenter Server 7.0 U2b/6.7 U3n/6.5 U3p,修复 vSphere Client 高危安全漏洞

    vSphere Client(HTML5)中的多个漏洞已秘密报告给 VMware.这里提供了更新和解决方法来解决受影响的 VMware 产品中的这些漏洞. 详见:VMSA-2021-0010 威胁描述 ...

  2. Nextcloud 使用教程

    一.简介 Nextcloud是一个网盘式文件管理系统,多用户权限管理,多客户端,使用简单.可在浏览器中运行,也可下客户端,不论使用哪种方式运行,使用教程都是一样的. 只是在客户端中运行时能及时收到相应 ...

  3. Python Xpath语法

    Python    Xpath语法   一.选取节点 常用的路劲表达式: 表达式 描述 实例   nodename 选取nodename节点的所有子节点 xpath('//div') 选取了div节点 ...

  4. Elasticsearch常用DSL关键字

    Elasticsearch常用DSL关键字 query: 用于包含查询使用到的语法 match_all: 最简单的查询,获取索引所有数据,类似搜索 *.如:"query":{&qu ...

  5. 永远的Ace 实验四 团队作业1:软件研发团队组建

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST/ 这个作业要求链接 https://www.cnblogs.com/nwnu-da ...

  6. 三维点云去噪无监督学习:ICCV2019论文分析

    三维点云去噪无监督学习:ICCV2019论文分析 Total Denoising: Unsupervised Learning of 3D Point Cloud Cleaning 论文链接: htt ...

  7. jemeter压测, 高级应用: 发1万个请求,每个请求参数都不同, 使用CSV数据文件配置

    今天接到一个压测任务, 数据源需要自己从测试环境库中取, 并且使用jemeter 请求, 每个请求参数都不相同 这里使用jemeter的 CSV数据文件来配置: 这样配置好后, 开始发送请求: csv ...

  8. Java 并发基础知识

    一.什么是线程和进程? 进程: 是程序的一次执行过程,是系统运行程序的基本单元(就比如打开某个应用,就是开启了一个进程),因此进程是动态的.系统运行一个程序即是一个程序从创建.运行到消亡的过程. 在 ...

  9. Java抽象类、继承及多态和适配器的实现

    Java继承 方法重写是Java语言多态的特性,必须满足以下条件 在子类中,方法名称与父类方法名称完全相同 方法的参数个数和类型完全相同,返回类型完全相同 方法的访问修饰符访问级别不低于父类同名方法的 ...

  10. .NET Core/.NET5/.NET6 开源项目汇总2:任务调度组件

    系列目录     [已更新最新开发文章,点击查看详细] 开源项目是众多组织与个人分享的组件或项目,作者付出的心血我们是无法体会的,所以首先大家要心存感激.尊重.请严格遵守每个项目的开源协议后再使用.尊 ...