Servlet概述

本文介绍了Servlet的生命周期,包括实例化、初始化、提供服务、销毁等阶段,并探讨了Servlet的线程安全性问题及解决方案,如使用SingleThreadModel、避免全局变量、ThreadLocal和加锁等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet是一个web容器,我们通常用的servlet是httpservlet,而httpservlet又是继承于genericservlet,而genericservlet又实现了servlet接口。


servlet的生命周期是 :先进行实例化,然后是初始化,然后是提高服务,然后销毁,最后不可用,在这五个生命周期,其中,初始化是调用的init方法,这个方法只有一个,而提高服务的时候调用的是service方法,而我们具体在我们所写的这个方法中,因为我们继承了httpservlet,其实就是对应了doGet(),doPost(),这种方法,然后据我了解,servlet是单例的。非线程安全的,我们通常有一下几种方案来解决:

 

第一种,继承SingleThreadModel但是这样每次都会创建一个新的servlet实例,但这样消耗服务器的内存,降低了性能,并且这个接口现在已经过时了,不推荐使用。

 

第二种:我们尽量避免使用全局变量,就我个人而言,我比较喜欢使用这种方法。

 

第三种,我们可以通过使用ThreadLocal, 内部结构是一个Map结构,用当前线程作为key,他会创建多个副本。get,set方。

 

第四种,我们当然还可以来加锁,进行解决线程问题。

 

而且我还知道,向我们这种常用的MVC框架,struts1,spring这些MVC框架,都是基于servlet发展而来的,就比如struts1 的核心总控制器是ActionServlet,而springMVC的前端总控制器是dispatchServlet,在项目我们曾经用serlet来生成 图片验证码的,防止用户进行暴力破解

 

(别人问了,再回答)

servlet的配置文件  web.xml

<servlet>

    <servlet-name>ImageCodeServlet</servlet-name>     <servlet-class>org.leopard.code.ImageCodeServlet</servlet-class>

</servlet>

<servlet-mapping>

     <servlet-name>ImageCodeServlet</servlet-name>

     <url-pattern>/d</url-pattern>

</servlet-mapping>

 

描述:

我在web.xml中,我首先需要写一个servlet标签,servlet标签中有两个子标签,一个叫servlet-name,这个name可以随便起,但是要保证唯一性,除此之外,在这个servlet-name下有一个servlet-class,这个servlet-class对应的就是我后台提高服务的servlet,除此之外还有一个servlet-mapping,这个里边首先有一个servl-name。,这个servl-name首先要保证和上边的servlet-name保持一致,除此之外还有一个url-pattern,这是一个虚拟路径,是用来发送请求的url地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值