zoukankan      html  css  js  c++  java
  • 关于Servlet的原理以及常用类

    Servlet是JavaWeb的三大组件之一,它属于动态资源。

    在Servlet中通常需要:

      接收请求数据;

      处理请求;

      完成响应。

    实现Servlet有三种方式:

      实现javax.servlet.Servlet接口;

      继承javax.servlet.GenericServlet类;

      继承javax.servlet.http.HttpServlet类;

    与Servlet的生命周期相关的方法有:

      void init(ServletConfig);

      void service(ServletRequest,ServletResponse);

      void destroy();

    服务器会在Servlet第一次被访问时创建Servlet,或者是在服务器启动时创建Servlet。如果服务器启动时就创建Servlet,那么还需要在web.xml文件中配置(<load-on-startup>0</load-on-startup>)。也就是说默认情况下,Servlet是在第一次被访问时由服务器创建的。

     

    而且一个Servlet类型,服务器只创建一个实例对象.

    在Servlet被创建后,服务器会马上调用Servlet的void init(ServletConfig)方法。请记住, Servlet出生后马上就会调用init()方法,而且一个Servlet的一生。

    当服务器每次接收到请求时,都会去调用Servlet的service()方法来处理请求。服务器接收到一次请求,就会调用service() 方法一次,所以service()方法是会被调用多次的。

     

    Servlet是不会轻易离去的,通常都是在服务器关闭时Servlet才会离去!在服务器被关闭时,服务器会去销毁Servlet,在销毁Servlet之前服务器会先去调用Servlet的destroy()方法

     

    Servlet与线程安全

    因为一个类型的Servlet只有一个实例对象,那么就有可能会现时出一个Servlet同时处理多个请求,那么Servlet是否为线程安全的呢?答案是:“不是线程安全的”。这说明Servlet的工作效率很高,但也存在线程安全问题!

    所以我们不应该在Servlet中便宜创建成员变量,因为可能会存在一个线程对这个成员变量进行写操作,另一个线程对这个成员变量进行读操作。

     

    GenericServlet概述

    GenericServlet是Servlet接口的实现类,我们可以通过继承GenericServlet来编写自己的Servlet。

     

    HttpServlet类是GenericServlet的子类,它提供了对HTTP请求的特殊支持,所以通常我们都会通过继承HttpServlet来完成自定义的Servlet。

     

    HttpServlet类中提供了service(HttpServletRequest,HttpServletResponse)方法,这个方法是HttpServlet自己的方法,不是从Servlet继承来的。

    在HttpServlet的service(HttpServletRequest,HttpServletResponse)方法会去判断当前请求是GET还是POST,如果是GET请求,那么会去调用本类的doGet()方法,如果是POST请求会去调用doPost()方法,这说明我们在子类中去覆盖doGet()或doPost()方法即可。

     

    ServletContext

    服务器会为每个应用创建一个ServletContext对象:

    l  ServletContext对象的创建是在服务器启动时完成的;

    l  ServletContext对象的销毁是在服务器关闭时完成的。

      ServletContext对象的作用是在整个Web应用的动态资源之间共享数据!

     

     

    JSP---->Servlet---->编译.class文件 执行.

    扩展: 关于Session的创建和销毁

    Session:session将数据保存在服务器端.通过cookie回写了一个JSESSIONID.

    * session的创建和销毁:

    创建的时候:

    服务器端第一次调用getSession()方法的时候创建的.

    * 销毁:

    * 第一种:非正常关闭服务器.(正常关闭session不会销毁---序列化.tomcat/work路径下.)

    * 第二种:默认30分钟.tomcat/conf/web.xml中.

    * 第三种:手动调用了session.invalidate();

     

  • 相关阅读:
    迷宫广搜
    通过地址获取百度地图经纬度
    图片上传存储数据库
    spring boot加载配置文件的顺序
    阿里 短信认证
    spring boot properties文件与yaml文件的区别
    springboot pom问题及注解
    手机短信认证
    获取class对象的三种方法以及通过Class对象获取某个类中变量,方法,访问成员
    关于mysql优化问题
  • 原文地址:https://www.cnblogs.com/DreamDrive/p/4090989.html
Copyright © 2011-2022 走看看