服务器的功能有哪些,简述服务器的种类及作用
回想一下http请求的过程 。你在浏览器中输入xxx.com,域名解析后->发起tcp的三次握手->建立tcp连接,然后发起http请求->服务器 。
响应http请求,浏览器得到html代码 –> 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等) –> 浏览器对页面进行渲染呈现给用户 。
每个web服务器程序都需要接受来自网络的http请求,然后向请求者提供http回复 。Http回复一般包含一个html文件,有时也可以包含纯文本文件、图片或其他类型的文件 。
画外音:web服务器是处理http请求的应用程序 。
实施的一般步骤:
初始化服务端ServerSocket 初始化TreadPool while(true)等待客户端连接客户端请求 clientHandler处理客户端的请求 线程池的线程处理handler 根据输入流解析请求(解析请求行,解析消息头,解析消息正文) 根据输出流创建响应对象(发送状态行信息,发送响应头信息,发送响应正文信息)寻找servlet 根据请求路径找到需要哪个servlet处理(选择handler) 通过反射机制加载这个类 实例化servlet servlet处理请求(执行handler结束)一个应用需要先启动吗?当然,main函数必须有,init方法也必须有 。我们不在乎什么高性能,复用反应器之类的东西,但是我们总能处理并发 。线程池大小默认为处理器的核心数,太多处理不了!服务器通信说到底就是socket通信,包括redis服务器,都是socket底层通信 。我们怎么知道http请求来了呢?第一,长时间投票 。
private ServerSocket server;private ExecutorService threadPool;public WebServer() { try { System.out.println("init server begin"); server = new ServerSocket(8080); int poolSize = Runtime.getRuntime().availableProcessors(); threadPool = newFixedThreadPool(poolSize - 1); System.out.println("init server end"); } catch (Exception e) { e.printStackTrace(); } }public void start() { try { while (true) { //TODO } } catch (Exception e) { e.printStackTrace(); }}public static void main(String[] args) { WebServer server = new WebServer(); server.start();} Http请求来了,怎么处理?当然,需要有一个定义好的处理程序来处理它 。
Socket socket = server.accept(); ClientHandler handler = new ClientHandler(socket); threadPool.execute(handler); 处理程序处理客户端请求并完成响应:
private class ClientHandler implements Runnable { private Socket socket; public ClientHandler(Socket socket) { this.socket = socket; } public void run() { try { //根据输入流解析请求 HttpRequest request= new HttpRequest(socket.getInputStream()); //先判断用户请求的是否为后端请求 if (ServerContext.servletMapping.containsKey( request.getRequestLine()) ) { //通过反射机制加载这个类 //实例化这个Servlet } else { //查看请求的该页面是否存在,存在直接跳转 } else { //设置状态代码404等,跳转404页面 } } } catch (Exception e) { e.printStackTrace(); } finally { socket.close(); } } 当然,处理后的请求要根据输入流解析,响应对象根据输出流创建 。确定它是否是后端请求 。如果不是后端请求,找到对应的文件,设置响应头,设置响应体,返回给浏览器 。如果没有找到,则返回到404 。如果后端请求需要通过servlet,我们肯定需要通过请求路径找到对应的配置文件 。我们的配置可以放在xml或者map中,通过反射机制加载一个类,然后实例化一个servlet 。在处理设置请求报头之后,设置请求主体被返回给客户端 。
知识点:IPO模式 。
【服务器的功能有哪些,简述服务器的种类及作用】简单web服务器的想法基本有了,但是springboot应用为什么不单独启动服务器呢?Springboot默认使用Tomcat作为嵌入式服务器 。因此,我们建立一个项目会非常简单 。Springboot应用程序将自动启动一个嵌入式Tomcat服务器实例 。至于如何自动做到,你问过自己为什么吗?
推荐阅读
- 网站seo优化有哪些方面,网站seo优化的主要内容介绍
- 站内结构如何优化,优化站内结构的有效方法
- 怎么做关键词优化排名靠前,五个快速提升关键词排名的技巧
- 怎样恢复删除的照片,免费找回照片和视频方法
- pdf如何解密加密文件,一秒钟破解pdf文件密码的妙招
- 虚拟主机怎么用,虚拟主机的功能及正确使用方法介绍
- 淘宝好评率怎么算的?淘宝店好评怎么算的?
- 低温回火、中温回火、高温回火对应的温度多少,要权威的!!!!! 高温回火的温度一般为多少度
- 哭笑不得的意思是?哭笑不得的意思,并用哭笑不得写一句话?
- 人民的名义|《狂飙》与《人民的名义》的差距,就是高启强跟赵瑞龙的段位差