servlet简介
Java Servlet是和平台无关的服务器端的组件,它运行在servlet容器中。Servlet容器负责servlet和客户的通信以及调用servlet的方法,servlet和客户的通信采用的是“请求/响应”的模式。
servlet可完成如下功能:
1.创建并返回客户请求的动态HTML页面
2.创建可嵌入现有HTML页面的部分HTML页面(HTML片段)
3.去其他服务器资源交互(如数据库或基于java的应用程序)进行通信
Servlet介绍
–Java Servlet(server applet)
–Java Servlet继承结构
Servlet接口(javax.servlet.Servlet)
GenericServlet(javax.servlet.GenericServlet)
HttpServlet(javax.servlet.http.HttpServlet)
创建一个Servlet
–继承HttpServlet
–重写service(doGet、doPost)方法
–在web.xml中配置Servlet
–部署和执行
Servlet的API
Servlet接口(javax.servlet)
说明:javax.servlet的基础接口,定义了Servlet必须实现的方法。
GenericServlet类(javax.servlet)
说明:实现Servlet的接口,属于通用的,不依赖与HTTP协议的servlet(实际应用不算多)
HttpServlet类(javax.servlet.http)
说明:继承GenericServlet类,是在其基础上扩展了HTTP协议的servlet
Servlet生命周期
1.加载和实例化:(构造方法)只有第一次请求servlet时。创建servlet的实例
2.初始化:(init方法)只被调用一次,在创建好实例后立即调用初始化方法
3.服务的方法:每次请求都会调用service的方法,实际用于响应请求的
4.销毁方法:只调用一次,在当service所在的web应用项目被卸载前调用,用于释放资源
在什么时候创建,加载,初始化?
<load-on-startup>0</load-on-startup>
大于0时,tomcat启动时就被加载了,小于0时,访问时才被加载,默认的是小于0
Servlet容器响应客户请求的过程
第一步:servlet引擎检查是否已经装载并创建了该servlet的实例对象,如果是则直接执行第四步,否则执行第二步
第二步:装载并创建servlet的实例对象,调用该servlet的构造器
第三步:调用servlet实例对象的init的方法
第四步:创建一个用于封装请求ServletRequest对象和一个代表响应的消息的ServletResponse对象,然后调用Servlet的service方法并请求和响应对象作为参数传递进去
第五步:web应用程序被停止或重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory的方法
ServletConfig接口的方法:
getInitParameter()方法:通过名字获取值
getInitParameterNames()方法:获取所有的名字,返回的是枚举类型,可以迭代
例:
结果:
getServletName方法:获取servlet的名称
例:
结果:
getServletContext方法:获取ServletContext的接口的初始化参数
ServletContext对象:
Servlet引擎为每个web应用程序都创建了一个对应的ServletContext对象,ServletContext对象包含在ServletConfig对象中,调用ServletConfig.getServletContext方法可以返回ServletContext对象引用。
由于一个web应用程序中的所有的Servlet都共享一个ServletContext对象,所以ServletContext对象都被称之为Application对象(web应用对象)
ServletContext接口的功能:
1.获取web应用程序的上下文参数
(1)配置web.xml,不需要配置在<servlet></servlet>标签中,使用<context-param></context-param>标签
例:
(2)通过ServletConfig对象获取ServletContext对象
例:
(3)通过servletContext按照名字获取值(servletContext.getInitParameter)
例:
结果:
(4)通过servletContext获取所有的名字(servletContext.getInitParameterNames)
例:
结果:
2.记录日志
3.Application域范围的属性(application作用域)
4.访问资源文件
获取当前web应用的某一个文件对应的输入流
结果:
5.获取虚拟路径所映射的本地路径
方法:servletContext.getRealPath("/Test");
例子:
结果:
6.web应用程序对象之间的访问
7.ServletContext的其他方法
获得当前名称:servletContext.getContextPath();-
例子:
结果: