• java web----servlet概念


    servlet概念

      狭义的Servlet 是指Java 语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的(servlet通俗理解就是所有实现了servlet接口的实现类,程序员自己写了类继承了HTTPServlet,而HttpServlet继承了这个servlet接口,实现了这个接口,所有支持servlet标准的容器(服务器),就可以认识和处理我们写了servlet类了),一般情况下,人们将Servlet理解为后者。
      Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet 只用来扩展基于HTTP协议的Web服务器 

    特点

    • Servlet的运行必须要支持Servlet标准的Web容器,像Tomcat、Jboss、Weblogic、WebSphere、Jetty等都支持。
    • Servlet的实现遵循了服务器能够识别的规则,也就是服务器会自动的根据请求调用对应的servlet进行请求处理。
    • 简单方便,可移植性强

    运行流程

    • 浏览器发送请求到服务器,服务器根据请求URL地址中的URI信息在webapps目录下找到对应的项目文件夹,然后在web.xml中检索对应的servlet类(找到继承了servlet接口的类),通过反射实例化这个类。调用service方法,通过service方法来调用doget、dopost方法(注意,这个其他的方法,都是通过service方法来调用的,因为tomcat默认只会调用service方法)

    Servlet生命周期

    1、生命周期(默认)

      当第一次servlet(类)被实例化加载到内存之后(默认第一次请求到来,才加载到内存),一直到服务器关闭

    2、生命周期(配置)

      在web.xml中设置了load-on-startup

    <servlet>
            <servlet-name>ServletDemo</servlet-name>
            <servlet-class>com.zy.servlet.ServletDemo</servlet-class>
            <load-on-startup>1</load-on-startup>  //设置随服务器启动,就将servlet加载到内存,数字越小,越优先加载到内存中
    </servlet>
    <servlet-mapping>
            <servlet-name>ServletDemo</servlet-name>
            <url-pattern>/my</url-pattern>
    </servlet-mapping>
    • 1.加载:容器通过类加载器使用Servlet类对应的文件来加载Servlet 
    • 2.创建:通过调用Servlet的构造函数来创建一个Servlet实例
    • 3.初始化:通过调用Servlet的init()方法来完成初始化工作,这个方法是在Servlet已经被创建,但在向客户端提供服务之前调用。(只初始化一次)
    • 4.处理客户请求:Servlet创建后就可以处理请求,当有新的客户端请求时,Web容器都会创建一个新的线程(在并发编程下servlet是线程不安全的)来处理该请求。接着调用Servlet的Service()方法来响应客户端请求(Servic方法中根据请求的method属性来调用doGet()和doPost()) 
    • 5.卸载:容器在卸载Servlet之前需要调用destroy()方法,让Servlet释放其占用的资源。

    Servlet使用

    请求的数据如果出现乱码

    请求中文乱码解决:
    使用公共配置
        get方式:
            步骤一:req.setcharacterEncoding("utf-8");
            步骤二:
                  在tomcat的目录下的conf目录中修改server.xml文件:在Connector标签中增加属性<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" useBodyEncodingForURI="true"/>  //多加了一个useBodyEncodingForURI="true";
                  或者参考:https://www.jb51.net/article/145741.htm
        post方式:
            req.setCharacterEncoding("utf-8");
    

      

  • 相关阅读:
    考研打卡_Day018
    如何使用python中的pymysql操作mysql数据库
    Linux系统目录结构和常用目录主要存放内容的说明
    MySQL基础入门使用和命令的使用
    Python中property属性的概论和使用方法
    如何有效的优化自己的网站访问速度
    机器学习中的特征工程学习
    ffmpeg中c语言sdk多媒体互转主要使用的api
    FFmpeg使用c语言sdk实现打印视频的信息
    ffmpeg使用C语言sdk实现抽取视频中的视频数据
  • 原文地址:https://www.cnblogs.com/yanxiaoge/p/13803166.html
Copyright © 2020-2023  润新知