HTTP协议有哪几种方式?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP协议有哪几种方式?相关的知识,希望对你有一定的参考价值。
1、HTTP协议有哪几种方式?
2、TCP/IP有几种版本?
3、192.168.0.1,192.168.1.2,192.168.0.255的含义和功能
高手帮忙!!!!!!!!!!!
其中,HEAD请求在客户程序和服务器之间进行交流,而不会返回具体的文档。当使用GET和POST方法时,服务器最后都将结果文档返回给客户程序,浏览器将 刷新显示。而HEAD请求则不同,它仅仅交流一些内部数据,这些数据不会影响浏览的过程。因此HEAD方法通常不单独使用,而是和其他的请求方法一起起到 辅助作用。一些搜寻引擎使用的自动搜索机器人使用这个方法来获得网页的标志信息,或者进行安全认证时,使用这个方法来传递认证信息。
除了这三种最常见的访问方法之外,在HTTP1.1中还定义了更多的访问方法类型,如PUT,用于将网页放置到正确位置,DELETE用于删除相关文档 等。这些方法并不常用,因而大部分Web服务器软件并没有实现他们。然而对于特定场合他们还是非常有用的,例如使用软件编辑网页时,网页编辑器可以使用这 些方法,管理不同的网页。
如果服务器不支持客户发送的请求方法,服务器将返回错误并立即关闭连接。 参考技术A 1.get和post
2.两种,现在用的IPV4和处于实验阶段的IPV6;
3.前两个个局域网的内网IP地址,最后一个是一个广播地址。 参考技术B 最简单的http请求是
GET / HTTP/1.0
其中GET是关键字
/表示请求的是跟目录主页
HTTP/1.0表示使用HTTP协议的1.0版本通讯
作为服务器端,这是会向服务器返回首页的全部html代码
至此,一个最简单的http通讯就完成了。但是,此时网页还不能正常显示,因为服务器仅仅返回了html代码,客户端还必须根据html代码中涉及的其他文件(例如css、js、图象、flash等等)的地址获得相应文件,才能使网页正常显示 参考技术C 1, 有get和post两种
2,IPV4和IPV6本回答被提问者采纳
38 创建线程有哪几种方式?
创建线程有哪几种方式?
答:
主要有三种:
-
继承 Thread 重写 run 方法;
-
实现Runnable接口,重写 run 方法;
-
实现Callable接口,通过FutureTask包装器来创建Thread线程。
原文链接:https://www.cnblogs.com/nongzihong/p/10512566.html (代码)
你更喜欢哪种方式?为什么?
- 实现Runnable接口这种方式更受欢迎,因为这不需要继承Thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(而Java不支持多继承),只能实现接口。同时,线程池也是非常高效的,很容易实现和使用。
具体创建方式:(没懂)
一、继承Thread类创建线程类
-
定义Thread类的子类,并重写该类的run方法,该run方法的方法体就代表了线程要完成的任务。因此把run()方法称为执行体。
-
创建Thread子类的实例,即创建了线程对象。
-
调用线程对象的start()方法来启动该线程。
?
package com.nf147.Constroller;
public class FirstThreadTest extends Thread {
int i = 0;
//重写run方法,run方法的方法体就是现场执行体
public void run() {
for (; i < 100; i++) {
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if (i == 50) {
new FirstThreadTest().start();
new FirstThreadTest().start();
}
}
}
}
- 上述代码中Thread.currentThread()方法返回当前正在执行的线程对象。GetName()方法返回调用该方法的线程的名字。
?
二、通过Runnable接口创建线程类
-
定义runnable接口的实现类,并重写该接口的run()方法,该run()方法的方法体同样是该线程的线程执行体。
-
创建 Runnable实现类的实例,并依此实例作为Thread的target来创建Thread对象,该Thread对象才是真正的线程对象。
-
调用线程对象的start()方法来启动该线程。
?
package com.nf147.Constroller;
public class RunnableThreadTest implements Runnable{
private int i;
public void run()
{
for(i = 0;i <100;i++)
{
System.out.println(Thread.currentThread().getName()+" "+i);
}
}
public static void main(String[] args)
{
for(int i = 0;i < 100;i++)
{
System.out.println(Thread.currentThread().getName()+" "+i);
if(i==20)
{
RunnableThreadTest rtt = new RunnableThreadTest();
new Thread(rtt,"新线程1").start();
new Thread(rtt,"新线程2").start();
}
}
}
}
?
三、通过Callable和Future创建线程
-
创建Callable接口的实现类,并实现call()方法,该call()方法将作为线程执行体,并且有返回值。
-
创建Callable实现类的实例,使用FutureTask类来包装Callable对象,该FutureTask对象封装了该Callable对象的call()方法的返回值。
-
使用FutureTask对象作为Thread对象的target创建并启动新线程。
-
调用FutureTask对象的get()方法来获得子线程执行结束后的返回值
?
package com.nf147.Constroller;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;
public class CallableThreadTest implements Callable<Integer> {
public static void main(String[] args) {
CallableThreadTest ctt = new CallableThreadTest();
FutureTask<Integer> ft = new FutureTask<>(ctt);
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " 的循环变量i的值" + i);
if (i == 20) {
new Thread(ft, "有返回值的线程").start();
}
}
try {
System.out.println("子线程的返回值:" + ft.get());
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
}
@Override
public Integer call() throws Exception {
int i = 0;
for (; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " " + i);
}
return i;
}
}
?
四、创建线程的三种方式的对比
1.1采用实现Runnable、Callable接口的方式创见多线程时,优势是:
-
线程类只是实现了Runnable接口或Callable接口,还可以继承其他类。
-
在这种方式下,多个线程可以共享同一个target对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU、代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。
1.2劣势是:
- 编程稍微复杂,如果要访问当前线程,则必须使用Thread.currentThread()方法。
2.1使用继承Thread类的方式创建多线程时优势是:
- 编写简单,如果需要访问当前线程,则无需使用Thread.currentThread()方法,直接使用this即可获得当前线程。
2.2劣势是:
- 线程类已经继承了Thread类,所以不能再继承其他父类。
?
package com.nf147.Constroller;
public class FirstThreadTest extends Thread {
int i = 0;
//重写run方法,run方法的方法体就是现场执行体
public void run() {
for (; i < 100; i++) {
System.out.println(getName() + " " + i);
}
}
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(Thread.currentThread().getName() + " : " + i);
if (i == 50) {
new FirstThreadTest().start();
new FirstThreadTest().start();
}
}
}
}
以上是关于HTTP协议有哪几种方式?的主要内容,如果未能解决你的问题,请参考以下文章