【JavaWeb】Servlet知识点总结

文章目录

  • Servlet的基本概念
    • 什么是Servlet?
    • 基本功能?
    • 实质
  • Servlet的五大方法
    • 生命周期方法
    • 其他方法
  • Servlet执行的完整过程
    • 浏览器请求
    • 服务器创建对象
    • 执行init()方法
    • 调用service()方法
    • 向浏览器做出相应
  • 关于域对象的总结
  • 关于重定向和请求转发的区别

Servlet的基本概念

什么是Servlet?

Servlet是运行在服务端的java小程序,是由Sun公司提供的一个接口。

基本功能?

Servlet用来处理客户端发送来的请求,并根据请求处理这些请求并相应给浏览器的一组动态资源。

实质

就是 java代码,通过javaAPI动态向客户端输出内容。


Servlet的五大方法

生命周期方法

1.void init(ServletConfig var1)

  • 调用时间:当Servlet对象被服务器创建之后。
  • 调用者:服务器调用。
  • 调用次数:仅被调用一次。

2.void service(ServletRequest var1, ServletResponse var2)

  • 调用时期:每次处理请求时都会调用一次。
  • 调用次数:可以调用多次。

3.void destroy()

  1. 调用时间:服务器关闭连接之前调用。
  2. 调用次数:仅调用一次。

【注意】
理解init()和destory()方法时可以这样理解:
将Servlet的生命周期形象地理解成一个人的生命历程,init()方法就相当是这个Servlet对象出生之后被调用的;而destory()方法就是相当于这个对象临死之前被调用的。

其他方法

1.ServletConfig getServletConfig()
返回ServletConfig对象(配置信息)
2.String getServletInfo();
返回有关Servlet的信息


Servlet执行的完整过程

概述:
Servlet执行的完整过程大致可以总结为:浏览器请求–>服务器创建对象–>执行init()方法–>调用service()方法–>向浏览器做出相应

浏览器请求

【JavaWeb】Servlet知识点总结_第1张图片
!当浏览器访问Servlet的路径时,并不是直接执行Servlet对应的类的,而是先去web.xml文件中去找这个路径,这个访问过程为:
根据url-pattern–>找到Servlet对应的name–>最后找到其对应的class类


服务器创建对象

【JavaWeb】Servlet知识点总结_第2张图片
服务器通过解析Servlet的路径并找到其对应的class类之后,就会创建一个Servlet对象,同时也创建了servletConfig,里面存放了一些初始化信息。(注意服务器只会创建一次servlet对象,所以servletConfig也只有一个)

执行init()方法

【JavaWeb】Servlet知识点总结_第3张图片1.对象创建好之后,首先要执行init方法,但是我们发现我们自定义类下没有init方法,所以程序会到其父类HttpServlet里找
2.我们发现HttpServlet里也没有init方法,所以继续向上找,既向其父类GenericServlet中继续寻找,在GenericServlet中我们发现了init方法,则执行init方法(对接口Servlet中的init方法进行了重写)
注意:
在GenericServlet中执行public void init(ServletConfig config)方法的时候,又调用了自己无惨无方法体的init()方法,其目的是为了方便开发者,如果开发者在初始化的过程中需要实现一些功能,可以重写此方法。

调用service()方法

【JavaWeb】Servlet知识点总结_第4张图片接着,服务器会先创建两个对象:ServletRequest请求对象和ServletResponse响应对象,用来封装浏览器的请求数据和封装向浏览器的响应数据。
1.接着服务器会默认在我们写的类里寻找service(ServletRequest req, ServletResponse res)方法,但是DemoServlet中不存在,那么会到其父类中寻找。
2.到父类HttpServlet中发现有此方法,则直接调用此方法,并将之前创建好的两个对象传入。
3.然后将传入的两个参数强转,并调用HttpServlet下的另外个service方法。
4.接着执行service(HttpServletRequest req, HttpServletResponse resp)方法,在此方法内部进行了判断请求方式,并执行doGet和doPost,但是doGet和doPost方法已经被我们自己重写了,所以会执行我们重写的方法。
为什么不直接重写service方法?
因为如果重写service方法的话,我们需要将两个对象自己进行强转,以及一系列的安全保护判断重新写一遍,会存在安全隐患。

向浏览器做出相应

【JavaWeb】Servlet知识点总结_第5张图片最后处理完数据后,将数据响应到浏览器。
【注意】
为什么HttpServlet是一个抽象类,但是在这个类中却没有抽象方法?

理解一:
如果HttpServlet不是抽象类的话,就可以产生Httpser对象,但是单纯的HttpServlet对象时不能处理任何业务逻辑的,里边方法没有功能;所以要定义成抽象类,防止创建对象。
但是继承了HttpServlet类创建servlet就方便多了,你要根据自己需要然后重写需要的方法,让后自定义逻辑,这样就方便多了。

关于域对象的总结

见另一篇博客总结^^

关于重定向和请求转发的区别

你可能感兴趣的:(javaweb)