servlet 理解大全

作者: 奔跑的蛙牛 | 来源:发表于2018-07-03 23:30 被阅读149次

    看完我的servlet大全希望你对servlet有个清晰的认识

    JVM与编辑器对比

    JVM 编辑器
    JVM让程序运行 编辑器产生文件
    严格进行语法检查 编译文件变成二进制(速度快的一方面原因)
    JVM控制存取的安全性问题 对文件进行安全性检查,规避大部分错误

    java拾荒

    java创建的对象存放在堆中。java虚拟机会主动察觉不再使用的java对象,内存紧张的时候,垃圾收集器会启动清理垃圾,回收空间

    小思考

    1. java通过public、static、final使变量展现类似全局变量的能力
    2. 数量庞大的文件,压缩成包,定义mainfest文件指出main所在的启动类

    什么是容器?

    1. servlet没有main方法。他们受控于另一个java应用,这个java应用称之为容器。
    2. tomact 就是一个容器,web请求servlet,服务器先把请求交给容器,由容器向servlet提供HTTP请求和响应,而且由容器调用servlet的doPos()和doGet()方法,之后请求处理过之后再到达web容器 web服务器再返还给客户端


      image.png

    如何在没有容器的前提下,实现类似tomcat容器的功能?

    1. 创建与服务器的socket连接,并为这个socket创建一个监听者
    2. 创建一个线程管理器
    3. 实现安全
    4. 对日志之间的过滤
    5. jsp支持
    6. 还有内存管理

    容器能提供什么?

    1. 通信支持 无需建立ServletSocket,监听端口,创建流。有内在API,只考虑业务

    2. 控制servlet的生命周期

    3. 多线程支持

    4. 声明方式实现安全 类似xml部署描述文件

    5. jsp支持 容器把jsp代码翻译成java代码

    浏览器输入一个url并返回html文件的过程

    1. 浏览器把请求交给web容器
    2. 容器根据url找到正确的servlet,并把请求交给这个servlet
    3. servlet 调用model返回一个结果,并把结果增加到请求对象中
    4. servlet 把请求分派给jsp
    5. jsp从请求对象中得到回答
    6. jsp组合生成页面
    7. 容器把页面交给用户

    servlet 技术模型

    1. 对应http方法使用httpServlet对应的方法
    2. 使用httpServletRequest接口,编写代码获取请求信息
    3. 使用httpServletReponse接口,设置http响应或设置响应头
    4. servlet的生命周期和事件 (1)servlet类加载(2)servlet类实例化(3)调用service方法
      (4)调用service方法-->从httpServlet继承而来,doget,dopost由它调用(5)调用destory方法

    servlet 参与流程

    url指向servlet--->容器创建两个httpservletrequest对象和httpservletresponse对象--->容器根据url找到对应的servlet,为servlet创建线程,塞入两个请求对象--->servlet根据用户的http方法调用相应的方法--->servlet返回响应对象--->service方法结束,线程撤销或销毁,对象不保留,客户端得到相应

    servlet生命周期图解

    image.png

    每一个http请求就是一个线程

    servletConfig和servletContext

    1. 每个servlet又一个servletConfig对象,用于向servlet传递部署信息,用于访问servletContext
    2. 每个web应用又一个servletContext,用于访问web参数相当于公告栏和获取一些应用基本信息

    编写监听者类模仿数据库操作

      public class MyServletContextListener implements ServletContextListener {
        public void contextInitialized(ServletContextEvent event){
        ServletContext sc = event.getServletContext();
        String dogBreed = sc.getInitParamter("breed");
        Dog d = new Dog(dogBreed);
        sc.setAttribute("dog",d);  // 其他servlet就能得到这个值了
    }
    public void contextDestory(ServletContextEvent event){
    // 这里什么都不做
    }
    }
    
    

    JSP生命周期(不能在详细了...)

    只有第一个请求 会具有如此复杂的操作

    1. 一堆jsp文件部署为web应用的一部分
    2. 容器读取这个应用的web.xml,但是对.jsp文件不做任何处理
    3. jsp 等待着请求来请求
    4. 客户点击连接请求jsp
    5. 服务器将.jsp翻译成一个servlet的java源代码
    6. 会在这个阶段发现jsp源代码错误
    7. 容器把.java文件翻译成.class文件 会在这里捕获到java语法错误
    8. 容器加载新生成的servlet类
    9. 容器实例化servlet类,并导致servlet的jspinit方法运行
    10. 对象现在成为一个真正的servlet,准备就绪接受客户请求
    11. 容器创建一个新线程处理客户请求,servlet的_jspService()方法运行
    12. 客户返回一个响应或者转发到另一个组件

    初始化JSP

    可以在JSP中完成servlet的初始化工作,但是与常规的servlet稍有不同
    
    1. 配置servlet初始化参数
      配置jsp初始化参数与普通无差别,区别就在于一个<jsp-file> \
    // 请看下面代码
    <web-app>
        <servlet>
              <servlet-name>email</servlet-name>
              <jsp-file>/TestInit.jsp</jsp-file>
              <init-param>
                  <param-name>email</param-name>
                  <param-value>gaomengjie_1@163.com</param-value>
              </init-param>
        </servlet>
        <servlet-mapping>
              <servlet-name>MyTestInit</servlet-name>
              <url-pattern>/TestInit.jsp</url-pattern>
        </servlet-mapping>
    </web-app>
    
    1. 覆盖jspInit()
      <%!
      public void jspInit(){
      ServletConfig sConfig = getServletConfig();
      String emailAddr = sConfig.getInitParameter("email");
      ServletContext ctx = getServletContext();
      ctx.setAttribute("mail",emailAddr);
      }
      %>

    相关文章

      网友评论

      • 不会取名的木子李:所以 到底啥是个servlet
        奔跑的蛙牛:@不会取名的木子李
        百度了一下 https://blog.csdn.net/qq_39688352/article/details/76794973
        奔跑的蛙牛:@不会取名的木子李 啥是?教教我
      • 一滴水的坚持:我是人,我来看
        奔跑的蛙牛:@一滴水的坚持
        servlet

        Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

        狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器
        奔跑的蛙牛:@一滴水的坚持 谢老哥
      • 奔跑的蛙牛:怎么一个人看的都没有,好失望!!!~~~

      本文标题:servlet 理解大全

      本文链接:https://www.haomeiwen.com/subject/xqfsuftx.html