java——Servlet模型(二)

Servlet应用开发接口

一、Servlet接口(方法及其功能描述)

1、init():在Servlet实例化之后,调用Servive之前调用init()方法。
2、service():调用此方法允许Servlet响应请求,在Servlet成功初始化之前无法调用。
3、destroy():当一个Servlet被从服务中去除时,Servlet容器会调用此方法;在这个对象service()方法所有的线程未全部退出或者没有被容器认为发生超时操作时,此方法不会调用。
4、getServletConfig():返回一个ServletConfig对象,作为一个Servlet的开发者,应该通过init()方法存储ServletConfig对象,以便这个方法能返回这个对象。
5、getServletInfo():允许Servlet向主机的Servlet运行着提供有关信息。返回的字符串应该是纯文本格式而不是任何标志(HTML、XML)。

二、GenericServlet抽象类

1、实现了Servlet接口
2、提供了Servlet接口中除service()方法外4个方法的简单实现
3、子类必须实现service()方法
4、未指定协议的Servlet

三、HttpServlet抽象类

1、基于HTTP协议的Servlet
2、继承自GenericServlet
3、必须重写doXXX()方法处理业务逻辑/返回响应
4、扩展:
①protected void service(HttpServletRequest request, HttpServletResponse response)
一个http请求的分发这个,它把请求代理给doGet()、doPost()…等doXXX()方法。
②public void service(ServletRequest request, ServletResponse response)
此方法是GenericServlet的service()方法的实现,他把request、response对象分别转化为HttpServletRequest和HttpServletResponse,并且调用保护的。
③当包容器为一个servlet收到一个请求时,包容其调用公共的service()方法在把参数转换为HttpServletRequest和HttpServletResponse后,这个公共的方法调用保护的service根据http请求方法的类型,保护的service方法调用doXXX()方法之一,所以必须重写doXXX()方法。

Servlet的生命周期

一、Servlet生命周期序列图

service方法可以重复执行。在这里插入图片描述

二、Servlet什么时候实例化

1、在服务器启动加载网站时
2、第一次访问Servlet时
3、具体什么时候加载需要通过web.xml配置文件中对应Servlet设置项的节点进行设置
①标记容器是否在启动的时候就加在这个servlet
②当值为0或者大于0时,表示容器在应用启动时就加载这个servlet (服务器启动就加载,第一次访问提供请求)
③当时一个负数或者没有指定时,则指定容器在该servlet被选择时才加载 (第一次访问在加载)
④load-on-startup设置的正数越小,启动该servlet的优先级越高

三、Servlet对init方法的调用

1、init(ServletConfig config)方法
①在加载Servlet实力成功后调用init()方法,一般做一些初始化的工作
②在一个Servlet的生命周期中只执行一次
③通过config.getInitParameter(Param)可取得web.xml中的参数

四、Servlet在什么时候被销毁

1、服务器关闭
2、更新、停止Web模块时
3、由Servlet容器根据情况 lru

五、Servlet对destroy方法的调用

1、在Servlet示例被销毁之前调用
2、在一个Servlet的生命周期中只执行一次

六、容器中Servlet的生命周期

在这里插入图片描述

七、Servlet生命周期总结

Servlet的生命周期可以分为四个阶段:
①加载和实例化:由Servlet容器完成
②初始化:实例化Servlet后会调用init方法
③处理客户请求:service方法(doGet或doPost)
④销毁:销毁之前会调用destroy方法

Servlet应用进阶

一、ServletConfig接口

1、ServletConfig包含Web程序部署描述符(web.xml)钟定一的参数
2、ServletConfig是由Servlet容器实例化
Servlet实例化的同时实例化对应的ServletConfig对象,并传入到init(ServletConfig config)

二、ServletContext接口

1、每个Web应用启动后,Servlet容器都会创建唯一的一个ServletContext对象,该对象包含整个Web程序的信息。
2、在自己定义的Servlet中,可以通过getServletContext()方法获得ServletContext对象
( getServletContext()是在GenericServlet类中定义的 )

三、数据共享

1、数据共享的方式:
①在客户端页面和服务器端程序(Servlet)之间,通过请求(request)的getParameter()方法共享数据
②在请求(request)和请求(response)之间,通过request的setAttribute / getAttribute方法 ( 注意:只能应用在请求转发共享数据 )
③同一个Servlet对象,通过ServletConfig对象共享数据(初始化参数在web.xml文件中给出)
在这里插入图片描述
④在整个Web应用范围内,通过ServletContext的setAttribute / getAttribute方法共享数据(初始化参数在web.xml文件中给出)
在这里插入图片描述
3、总结
①setAttribute() / getAttribute(),应用于request与request之间 (请求转发)
②getParameter(),应用于客户端页面与Servlet之间 (参数来自于Html、JSP)
③getServletConfig().getInitParameter(“param”),应用于同一个Servlet对象
④getServletContext().getInitParameter(“param”),应用于整个Web应用范围

四、Servlet非线程安全

Servlet是多线程应用
Servlet容器通常只创建一个Servlet示例,不同的请求都分配一个线程来进行处理,但他们的操作都是同一个Servlet示例,所以可以使用Servlet的成员变量共享数据,所以也产生了线程安全的问题。

五、Servlet进阶

1、ContentType属性,输出非文本数据
例如:response.setContentType(“photo.jpg”);
2、编码问题
①request.setCharacterEncoding / getCharacterEncoding
②response.setCharacterEncoding / getCharacterEncoding

web.xml与@WebServlet注解

1、注解可实现web.xml配置文件的功能
例:在这里插入图片描述
2、@WebServlet注解
在这里插入图片描述

java——Servlet模型(一)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FF小迷糊吖~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值