JavaWeb来一发(三)Servlet基础

1、Servlet简介

Sevlet是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容。

2、Servlet意义

为了动态响应请求,服务端最开始用的是CGI(Common Gateway Interface),CGI可以用任意语言编写,只要能响应动态请求就可以,但由于开发CGI需要关注通信、请求处理等多方面业务无关的事情,且CGI没有统一标准,导致其开发维护成本高,可移植性差。并且CGI是对于每一个请求都是单独进程来处理的,这显然无法满足网络应用的需要。

相对来说,Servlet处理请求是基于线程而非进程,并且Servlet在易用性、可扩展性方面有明显的优势。

3、Servlet接口

  • Servlet接口的基本方法有init、service和destroy方法,init方法处理初始化Sevlet对象;service方法接受客户端请求对象,执行业务操作,响应客户端请求;destroy方法释放资源。
  • GenericServlet虚拟类是Servlet接口的通用实现,只没提供service方法的实现,因为这个实现跟业务相关。
  • HTTPServlet接口是GenericServlet的子接口,实现了service方法,service方法调用了doGet或doPost方法,这两个方法就是我们熟悉的响应http请求的接口了。
  • ServletContext是Servlet和Servlet容器之间通信的接口,Servlet容器启动一个web应用时,会为它创建一个ServletContext对象,每个web应用有一个Servlet对象,一个web应用的所有Servlet对象共享一个Context,Servlet对象通过它访问容器中各种资源。

Servlet的生命周期:

1)初始化阶段,调用init方法;

2)响应客户请求阶段,调用service方法 ;

3)终止阶段,调用destory方法。

4、Servlet处理请求过程

1)从浏览器发送Http请求到Web服务器,也就是Tomcat(也可能另外有专门的Web服务器,如nginx,此处以Tomcat为例,且Tomcat同时作为Servlet容器),Tomcat将请求封装成一个HttpRequest对象,同时创建一个HttpResponse对象;

2)Tomcat根据web.xml中的配置找到Servlet名称,然后通过反射创建Servlet对象(注意Servlet对象只会实例化一次),再执行init方法进行Servlet初始化;

3)Servlet容器调用HttpServlet对象的service方法,把HttpRequest与HttpResponse作为参数传递给HttpServlet对象;

4)HttpServlet根据HttpRequest中的请求信息进行处理,结果封装在HttpResponse中,并响应给客户端;

扫描二维码关注公众号,回复: 4745240 查看本文章

5、Servlet线程安全问题

Servlet容器默认是采用单实例多线程方式处理多个请求的,这可以大大降低对系统的资源需求,提高系统的并发量及响应时间。但是同时可能会带来线程安全问题,Servlet是否线程安全是由它的实现来决定的,是有隐患的。

那么如何避免线程安全问题呢?有以下几个方案:

1)实现SingleThreadModel接口,这样Servlet的Service方法不会有两个线程同时执行,但系统开销很大。

2)同步对共享数据的操作。

3)避免使用实例变量(非静态类成员变量)。

参考资料:

https://blog.csdn.net/u010452388/article/details/80395679

猜你喜欢

转载自blog.csdn.net/ss1300460973/article/details/85083152