今天带大家了解一下Servlet,学习过java的同学肯定对它不陌生,所以我就将我所学的皮毛整理出来共同学习,嘻嘻
一.九大对象
(1)out:向客户端发送数据的对象,发送的内容是浏览器需要显示的内容
(2)request:接收客户端发来的请求
(3)reponse:响应客户端的请求
(4)session:会话对象,HttpSession当前浏览器和服务器之间的一次通话
(5)application:全局对象,ServletContext的实例
(6)config:配置对象,ServletConfig的对象,进行Servlet的配置
(7)exception:异常对象,等同于java异常处理的对象,是Throwable的子类
(8)page:当前对象,等同于this,是Object的一个类型
(9)pageContext:上下文对象,相当于管理层
二.生命周期
(1)装载Servlet:这项操作一般是动态执行的。有些服务器提供了相应的管理功能,可以在启动的时候装载servlet并能够初始化特定的servlet。
(2)创建一个servlet实例
(3)调用servlet的init()方法
(4)一个客户端的请求到达服务器。创建一个请求对象。创建一个响应对象。
(5)激活servlet的Service()方法,并传递请求和响应对象。Service()方法获得关于请求对象的信息、处理请求、访问其他资源、获得需要的信息。Service()方法使用响应对象的方法,将响应传回给服务器,最终到达客户端。对于更多的客户端请求,服务器创建新的请求和响应对象,仍然激活此Servlet的Service()方法,将两个对象作为参数传递给它。
三.装载机制
(1)自动装载:某些Servlet如果需要在Servlet容器启动时就加载,需要在web.xml下它的标签里中,添加优先级代码:
<Servlet>
<load-on-startup>1<load-on-startup>
</Servlet>
数字越小表示该servlet的优先级越高,会先于其他自动装载的优先级较低的先装载
(2)Servlet容器启动后,客户首次向某个Servlet发送请求时,Tomcat容器会加载它
(3)当Servlet类文件被更新后,也会重新自动加载
Servlet是长期驻留在内存里的。某个Servlet一旦被加载,就会长期存在于服务器的内存里,直到服务器关闭。Servlet被加载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。
四.运行机制
(1)客户端(浏览器)在地址栏输入一个URL发起的HTTP请求
(2)服务器根据URL指定要执行的Servlet
(3)servlet运行service()方法,并给服务器做出响应
(4)服务器接收到了servlet的响应数据,将数据返回给请求者
(5)客户端接受响应数据,做出展示
五.实现方式
(1)通过实现Servlet接口
(2)通过继承GenericServlet抽象类
(3)通过继承HttpServlet类
(4)可以使用XML和注解方式注册
六.重定向(redirect)跟转发(forword)
1.请求转发:
request.getRequestDispatcher(URL地址).forword(request,response)
过程:·客户端发送请求,Servlet做出业务逻辑处理
·Servlet调用forword()方法,服务器Servlet把目标资源返回给客户端浏览器
2.重定向:response.sendRedirect(URL地址)
过程:·客户端发送请求。Servlet做出业务逻辑处理
·Servlet调用reponse.sendRedirect()方法,把要访问的目标资源作为reponse响应头信息给客户端浏览器
·客户端浏览器重新访问服务器资源xxx.jsp,服务器再次对客户端浏览器做出响应
3.重定向(redirect)和转发(forword)区别:
A.请求的次数:Redirect:发起两次请求,并响应两次
Forword:只一次请求一次响应
B.Request请求中的内容不同:Redirect:第一次请求中的内容丢失
Forword:请求的内容会保存
C.地址栏的变化:Redirect:地址栏显示的最终响应的资源
Forword:地址栏中显示的第一次请求的资源
D.资源的位置:Redirect:可以是任何位置,WEB-INF,META-INF下无法访问
Forword:只能是本项目中的位置,本项目中的任何位置都可以
E.发起的位置不同:Redirect:在客户端发起
Forword:在服务器端发起
F.对象不同:Redirect:是通过HttpServletResponse对象完成的
Forword:是通过RequestDispatcher接口的forword方法完成
内容若有差错的,还请大家指正一下!
图片均来源于网络上