servlet 理解大全

看完我的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); } %>

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用接口集合实现简单算法

    用户2436820
  • rust leetcode Longest Substring Without Repeating Characters #3

    用户2436820
  • 证明angular2+只会维护一个相同的service实例

    用户2436820
  • JavaWeb09-Servlet(Java真正的全栈开发)

    Servlet 一.Servlet 1. servlet介绍 Servlet 是在服务器上运行的小程序。Servlet 的主要功能在于交互式地浏览和修改数据,生...

    Java帮帮
  • Servlet基础——快速了解什么是Servlet

    Tanyboye
  • Servlet是如何实现MVC的?

    Servlet是一种服务器端的编程语言,是J2EE中比较关键的组成部分,Servlet技术的推出,扩展了Java语言在服务器端开发的功能,巩固了Java语言在服...

    MonroeCode
  • Servlet详细教程

    roobtyan
  • web开发中 web 容器的作用(如tomcat)什么是web容器?web容器的作用容器如何处理请求URL与servlet映射模式

    我们讲到servlet可以理解服务器端处理数据的java小程序,那么谁来负责管理servlet呢?这时候我们就要用到web容器。它帮助我们管理着servlet等...

    desperate633
  • servlet就是这么简单

    Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库...

    好好学java
  • 浅谈servlet的生命周期servlet的生命周期详解servlet生命周期中三大重要的时刻

    servlet从被加载到销毁经历了多个阶段,其中需要我们十分了解每个阶段的意义作用,才能更好地编写相关的servlet程序。

    desperate633

扫码关注云+社区

领取腾讯云代金券