• 学习Servlet的基础


    何为Servlet

      它是基于Java技术的Web组件,主要负责处理用户的请求和用户的响应以及页面的跳转,它其实就是一个类。

    JSP和Servlet的关系

       JSP首先转换为.java文件,被JVM编译成一个.class,其实上他俩就是一个东西
      JSP负责进行页面数据的渲染
      Servlet处理请求和相应

    Web服务器在与客户端交互时Servlet的工作过程:

        1. 在客户端对web服务器发出请求

        2. web服务器接收到请求后将其发送给Servlet

        3. Servlet容器为此产生一个实例对象并调用ServletAPI中相应的方法来对客户端HTTP请求进行处理,然后将处理的响应结果返回给WEB服务器.

        4. web服务器将从Servlet实例对象中收到的响应结构发送回客户端.

    Servlet的生命周期

      主要包含了四个阶段:

        1.加载和实例化

        2.初始化

        3.请求处理

        4.服务的终止

      详解:

    1.加载/实例化

      Servlet容器负责加载和实例化Servlet。当Servlet容器启动时,或者在容器检测到需要这个Servlet来响应第一个请求时,创建Servlet实例。当Servlet容器

    启动后,它必须要知道所需的Servlet类在什么位置,Servlet容器可以从本地文件系统、远程文件系统或者其他的网络服务中通过类加载器加载Servlet类,

    成功加载后,容器创建Servlet的实例。因为容器是通过Java的反射API来创建Servlet实例,调用的是Servlet的默认构造方法(即不带参数的构造方法),所

    以我们在编写Servlet类的时候,不应该提供带参数的构造方法。

     

    2.初始化

      在Servlet实例化之后,容器将调用Servlet的init()方法初始化这个对象。初始化的目的是为了让Servlet对象在处理客户端请求前完成一些初始化的工作,

    如建立数据库的连接,获取配置信息等。对于每一个Servlet实例,init()方法只被调用一次。在初始化期间,Servlet实例可以使用容器为它准备的

    ServletConfig对象从Web应用程序的配置信息(在web.xml中配置)中获取初始化的参数信息。在初始化期间,如果发生错误,Servlet实例可以抛出

    ServletException异常或者UnavailableException异常来通知容器。ServletException异常用于指明一般的初始化失败,例如没有找到初始化参数;而

    UnavailableException异常用于通知容器该Servlet实例不可用。例如,数据库服务器没有启动,数据库连接无法建立,Servlet就可以抛出

    UnavailableException异常向容器指出它暂时或永久不可用。

    关于Servlet的创建

      方式一:  

        1.实现Servlet接口
          init():初始化Servlet
          默认Servlet的初始化在首次访问到Servlet时进行初始化操作,可以通过<load-on-stratup>控制初始化顺序,如果这个节点为负数或者不配置则是默认的初始化顺序
          如果这个节点的值正数,则根据数的大小进行初始化操作,也就是说在服务启动的时候会初始化Servlet,并且值越小初始化操作越先执行
          getServletConfig()获取Servlet配置信息
          service()负责处理用户的请求和相应
          当每一次请求到Servlet时会执行service()方法
          getServletInfo()获取Servlet信息
          destroy()销毁
        当项目服务停止时会将Servlet容器中装载的所有Servlet释放掉
          访问Servlet:
          1.配置Web.xml
            <!-- 同一个Servlet在Web.xml当中有两项配置 -->
            <servlet>
            <!--Servlet名称-->
            <servlet-name>DemoServlet</servlet-name>
            <!--对应Servlet的路径(全路径)-->
            <servlet-class>com.demo.servlet.DemoServlet</servlet-class>
            <!--设置Servlet初始化时机-->
            <load-on-startup>1</load-on-startup>
            </servlet>
            <servlet-mapping>
            <!--映射的名字-->
            <servlet-name>DemoServlet</servlet-name>
            <!--暴露给用户的访问地址,并且可以多个-->
            <url-pattern>/DemoServlet</url-pattern>
            </servlet-mapping>
        2.注解
          //我们通过Servlet模板生成的注解默认是只有一个访问地址,如果说要加上其他配置信息,需要以键值对方式体现出来
          @WebServlet("/DemoServlet")
          @WebServlet(loadOnStartup=1,urlPatterns= {"/DemoServlet","/yyy"})
        3.注意问题:
          web.xml和注解方式可以同时存在,但是name和url必须是不相同的,否则会报错
          Servlet和JSP都是单例的,但是现在如果两种方式同时存在,那么会创建两个

      方式二:

        继承GenericServlet类
        service()负责处理用户的请求和相应
        在GenericServlet类中已经对Servlet接口中的4个方法进行了重写,所以子类不需要再次重写其余4个方法

     

      方式三:

        继承HttpServlet
        主要关注两个方法:
        doGet(HttpServletRequest request, HttpServletResponse response);
        doPost(HttpServletRequest request, HttpServletResponse response);

  • 相关阅读:
    eclipse maven POM 第一行提示异常Could not initialize class org.apache.maven.plugin.war.util.WebappStructureSerializer
    Tomcat搭建HTTP文件下载服务器
    Hui datetimepicker 插件不显示左右箭头问题
    【Python】拷贝&列表
    【Python】Python赋值引用、浅拷贝、深拷贝
    【Python】列表的复制
    【Python】电脑安装了多个版本Python,如何切换;
    【Python】定义类、创建类实例
    【Python】白名单方式净化
    c++ 对外提供头文件的模式
  • 原文地址:https://www.cnblogs.com/wangdayexinyue/p/11143225.html
Copyright © 2020-2023  润新知