Servlet介绍

  • Servlet简介

Servlet是在服务端运行的小程序。一个Servlet就是一个Java类,并且可以通过“请求-响应”编程模型来访问的这个驻留在服务器内里的Servlet程序。

             Servlet与其他普通的server扩展机制有以下进步:

            因为它采用了不同的进程处理模式,所以它比CGI更快。

            它使用了许多Web服务器都支持的标准的API。

            它继承了Java的所有优势,包括易升级以及平台无关性。

            它可以调用Java所提供的大量的API的功能模块。

  • Servlet生命周期

  

     

生命周期:就是一个对象从创建到销毁的过程.

Servlet生命周期:Servlet从创建到销毁的过程.

何时创建:用户第一次访问Servlet创建Servlet的实例

何时销毁:当项目从服务器中移除的时候,或者关闭服务器的时候.

            用户第一次访问Servlet的时候,服务器会创建一个Servlet的实例,那么Servlet中init方法就会执行.任何一次请求服务器都会创建一个新的线程访问Servlet中的service的方法.在service方法内部根据请求的方式的不同调用doXXX的方法.(get请求调用doGet,post请求调用doPost).当Servlet中服务器中移除掉,或者关闭服务器,Servlet的实例就会被销毁,那么destroy方法就会执行.

Servlet 生命周期指的是,Servlet 对象的创建、Servlet 对象的初始化、Servlet 对象服务的执行,及最终 Servlet 对象被销毁的整个过程。servlet生命周期图:

import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class firstServlet implements Servlet{
     public firstServlet() {
          System.out.println("调用无参数的构造方法");
     }
     @Override
     public void destroy() {
          // TODO Auto-generated method stub
          System.out.println("调用destroy方法");
     }
     @Override
     public ServletConfig getServletConfig() {
          // TODO Auto-generated method stub
          return null;
     }
     @Override
     public String getServletInfo() {
          // TODO Auto-generated method stub
          return null;
     }
     @Override
     public void init(ServletConfig arg0) throws  ServletException {
          System.out.println("调用init方法");
          
     }
     @Override
     public void service(ServletRequest arg0,  ServletResponse arg1) throws ServletException,  IOException {
          System.out.println("调用service方法");
     }
}
  • Servlet特征

Servlet是单例多线程的,只创建一个servlet对象,但是每次请求都会起一个线程并在自己线程栈内存中执行service方法。

一个 Servlet 实例只会执行一次无参构造器与 init()方法,并且是在第一次访问时执行。

用户每提交一次对当前 Servlet 的请求,就会执行一次 service()方法。

一个 Servlet 实例只会执行一次 destroy()方法,在应用停止时执行。

由于 Servlet 是单例多线程的,所以为了保证其线程安全性,一般情况下是不建议在 Servlet类中定义可修改的成员变量,因为每个线程均可修改这个成员变量,会出现线程安全问题。

默认情况下,Servlet 在 Web 容器启动时是不会被实例化的。

  • Servlet初始化

     Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。

    在初始化过程中,javax.servlet.Servlet接口的init()方法提供了Servlet的初始化信息。这样,Servlet可以对自己进行配置。

    init()方法获得了一个Servlet配置对象(ServletConfig)。这个对象在Servlet引擎中执行,并允许Servlet通过它获处相关参数。这个对象使得Servlet能够访问ServletContext对象。

  • Servlet环境

ServletContext 接口定义了一个Servlet环境对象,这个对象定义了一个在Servlet引擎上的Servlet的视图。通过使用这个对象,Servlet可以记录事 件、得到资源并得到来自Servlet引擎的类(例如RequestDispatcher对象)。一个Servlet只能运行在一个Servlet环境 中,但是不同的Servlet可以在Servlet引擎上有不同的视图。

如果Servlet引擎支持虚拟主机,每个虚拟主机有一个Servlet环境。一个Servlet环境不能在虚拟主机之间共享。

Servlet引擎能够允许一个Servlet环境有它自己的活动范围。

例如,一个Servlet环境是属于bank应用的,它将被映射到/bank目录下。在这种情况下,一个对getContext方法的调用会返回/bank的Servlet环境。

Servlet三大域对象的应用 request、session、application(ServletContext)

ServletContext是一个全局的储存信息的空间,服务器开始就存在,服务器关闭才释放。

request,一个用户可有多个;session,一个用户一个;而servletContext,所有用户共用一个。所以,为了节省空间,提高效率,ServletContext中,要放必须的、重要的、所有用户需要共享的线程又是安全的一些信息。

获取servletcontext对象:

   ServletContext sc = null;
   sc = request.getSession().getServletContext();
//或者使用
//ServletContext sc = this.getServletContext();
   System.out.println("sc=" + sc);

 

  • Servlet接口之间的关系

接口:Servlet、ServletConfig、ServletRequest、ServletResponse、HttpServletRequest、HttpServletResponse、ServletContext

类:HttpServlet(抽象类)、GenericServlet(抽象类)

ServletContext

ServletContext的对象是application是在项目初始化时被创建的。故servletContext随着应用初始化而被创建,随着应用的结束而被销毁。

ServletConfig:

在应用初始化的时候,Web容器在创建Servlet对象时会自动将web.xml中的servlet配置这些初始化参数封装到ServletConfig对象中,并在调用servlet的init方法时,将ServletConfig对象传递给servlet。所以我们可以通过ServletConfig对象就可以得到当前servlet的初始化参数信息。

ServletRequest:

ServletRequest的对象时request,其生命周期为request域,一个请求结束,则request对象结束。

ServletResponse:

ServletResponse的对象是response,一次响应结束,则response对象结束。

 

 

 

<!--  上诉为servlet的介绍  -->

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值