Java专题:Servlet必须要了解的点

Servlet

  • Servlet定义

    全称Java Servlet。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。引自Wikipedia

Servlet生命周期

  • 加载

    容器通过类加载器使用servlet类对应的文件加载servlet

  • 创建

    通过调用servlet构造函数创建一个servlet对象

  • 初始化

    调用init方法初始化

  • 处理HTTP请求

    每当有一个客户请求,容器会创建一个线程来处理客户请求

  • 销毁

    调用destroy方法让servlet自己释放其占用的资源

Servlet处理HTTP请求过程

  1. Web客户向Servlet容器发出Http请求;
  2. Servlet容器解析Web客户的Http请求;
  3. Servlet容器创建一个HttpRequest对象,在这个对象中封装Http请求信息;
  4. Servlet容器创建一个HttpResponse对象;
  5. Servlet容器调用HttpServlet的service方法,这个方法中会根据request的Method来判断具体是执行doGet还是doPost,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象;
  6. HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息;
  7. HttpServlet调用HttpResponse的有关方法,生成响应数据;
    8.Servlet容器把HttpServlet的响应结果传给Web客户。

Java Servlet 体系

Java Servlet 体系组成

  • Servlet interface
  • GenericServlet class
  • HttpServlet class
  • ServletRequest 和 HttpServletRequest inteface
  • ServletResponse 和 HttpServletResponse interface
  • ServletConfig
  • ServletContext

Servlet 各组件间的关系

  • 组件关系有实现、继承、依赖,具体如下图所示
    在这里插入图片描述
    在图中可以看出各个组件之间的关系,Servlet以及HttpServlet需要依赖相关的Request和Response作为参数输入,至于Request和Response内的数据由容器负责封装。

从客户端请求到服务器返回响应过程中,数据的流动过程

  • 服务器端容器以tomcat为例
  1. 浏览器向目标地址发送HTTP请求数据;(扩展:可以了解一下网络协议TCP/IP)
  2. tomcat接收到请求数据;
  3. tomcat解析Socket与封装数据(Request、Response、客户端相关等)

    tomcat解析具体过程可参考如下链接:
    https://blog.csdn.net/li295214001/article/details/48133989

  4. 执行相应的servlet生命周期中的五步,在此过程中需要注意的点有

    相关Servlet何时实例化

    如果有在web.xml的相关servlet中配置loadOnStartup属性,如下,则在容器(这里指tomcat)启动时,就创建实例;

        <servlet>
            <servlet-name>HelloServlet</servlet-name>
            <servlet-class>com.servlet.HelloServlet04</servlet-class>
            <load-on-startup>1(任意大于零的数字)</load-on-startup>  
         </servlet>
    

    如果未配置,则在有对此Servlet请求时,进行实例化;

  5. 将Response数据回传容器,由容器与客户端进行响应数据传输。

Servlet销毁

  1. 关闭容器
  2. 没了,destroy()只是用于销毁后的处理事宜,类似于try/catch/finally中的finally,或用于GC的finalize()。

Servlet需要注意的地方

  1. Servlet是单例多线程的,即同一个Servlet只初始化一次,但是service()方法支持多线程调用。
  2. Servlet是非线程安全的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值