【JAVAEE】HTTPServlet
HTTPServlet
继承体系
定义
- 是GenericServlet的子类
- 是Servlet接口的一个实现类
- 是一个抽象类
- 支持HTTP
- servlet.http包中定义了采用HTTP通信协议(一个无状态协议)的HttpServlet类。
作用
- 用于接收Http请求和响应
- HttpServlet类读取HTTP请求,并确定请求是否为HTTP GET,POST,PUT,DELETE,HEAD等,并调用一个相应的方法。
- 继承HttpService实现自定义的Service
特点
HttpServlet比GenericServlet更容易使用,并且有更多的便捷方法。
一旦涉及到和http有关的函数,我们需要将request强制转换为httprequest,它具有servlet和genericServlet都不具有的函数。
HttpServlet增加的函数,使得代码书写更为简单
方法
如果继承了HttpServlet没有实现任何的doXxx方法则会抛出一个异常:405
service()
两个方法
- Public service()继承自父类
- Protected service()是自己的方法
- 父类service 调用子类service 使用子类service方法就可以
- 子类中service 根据请求方式不同 调用不同的方法
作用
将ServletRequest和ServletResponse强转成HttpServletRequest、HttpServletResponse再调用service()
Public service()只接受HTTP请求,将request、response强转类型,将请求转到Protected service(),Protected service()根据请求类型转到相应的doxxx()中
doGet()
调用服务器的资源(由请求URL标识的资源),并将其作为响应返回给客户端
调用会在浏览器的URL里显示用户名和密码.
doPost()
把客户端的数据传给服务端
可以以隐藏方式给服务器端发送数据.
Post适合发送大量数据.(无限制长度的数据)
doDelete()
允许客户端删除服务器端的文件或者Web页面等由URL标识的资源
使用非常少.
doOptions()
返回服务器支持的HTTP方法
doPut()
允许客户端把存储一个资源到请求的路径上,而不仅仅是传送数据.
doTrace()
返回track请求附带的头字段
远程诊断服务器
doHead()
客户端只需要响应的HEADER,它就发出一个Header请求.
这种情况下客户端关心响应的长度和响应的MIME类型.
HttpServlet容器响应Web客户请求流程
- Web客户向Servlet容器发出Http请求
- Servlet容器解析Web客户的Http请求
- Servlet容器创建一个HttpRequest对象(继承于ServletRequest),在这个对象中封装Http请求信息
- Servlet容器创建一个HttpResponse对象
- Servlet容器调用HttpServlet的service方法,把HttpRequest和HttpResponse对象作为service方法的参数传给HttpServlet对象
- HttpServlet调用HttpRequest的有关方法,获取HTTP请求信息
- HttpServlet调用HttpResponse的有关方法,生成响应数据
- Servlet容器把HttpServlet的响应结果传给Web客户
其中HttpServlet首先必须读取Http请求的内容,Servlet容器负责创建HttpServlet对象,并把Http请求直接封装到HttpServlet对象中。
创建HttpServlet步骤
1.继承HttpServlet抽象类
2.重写HttpServlet的部分方法,如doGet()或doPost()方法
3.获取HTTP请求信息。通过HttpServletRequest对象来检索HTML表单所提交的数据或URL上的查询字符串
4.生成HTTP响应结果。通过HttpServletResponse对象生成响应结果