Servlet

Posted fourous

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Servlet相关的知识,希望对你有一定的参考价值。

技术图片
虽然目前servlet可能看起来和jsp一样过时,但是很多框架的底层,服务端和客户端通信都是用的这个

servlet

servlet是用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。简单的理解就是服务器端,接受客户端过来的数据,通过解析request,返回respond的工具,可以理解为一个有5个方法的接口,一般来说实现了servlet的类都可以叫做servlet。
但是如果一个单独的servlet是不能跟客户端通信的,实际通信的是tomcat,tomcat监听端口(一般是8080),请求过来后,根据url等信息,确定要将请求交给哪个去处理,然后调用那个servlet的service方法,service方法返回一个response对象,tomcat再把这个response返回给客户端。
技术图片

基本实现

servlet是具有5个方法的类,一般都是直接采用继承的方式重写就行,5个方法包括3个周期方法和2个其他方法
技术图片

  • init(ServletConfig config)
  • destroy
  • service
  • getServletInfo
  • getServletConfig

其中对于init 和destroy周期方法只调用一次,而对于service方法,只要请求进来就会调用一次,所以我们的业务逻辑都是写在service方法里面的,查看源码,servlet不会直接实现service方法,需要自己实现get post操作,这样肯定很麻烦,所以大多数操作都是直接继承HttpServlet方法实现其中的service方法,对于HttpServlet类,这是一个抽象类,不允许被实例化,也就就是不能被new,继续查看httpServlet的源码会发现,这个类继承了一个GernericServlet类,这类也是个抽象类,但是这里直接实现了servlet,对于Servlet,没有直接实现其中的service方法。
那么为什么这么麻烦,我们直接实现HttpServlet,并且HttpServlet直接继承Servlet就行了,为什么要隔一层GenericServlet,查看GenericServlet可以看到基本方法都没有什么用,只是周期函数init中,加了两行

public void init(ServletConfig config) throws ServletException
  this.config=config;
  this.init();

这里作用

以上是关于Servlet的主要内容,如果未能解决你的问题,请参考以下文章

ServletServlet 详解(使用+原理)

ServletServlet容器等内容讲解

web.xml servletservlet-mapping配置

ServletServlet学习之基础篇

ServletServlet学习之基础篇

ServletServlet学习之基础篇