Servlet 入门-- Servlet定义、Servlet生命周期、HttpServlet、Servlet配置、ServletConfig、ServletContext

版权声明:非经本人允许,禁止转载 https://blog.csdn.net/Kfie66/article/details/82346839

 

Servlet的定义

Servlet是运行在服务端的Java小程序,是sun公司提供的一套用于处理客户端请求以及响应给浏览器(客户端)动态资源的规范。Servlet是JavaWeb的三大组件之一(Servlet、Filter、Listener),且是最重要的

Servlet的作用(重要)

  • 1.获取客户端的请求数据(接收请求)

  • 2.处理客户端的请求

  • 3.分发转向(重定向,请求转发)

  • 4.响应客户端

编写人生中第一个Servlet(实现Servlet接口)

  1. 定义一个类,实现接口Servlet

  1. 实现里面的方法 ,重点关注:

  • init ,实例化Servlet对象时调用

  • service,接收到客户端发起的请求时调用

  • destory,服务关闭时调用

  1. 配置servlet(不进行配置的话,客户端无法访问Servlet)

  1. 发布项目,访问servlet

    http://localhost:8080/demo

Servlet的执行流程

二、Servlet生命周期

  • 生命周期

定义:一种事物从出生(创建)到消亡的过程。

用到Servlet中,就是从Servlet创建到Servlet对象销毁的这个过程就是Servlet的生命周期

Servlet什么时候创建(初始化):第一次有请求到达这个Servlet的时候初始化

Servlet什么时候销毁:服务器关闭或者项目移除的时候就销毁。

  • 生命周期方法

定义:一个对象从被创建到销毁必然会走的方法 。

  • init 【创建实例的时候调用】默认是第一次请求该Servlet的时候创建实例

servlet在初始化的时候,就执行该方法。 只会执行一次, 在创建实例的时候执行, 默认在初次访问的时候执行。

  • service【处理请求,每次有请求到达该Servlet的时候调用】

用于接收请求,和对请求作出响应,service方法是一个非常重要的生命周期方法

处理请求的时候,来一次请求,就调用一次。

service()方法其实是用于处理请求的。

  • destroy【销毁实例】

当servlet实例销毁的时候就调用

​ 1.关闭服务器的时候,就销毁了。 shutdown.bat ---> stop Server

​ 2.从服务器中移除该项目

  • 注意:doGet()和doPost()方法不是生命周期方法

 以下是Servlet源码中的注释,解释了Servlet的生命周期。
	 * <p>This interface defines methods to initialize a servlet,
	 * to service requests, and to remove a servlet from the server.
	 * These are known as life-cycle methods and are called in the
	 * following sequence:
	 * <ol>
	 * <li>The servlet is constructed, then initialized with the <code>init</code> method.
	 * <li>Any calls from clients to the <code>service</code> method are handled.
	 * <li>The servlet is taken out of service, then destroyed with the 
	 * <code>destroy</code> method, then garbage collected and finalized.
	 * </ol>

生命周期方法的应用

​ init()方法中,可以做一些全局参数的初始化。

​ service()方法中,可以接收和处理请求,及对请求做出响应。

​ destroy()方法中,可以做一些资源的回收和释放。做数据的保存

三、Servlet通用写法(继承HttpServlet类)

继承HttpServlet的运行过程

前半段思路与前面的图一样。 后半段运行过程如下:

	http://loclahost:8080/CommonServlet/demo
	1. 必然会找到ServletDemo02
	2. 执行service方法 , 但是很抱歉,这个类没有这个方法。
	3. 执行父类的servcie方法  service(ServletRequest  , ServletResponse)
	4. 在父类的service方法中,对请求方式进行判定, 如果是Get方式,调用doGet , 如果是post方式,那么调用doPost
	5. HttpServlet 里面定义有doGet 和 doPost ,  但是我们的子类也复写了这两个方法。 所以在service里调用的doGet 和 doPost ,其实走的是子类的方法。

四、Servlet配置

  1. servlet提前初始化(这个操作在实际开发中基本不会去做,了解即可!)

    一般来说servlet只有在初次访问的时候,才会执行init方法实例化, 如果init方法执行的逻辑比较消耗时间(但是实际开发中,不可能让init方法中做耗时操作),那么我们可以让这个实例化的工作稍微提前。

    2.提前到什么时候?
    可以提前到,部署项目完毕就开始创建实例。
     <servlet>
      	<servlet-name>demo</servlet-name>
      	<servlet-class>com.itheima.servlet.ServletDemo</servlet-class>
    	数字越小,启动时机就越早,一般建议从2开始写
      	<load-on-startup>2</load-on-startup>
      </servlet>
  2. Servlet映射配置 url-pattern

有三种写法

1.以全路径匹配方式  以 / 打头 (最常用的方法   96%)
	如 :  /demo  /aa    /cc	
	http://localhost:8080/项目名/demo
	http://localhost:8080/项目名/aa
	http://localhost:8080/项目名/cc

2. 以目录匹配方式  以 / 打头, 以 * 结尾 (基本上用不到,了解即可)

	* 代表通配符, 只要前半段一样,后半段不管是什么路径,都能访问。

	如: /demo/*  /aa/*  /cc/*   /*

	http://localhost:8080/项目名/demo/aaa/bbb/cc

3.  以后缀名方式  以 * 打头 

	如:  *.jpg  *.txt  *.aa    *.avi

	http://localhost:8080/项目名/demo.do

五、ServletConfig(实际开发中应用不多)

获取ServletConfig对象的方法:getServletConfig()

ServletConfig对象的常用方法

  • getServletName(),获取Servlet在web.xml中配置的<servlet-name>标签中的名字

  • getInitParameter(name),获得Servlet的初始化参数的值。

  • getInitParameterNames(),获得Servlet的所有初始化参数的名称

主要应用在框架中

六、ServletContext

定义

当服务器启动的时候,就会为它所托管的每一个项目都创建一个ServletContext的实例对象,并且每个项目中有且只有一个该类的实例对象。

获取ServletContext实例对象的方法

  • 1.调用Servlet自己的getServletContext()方法

  • 2.调用request对象的getServletContext()方法

  • 3.调用ServletConfig对象的getServletContext()方法

ServletContext的作用

  • 1.获取全局的初始化参数

    • getInitParameter("参数名")

  • 2.作为域对象存值和取值(域对象:有一定作用域,然后在该作用域中可以实现数据共享)

    • 存值:setAttribute("参数名",值)

    • 取值:getAttribute("参数名")

 

​ ​

猜你喜欢

转载自blog.csdn.net/Kfie66/article/details/82346839