Servlet——JavaWeb技术的核心

前言

JavaWeb的核心就是Servlet,各种web框架出现只是为了封装Servlet,简化开发,如果你要研究web框架,从头看源码,最后也还是会回到Servlet上来。

Web框架是开发者在使用某种语言编写Web应用服务端是关于架构的最佳实践。很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处理有关,形成一个基础,在开发别的应用项目的时候则可以从这个剥离出来的基础做起,让开发者更关注具体的业务问题,而不是Web的请求和响应的控制。

框架很多,但套路基本类似,帮你隐藏很多关于HTTP协议细节内容,专注功能开发。

但对于一个初学者来说,过早的接触框架往往事倍功半!同样一个问题,换一种框架你可能需要从头开始研究。

所以,作为Java Web技术的核心基础,Servlet的工作原理是必须掌握的,也是成为一名合格的Java Web技术开发人员的基本要求。


简介

Servlet本质上也是Java类,但要遵循Servlet规范进行编写,没有main()方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。

Servlet是和HTTP协议是紧密联系的,其可以处理HTTP协议相关的所有内容。这也是Servlet应用广泛的原因之一。

提供了Servlet功能的服务器,叫做Servlet容器,其常见容器有很多,如Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss等。

工作原理

一个HTTP请求的执行过程:

  • 客户端发出请求http://localhost:8080/xxx
  • 根据Web.xml文件的配置,找到<url-pattern>对应的<servlet-mapping>
  • 读取<servlet-mapping><servlet-name>的值
  • 找到<servlet-name>对应的<servlet-class>
  • 找到该class并加载执行该class

Servlet的执行过程::

  • Servlet程序有Web服务器调用,当收到请求后,
  • 检查是否已装载并创建了该Servlet对象,如果没有则加载创建
  • 调用Servlet的init()方法初始化实例
  • 调用service()方法,处理请求并返回响应结果
  • 在服务器被停止或重启之前,调用destroy()方法释放资源

Servlet接口实现类
SUN公司定义了两个实现类,GenerricServletHttpServlet,其中后者是前者的子类,它在原有基础上添加了一些HTTP协议处理方法,它比GenerricServlet功能更强大,所以我们一般将自己的类继承自HttpServlet,并重写doGet方法和doPost方法,不需要重写Service方法

Servlet的一些细节
如果某个Servlet的映射路径只有一个(/),那么这个Servlet就成为当前Web应用程序的缺省Servlet。凡是在web.xml文件中找不到匹配的<servlet-mapping>元素的URL,它们的请求访问都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。在tomcat的安装目录 /conf/web.xml 中,注册了一个名称org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为缺省Servlet。当访问Tomcat服务器中的某个静态HTML文件或图片等资源时,实际上是在访问这个缺省Servlet。

如果在<servlet>元素中配置了一个<load-on-startup>元素,那么WEB应用程序在启动时,就会装载并创建实例对象、以及调用Servlet实例对象的init()方法。可以在启动的时候为整个WEB应用创建一些必要的的资源或连接。但如果所有的Servlet都启动加载,则会大大增加服务器负担,而且有些Servlet永远也不会被客户访问到,白白浪费资源,所以从性能角度,应合理利用该特性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值