java中servlet的介绍

1.简介

每一个Servlet都必须实现Servlet接口,GenericServlet是一个通用的、不特定协议的Servlet。而HttpServlet集成自GenericServlet,因此HttpServlet也实现了Servlet接口。我们自己编写的Servlet,可以直接继承HttpServlet即可。

2.源码分析

(1)在Servlet接口中定义了一个service方法,HttpServlet对service方法进行了简单的实现,把service方法中的ServletRequest对象和ServletResponse对象转换成了HttpServletRequest对象和HttpServletResopnse对象,然后再去调用自己的service方法。

 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException

{


        HttpServletRequest  request;
        HttpServletResponse response;
        
      try

{
            request = (HttpServletRequest) req;
            response = (HttpServletResponse) res;
      }

catch (ClassCastException e)

       {
            throw new ServletException("non-HTTP request or response");
       
         }
       
        service(request, response);
 
        }

(2)在自己service方法中,首先获得请求的方法名,然后根据该方法名去调用对应的doXXX方法,例如,如果请求的方法名为GET,那么就去调用doGet方法,如果请求的方法名为POST,就去调用doPost方法。

(3)HttpServlet中的doGet方法和doPost方法返回的都是错误信息,所以我们要在自己的Servlet类中override这两个方法。

3.Servlet的生命周期

1)在下列时刻Servlet容器装载Servlet

-Servlet容器启动时自动装载某些Servlet。

可以在自己web应用程序的下的web.xml文件中配置。在<servlet>节点下添加<load-on-startup>节点。

-Servlet容器启动后,客户首次向Servlet发出请求。

-Servlet的类文件被更新后,重新装载Servlet。

2)在Servlet被装载后,Servlet容器会创建Servlet的实例并且调用Servlet的init()方法进行初始化,在Servlet的整个生命周期内init()方法只执行一次。

3)响应客户请求

Servlet容器创建特定于这个请求的ServletRequest对象和ServletResponse对象,并调用service方法。

4)终止阶段

-Web应用的终止

-Servlet容器的终止

-Servlet容器重新装载新的Servlet

以上会调用destroy()方法销毁当前Servlet所占得资源。

4.Servlet的多线程问题

Servlet本身是Singleton,会产生一个唯一的实例,当多个用户访问这一个Servlet时,其实就是访问的这一个对象,当用户修改Servlet的成员变量时,就会出现数据不一致的错误,导致多线程访问问题。

解决该问题的最好办法:把成员变量声明为局部变量。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值