Servlet

1. Servlet介绍

●Servlet是运行在Java服务器端的程序,用于接收和响应来自客户端基于HTTP协议的请求

●核心方法:service,任何客户端的请求都会经过该方法

2. Servlet关系视图

3. Servlet的实现方式

1.第一种:

           ●实现Servlet接口,实现所有抽象方法,该方式支持最大程度的自定义

2.第二种

           ●继承GenericServlet抽象类,必须重写service方法,其他方法可选择重写,该方式让Servlet开发变得简单,但这种方式和HTTP协议无关

3.第三种

            ●继承HTTPServlet抽象类,需要重写doGet和doPost方法,该方法表示请求和响应都需要和HTTP协议相关

             service(ServletRequest req,ServletResponse resp)方法先把参数req,resp转换成HttpServletRequest,HttpSevletResponse类型,然后调用service(HttpServletResquest req,HttpServletResponse resp),在方法中判断提交方式,如果是Get方式则调用doGet方法,如果是Post则调用doPost方法,doGet,Post方法中是要执行的操作,所以要重写,就像其他方式要重写servic方法一样

4. Servlet 生命周期

        对象从创建到销毁的过程

        ●出生:请求第一次到达Servlet时,对象就创建出来,并且初始化成功。只出生一次,将对象放到内存中

        ●活着:服务器提供服务的整个过程中,该对象一直存在,每次请求都会经过service方法

        ●死亡:当服务器正常停止时,或者异常停止时,对象死亡

结论:Servlet对象只会创建一次,销毁一次,Servlet对象只有一个实例。如果一个对象实例在应用中是唯一的存在,那么我们就称它为单例模式

5. Servlet线程安全问题

        一个浏览器代表一个线程,多个浏览器代表多个线程。理论来说每个浏览器看到的应该是自己的用户名,而结果中数据却出现差错,因此Servlet可以认为是线程不安全的

        解决:定义类成员要谨慎,如果类成员是共用的,并且只在初始化时赋值,其余时间只是获取值,那不会出现线程安全问题,如果是公用的且每次使用都会对其重新赋值,那么可能就会出现线程安全问题,可以将其定义到doGet,doPost方法中(成员变量——>局部变量(各个浏览器指定到doGet/doPost方法,都会生成新的对象)),或者使用同步功能(不仅限于此)

6. Servlet 的不同映射方式

        1.第一种:

                     ●具体名称的方式

        2.第二种:

                     ●/开头 + /通配符的方式

        3.第三种:

                      ●通配符 + 固定格式结尾的方式

优先级:越是具体的优先级越高,反之亦然。第一种>第二种>第三种

7. Servlet 创建时机

        1.第一次访问时创建:

                       ●优势:减少对服务器内存的浪费,提高了服务器的启动效率

                       ●弊端:如果有些要在应用加载时就做的初始化操作,无法完成

        2.服务器启动时创建:

                       ●优势:提前创建好对象,提高了首次运行的效率,避免了1.的缺点

                       ●弊端:对服务器内存占用较多,影响服务器的启动效率

                ●修改Servlet创建时机,在<servlet>标签中,添加<load-on-startup>

                

                ● 正整数代表服务器启动时创建,值越小,优先级越高;负整数或不写代表第一次访问时创建

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值