servlet和socket

最近在看教程的时候,又看到了servlet这个词,忽然发现我好像并不了解他,只是‘有所耳闻’。因此决定学习一下。java

什么是servlet

维基百科上说:web

Servlet(Server Applet),全称 Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于 交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个 接口,广义的Servlet是指任何 实现了这个Servlet接口的类,通常状况下,人们将Servlet理解为后者。

简单来讲,Servlet就是个接口,一段程序。服务器

经过上面的介绍,能够看到,中间提到交互式地浏览和修改数据,这忽然让我想到了前一段时间学的socket,经过socket,咱们也会实现客户端和服务器的交互效果。cookie

这就让我有点想知道,servletsocket有没有什么关系呢?网络

servlet和socket区别与联系

在这里,我会从几方面来简单分析二者。架构

使用协议

socket:使用TCP/IP协议或UDP协议,前者居多。
servlet:从维基百科中能够看到,通常使用的是HTTP协议。app

工做模式

socket:因为是使用的TCP协议,因此首先必需要作到的就是创建两端的链接,创建一条持续链接的通道。
这须要服务器端先创建起一个服务,而后由客户端去链接服务器端,这样,就创建好了一条链接,而后就能够进行随意的通讯了,服务器能够发送消息给客户端,一样的客户端也能够发送消息给服务端。socket

整理一下:学习

1)服务器端创建服务
2)客户端链接服务器端
3)相互发送数据

而后咱们在看一下servlet的工做模式:spa

因为servlet大多数是工做在基于http的web服务器下,因此它的模式想必你们也很熟悉了:

1) 客户端发送请求至服务器端;
2) 服务器将请求信息发送至 Servlet;
3) Servlet 生成响应内容并将其传给服务器。响应内容动态生成,一般取决于客户端的请求;
4) 服务器将响应返回给客户端。

看到这里,更加以为二者太像了。没错的,因为两个服务协议的关系,http原本就是对TCP协议的一个封装和完善,因此其底层的数据传输仍是使用TCP的那套东西。

对熟悉网络的朋友来讲,二者只是工做层面不一样的两个相互协做的过程而已。

这样,有这种相似程度也就不以为那么稀奇了。

java中的实现

首先是socket,经过以前的学习,socket的使用以下:

// 服务端
SocketService socketService = new SocketService(xxxx);
Socket socket = socketService.accept();

// 客户端
Socket socket = new Socket("127.0.0.1", xxxx);

主要的就是这三步,也就是说,在具体实现的时候,咱们须要对服务器和客户端二者都进行操做。

而后在看一下servlet。下面这段代码就是最近教程学习到的:

@GetMapping("/me")
public Teacher me(HttpServletResponse httpServletResponse) {
    Teacher teacher = new Teacher();
    try {
        teacher = teacherService.me();
    } catch (AuthException e) {
        httpServletResponse.setStatus(HttpStatus.UNAUTHORIZED.value());
    }

    return teacher;
}

这里面咱们用到了一个叫作HttpServletResponse的东西,相信咱们看到了response这个单词后,立马就会想到,是否是还有一个叫作HttpServletRequest的东西,没错的。

基于http的通讯就是有这样的特色,在服务器获取到一个请求以后,就会建立出HttpServletResponseHttpServletRequest这样两个对象,而后若是我想向客户端发送东西的话,就使用HttpServletResponse;若是咱们要从客户端获取东西的话,就使用HttpServletRequest

好比咱们上面会想客户端返回一个状态码,因此使用了HttpServletResponse

固然,若是咱们还想传递其余关于信息也是能够的,好比cookie,header,就像咱们手动作了一个http响应同样。

看到这里,咱们会发现,servlet的操做貌似都没有涉及到客户端,所有都是在服务器端完成的。是这样的,servlet在前面也说到了,它是一段服务器端工做的程序。

区别和联系总结

可能看到这里仍是没有怎么明白socketservlet的区别是什么,其实简单一点说就是:socket比servlet更基本,servlet基于socket。

由于二者都是为通讯而服务,因此,当咱们结合了网络的知识后,会发现这根咱们的网络中的网络架构是那么的同样,他的工做模式和咱们所熟知的网络工做模式又是那么的类似。

servlet容器

貌似提到了servlet,就不得不提到servlet容器了

从字面上理解,servlet容器就是装servlet的东西。

首先,servlet容器一样也是一段程序。从上面对servlet的学习,咱们大体知道了servlet是工做在服务器端的,可是现实状况是,不少的服务器都不能直接支持servlet,而咱们如今又想用servlet,这时就须要编写一段程序,加在服务器上,帮咱们来处理servlet。这就是咱们说的servlet容器。咱们接触过的Tomcat就是一个这样的容器。

通常的通讯是这样的:

clipboard.png

当咱们须要使用servlet时,他就是这样的:

clipboard.png

而后在web服务器收到一个http请求以后,就会转给servlet容器,而后再由容器交给servlet去处理。

总结

经过对servlet的简单了解,忽然发现不少我学过的东西并无我想象的那样没用,不少时候,咱们遇到的事情或是问题,他们可能都是想通的。也许,对目前所学,咱们并不能看到它的实际做用,可是说不许哪天,曾经不起眼的所学,就会成为解决问题的关键。


相关参考:
https://blog.csdn.net/snarlfu...
https://zh.wikipedia.org/wiki...
https://blog.csdn.net/wabiaoz...

相关文章
相关标签/搜索