前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >servlet 理解大全

servlet 理解大全

作者头像
用户2436820
发布2018-09-05 10:24:19
4190
发布2018-09-05 10:24:19
举报
文章被收录于专栏:奔跑的蛙牛技术博客

看完我的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参数相当于公告栏和获取一些应用基本信息

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

代码语言:javascript
复制
  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

代码语言:javascript
复制
可以在JSP中完成servlet的初始化工作,但是与常规的servlet稍有不同
  1. 配置servlet初始化参数 配置jsp初始化参数与普通无差别,区别就在于一个<jsp-file> \
代码语言:javascript
复制
// 请看下面代码
<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); } %>
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.07.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 看完我的servlet大全希望你对servlet有个清晰的认识
    • JVM与编辑器对比
      • java拾荒
        • 小思考
          • 什么是容器?
            • 如何在没有容器的前提下,实现类似tomcat容器的功能?
              • 容器能提供什么?
                • 浏览器输入一个url并返回html文件的过程
                  • servlet 技术模型
                    • servlet 参与流程
                      • servlet生命周期图解
                        • 每一个http请求就是一个线程
                          • servletConfig和servletContext
                            • 编写监听者类模仿数据库操作
                              • JSP生命周期(不能在详细了...)
                                • 初始化JSP
                                相关产品与服务
                                容器服务
                                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                领券
                                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档