浅谈Servlet

为什么还需要学习Servlet

我从Java SE转向Java Web学习的时候,心中就总有那么一个疑问,main函数去哪里了?为什么在学习Java SE的时候,总是从main函数开始运行,而在学习Java Web的时候,按照步骤莫名奇妙的就可以跑起来了。这个疑问之前困扰了我很久。

后面渐渐的Spring的兴起,渐渐的main函数又出现了。不得不说,Spring使得Java Web的学习曲线平滑了少许。不过现在回过头来看,对于Java EE来说,main函数已经封装在了 Web的服务器上了,也就是我们常见的Tomcat,还是Weblogic这样的中间件。而我们在编写Servlet的时候,就是在这些Web服务器的约定上进行编程,main函数的已经委托给了中间件来实现。

回过来看今天的Spring Boot,它帮我们封装了Tomcat,又对Servlet进行了封装。所以我们在开发Spring 项目的时候,就可以大大地降低了开发难度,提高开发的效率。
回到主题,为什么我们还需要学习Servlet呢?
尽管基于Sevrlet的JSP技术开始淘汰,但是追本溯源,Spring Boot的项目底层还是基于Servlet实现的,因此我们还是有必要对其进行学习

Servlet的本质

Servlet 是JavaEE规范的一种,其本质就是一个Java 的接口,我们通过实现这个接口,来达到我们的目的。Tomcat 通过调用service()的方法对请求进行操作。
如下就是一个Servlet的接口

public interface Servlet {       
     public void init(ServletConfig config) throws ServletException;             
     public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException;            
     public void destroy();    
     public String getServletInfo();      
     public ServletConfig getServletConfig();      
  } 

service 方法主要包含了两个参数,其中一个是ServletRequest代表着请求,另外一个是ServletResponse代表着相应。
我们最常用的Servlet就是HttpServlet, 他是Servlet接口的一个实现类,我们通过实现其中的doGet()和doPost()方法来对不同的请求进行操作。而这个doGet()和doPost()方法就是在HttpServlet中在调用的。

Tomcat是如何调用Servlet的

从Servlet的本质来看,其实他只是一个接口,而传入的参数是两个对象。
但是数据传输是使用二进制进行传输的,所以Tomcat的主要作用之一就是负责处理字节流,将字节流转换成ServletRequest和ServletResponse。
在处理字节流同时,还要负责维护Socket连接。除此之外,tomcat还需要加载管理Servlet以及Request请求。
Tomcat如何调用Servlet的,整一个流程可以简化为:

  1. 监听网络端口
  2. 接受网络请求连接
  3. 读取网络请求字节流
  4. 根绝具体应用层协议解析字节流,生成统一的Tomcat Request 对象
  5. 将Tomcat Request对象转换成标准的ServletRequest对象
  6. 调用Servlet容器,得到ServletResponse
  7. 将ServletResponse转化成Tomcat Response对象
  8. 将Tomcat Response对象转成网络字节流,将相应的字节流写回给浏览器

在这里插入图片描述

继续将连接器细化,可以分为三个部分

  • Endpoint负责提供字节流给Processor
  • Processor 负责提供 Tomcat Request 对象给 Adapter
  • Adapter 负责提供 ServletRequest 对象给容器
    在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值