tomcat 和 servlet 的关系

在刚开始学 java web 的时候,使用的是 MyEclipse,只知道 web 项目要写 servlet,然后在 servlet 中去调用逻辑层,最后返回相应的结果,响应前台。最后配合 web.xml 部署描述文件,web 项目就能跑起来了。再后来,使用了框架,也是停留在会用的程度。程序跑起来了,但是其中的原理,却不懂。甚至当时我不知道这和 tomcat 有什么关系,想不明白为什么有些面试会问你 tomcat 的相关信息,也没想过 tomcat 和 servlet 的关系。

直到最近,想起好像有这么一句话“servlet 会每个 http 请求启动一个线程去处理”(后来发现这句话描述有误),然后我又想到“servlet是单例的”,然后我在想,这两者有什么关系?

当我把“web容器”,“线程”,“http请求”,“servlet”的关系理清后,我的思路才清晰了一点。

他们的关系是:每当有一个 http 请求到来,web 容器会从线程池中取出一个空闲的线程,然后在线程中调用对应的 servlet 的 service 方法。servlet 是单例的并且 servlet 是由 web 容器来实例化的。所以上面那句话正确的说法是“Web 容器会为每个 http 请求启动一个线程去调用相应的 servlet”。

使用 MyEclipse 的跑 web 程序的时候,我知道有 tomcat 这个东西,知道它是一个服务器,但是不知道它和 servlet 有什么关系。后来试着不使用 MyEclipse(有时候太智能也不好啊),直接使用 eclipse,这时不得不去接触 tomcat。我创建了一个类并让它继承 HttpServlet,发现没有 HttpServlet,本想通过百度去下载 servlet jar 包,惊奇的发现它存在于 tomcat 的 lib 包之下。又发现在这里 web 容器指的就是 tomcat,我才开始思考 tomcat 和 servlet 的关系。也开始明白了为什么用 Web 容器来命名它,因为它就是用来装 Servlet/JSP 的。

Java Servlet API是Servlet容器和Servlet之间的接口,它定义了Servlet的各种方法,还定义了Servlet容器传送给Servlet的对象类,其中最重要的是请求对象ServletRequest和响应对象ServletResponseo这两个对象都是由Servlet容器在客户端调用Servlet时产生的,Servlet容器把客户请求信息封装在ServletRequest对象中,然后把这两个对象都传送给要调用的Servlet,Servlet处理完后把响应结果写入ServletResponse,然后由Servlet容器把响应结果发送到客户端。
这一段摘自:http://blog.csdn.net/u013770825/article/details/20292613

也想明白了为什么我们只要定义好 servlet 然后在部署描述文件(即web.xml)配置好相关信息,servlet 就能起作用了。原来就是 tomcat 在调用 servlet 啊。

Web 服务器主机包括 Web 服务器应用和辅助应用,其中 Web 服务器应用只负责处理静态的请求,动态的请求则交由辅助应用去处理,而辅助应用,具体的实现可以是 tomcat。Tomcat 可以看成一个应用框架。
当接收到动态的请求,辅助应用即 tomcat 它根据接收到的 Http 请求并结合部署描述文件去调用相应的 servlet,并根据 Http 的请求类型去决定调用 doGet 方法还是 doPost 方法。

为什么写好 Servlet,再写好 web.xml,项目就能跑起来?正是因为有 web 容器的存在,web 容器会根据 web.xml 部署描述文件,在适当的时候调用相应的 servlet。


如有哪里写的不对,请帮忙指出,感谢!

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值