web开发中 web 容器的作用(如tomcat)

我们讲到servlet可以理解服务器端处理数据的java小程序,那么谁来负责管理servlet呢?这时候我们就要用到web容器。它帮助我们管理着servlet等,使我们只需要将重心专注于业务逻辑。

什么是web容器?

servlet没有main方法,那我们如何启动一个servlet,如何结束一个servlet,如何寻找一个servlet等等,都受控于另一个java应用,这个应用我们就称之为web容器。

我们最常见的tomcat就是这样一个容器。如果web服务器应用得到一个指向某个servlet的请求,此时服务器不是把servlet交给servlet本身,而是交给部署该servlet的容器。要有容器向servlet提供http请求和响应,而且要由容器调用servlet的方法,如doPost或者doGet。

web容器的作用

servlet需要由web容器来管理,那么采取这种机制有什么好处呢?

  • 通信支持
    利用容器提供的方法,你可以简单的实现servlet与web服务器的对话。否则你就要自己建立server搜创可贴,监听端口,创建新的流等等一系列复杂的操作。而容器的存在就帮我们封装这一系列复杂的操作。使我们能够专注于servlet中的业务逻辑的实现。

  • 生命周期管理
    容器负责servlet的整个生命周期。如何加载类,实例化和初始化servlet,调用servlet方法,并使servlet实例能够被垃圾回收。有了容器,我们就不用花精力去考虑这些资源管理垃圾回收之类的事情。

  • 多线程支持
    容器会自动为接收的每个servlet请求创建一个新的java线程,servlet运行完之后,容器会自动结束这个线程。

  • 声明式实现安全
    利用容器,可以使用xml部署描述文件来配置安全性,而不必将其硬编码到servlet中。

  • jsp支持
    容器将jsp翻译成java!

容器如何处理请求

How the Container handles a request01.PNG

client点击一个URL,其URL指向一个servlet而不是静态界面。

How the Container handles a request02.PNG

容器识别出这个请求索要的是一个servlet,所以创建两个对象:

  • httpservletrequest
  • httpservletresponse
03.PNG

容器根据请求中的URL找到对应的servlet,为这个请求创建或分配一个线程,并把两个对象request和response传递到servlet线程中。

Paste_Image.png

容器调用servlet的service()方法。根据请求的不同类型,service()方法会调用doGet()或者doPost()方法。

Paste_Image.png

doGet()方法生成动态页面,然后把这个页面填入到response对象中,此时,容器仍然拥有response对象的引用。

Paste_Image.png

线程结束。容器把response对象转换成http响应,传回client,并销毁response和request对象。

URL与servlet映射模式

<servlet>
    <servlet-name>Ch1Servlet</servlet-name>
    <servlet-class>ch1Servlet.Ch1Servlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>Ch1Servlet</servlet-name>
    <url-pattern>/Ch1Servlet</url-pattern>
  </servlet-mapping>

servlet有三个名字:

  • 客户知道的URL名 <url-pattern>/Ch1Servlet</url-pattern>
  • 部署人员知道的秘密的内部名 <servlet-name>Ch1Servlet</servlet-name>
  • 实际文件名 <servlet-class>ch1Servlet.Ch1Servlet</servlet-class>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0 系列目录# WEB请求处理 WEB请求处理一:浏览器请求发起处理 WEB请求处理二:Nginx请求反向代理 本...
    七寸知架构阅读 14,032评论 22 190
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,742评论 18 399
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,342评论 11 349
  • 这部分主要是与Java Web和Web Service相关的面试题。 96、阐述Servlet和CGI的区别? 答...
    杂货铺老板阅读 1,425评论 0 10
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139