Servlet简介
什么是 Servlet :Servlet 是在服务器端运行的java程序,可以接收客户端请求并做出响应;
jsp和Servlet的区别和联系
答案1:JSP 在本质上就是Servlet,但是创建方式不一样,Servlet完全是java程序代码构成擅长与流程控制和事务处理而通过Servlet来生成动态网页;jsp有html代码和jsp标签构成,可以方便的编写动态网页,因此在实际应用中采用Servlet 来控制业务流程,而采用jsp来生成动态网页。
答案2:jsp是Servlet技术的扩展,在本质上就是Servlet的简易方式,jsp编译后是“类Servlet”,Servlet和jsp最主要的不同点在于,Servlet的应用逻辑是在java文件中,并且完全从表示层中的html里分离开来,而jsp的情况是java和html可以组合成一个扩展名为.jsp的文件,jsp侧重于视图,Servlet主要用于控制逻辑。
JSP本质上是一个Servlet,JSP适合表示层开发,Servlet适合封装控制逻辑
Servlet API
Servlet 接口
Servlet 需要实现的方法
1、void init (ServletConfig config) 由Servlet容器调用,用于完成Servlet对象在处理客户请求前的初始化工作
2、void service(ServletRequest req,ServletResponse res) 由Servlet容器调用,用来处理客户端的请求
3、void destroy() 由Servlet 容器调用,释放Servlet对象使用的资源
4、ServletConfig getServletConfig() 返回的对象包含此Servlet的初始化和启动参数,返回的对象是返回给init()方法的对象
5、String getServletinfo() 返回有关Servlet 的信息,比如作者、版本和版权,返回的字符串是文本,而不是任何种类的标记
ServletConfig接口
在Servlet 初始化过程中回去配置信息;
一个Servlet 只有一个ServletConfig 对象
1、public String getInitParameter(String name) 返回web.xml中名称为name的初始化参数的值
2、ServletContext getSeryletContext() 返回Servlet的上下文对象引用
GenericServlet/HttpServlet抽象类
GenericServlet抽象类
提供了Servlet与ServletConfig 接口方法的默认实现(service()方法除外)
1、public void init (ServletConfig config) 对Servlet 接口中的init()方法的实现,对于ServletConfig 实例进行了保存,此方法还有一个无参的重载方法,用于子类中重写
2、public String getInitParameter(String name) 返回web.xml中名称为name的初始化参数的值
3、public ServletContext getServletContext() 返回ServletContext对象的引用
HttpServlet抽象类
继承于GenericServlet
处理HTTP协议的请求和响应
1、public void service(HttpServletRequest req, HttpServletResponse resp) 对GenericServlet类中service()方法的实现,将请求份发给protected void service(HttpServletRequest req, HttpServletResponse resp)
2、protected void service(HttpServletRequest req, HttpServletResponse resp) 接收HTTP请求,并将他们分发给此类中定义的doxxx()方法
3、protected void doxxx(HttpServletRequest req, HttpServletResponse resp) 根据请求方式的不同分别调用的相关处理方法如:doget、dopost
ServletContext接口
ServletRequest/HttpServletRequest接口
ServletResponse/HttpServletResponse接口
开发Servlet
Servlet 运行原理:
1、客户端发送FTTP请求,这个请求首先会到达Tomcat内置web服务器;
2、Tomcat内置web服务器接受到请求后,会将请求发送到Servlet 容器;
3、Servlet 容器接收到请求后会加载Servlet ,产生Servlet 实例后会向其传递表示请求和响应的对象,也就是HTTPServletRequest对象和HTTPServletResponse对象,然后Servlet实例使用请求对象请求客户端的请求信息并进行响应的处理
4、该Servlet 实例处理完成后有可能将请求发送给其他的Servlet继续进行处理
5、全部处理完毕后,处理结果通过显示对象发送回客户端浏览器
Servlet生命周期:
1、加载和实例化
当Servlet容器启动或者客户端发送一个请求时,Servlet容器会查询内存中是否存在该Servlet的实例,如果存在则直接读取该实例响应请求,如果不存在则创建一个Servlet实例
2、初始化
实例化后,Servlet 容器将调用Servlet 的init()方法进行初始化,(一些准备工作或资源预加载工作)
3、服务
初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。
4、销毁
当Servlet容器关闭时,Servlet实例也随之销毁。当再次发布工程时,会销毁上次工程的实例,其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。