一、Servlet简介

Servlet为基于web的应用程序提供基于组件,独立于平台的方法,拜托了CGI(Common Gateway Interface/通用网关接口)的性能限制。

扩展web服务器功能:早期的web服务器只能将写好的HTML存放在服务器上,不能动态生成HTML,所谓扩展,即让web服务器生成动态页面。

扩展的方式:早期采用CGI技术。因为采用cgi程序编写的代码,可移植性差、编程相当复杂,处理不当会严重影响性能。所以之后便出现了采用容器+组件的方式来扩展。

组件+容器:组件就是符合规范,实现特定功能,并且可以部署在容器上的软件模块,组件只需要处理业务逻辑,其运行不依赖特定的容器;容器是符合规范,为组件提供运行环境,并且管理组件生命周期(将组件实例化init,调用其方法service,销毁组件的过程destroy)的软件程序,容器负责大量的基础服务,包括浏览器与服务器之间的网络通讯,多线程,数据传递等。

servlet主要任务及、架构图

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。

Servlet初识

二、Servlet的生命周期

servlet生命周期可以被视为其从创建到毁灭的一个过程,下面为生命周期的一个细分:

  • Servlet通过调用init()方法进行初始化。
  • Servlet调用service()方法进行网络传参,会话的创建,cookie的操作等客户端(浏览器)的命令请求。
  • Servlet通过destroy()方法实现servlet的销毁结束。
  • 最终,由JVM的垃圾回收机制将Servlet进行回收处理。

下图显示了一个典型的 Servlet 生命周期方案。

  • 第一个到达服务器的 HTTP 请求被委派到 Servlet 容器。
  • Servlet 容器在调用 service() 方法之前加载 Servlet。
  • 然后 Servlet 容器处理由多个线程产生的多个请求,每个线程执行一个单一的 Servlet 实例的 service() 方法。

Servlet初识

三、Servlet的运行

  1. 首先,这需要先配置好服务器环境以及部署Tomcat在应用程序上,之后在工程中做好一系列准备,简单的写一个页面,创建servlet在server方法中进行一些操作(可简单的打印内容)。
  2. 浏览器通过ip:port(端口号)连接服务器。
  3. 浏览器将请求数据按照http协议打包成一个数据包发送给服务器。请求数据包含了请求路径还有浏览器自动生成的一些信息。
  4. 服务器创建两个对象,请求对象(request)以及响应对象(response);服务器解析数据包,然后将解析的数据存放到请求的对象中,方便servlet读取请求数据。请求对象是HttpServletRequest接口的一个实现。响应对象是HttpServletResponse接口的一个实现,响应对象用于存放servlet的处理结果。
  5. 根据请求路径找到相应servlet配置,在通过映射创建servlet实例,然后调用其service()方法。调用service()方法时,会将事先创建好的request对象和response对象作为参数进行传递。在servlet内部,可以通过request获得请求数据,通过response设置响应数据。
  6. 服务器从response中获取数据,遵照http协议将数据打包,发送至浏览器。
  7. 浏览器解析响应数据包,取出相应数据。

常见错误及注意:

  • 要实现Servlet接口或继承HttpServlet。
  • service()方法名称,参数,异常类型要注意。
  • web.xml的配置,类名不能写错,servlet-name不能错误。
  • 在浏览器访问地址是应按照http://ip:port//appname//servlet的url-pattern来访问。
  • 先部署工程,服务器启动后才能访问。

报500错误,就是程序内容语法错误,404则是访问地址错误,405则是service方法名或方法参数有误

 

 

相关文章: