(1)构造器:只有第一次请求Servlet时,创建Servlet实例,调用构造器,说明Servlet是单实例
(2)init方法:只被调用一次,创建好实例后,立即被调用,用于初始化当前Servlet
(3)service方法:被多次调用,每次请求都会调用service方法,实际用于响应请求的。
(4)destroy:只调用一次,在当前Servlet所在的web应用被卸载前调用,用于释放当前Servlet所占用的资源。
public class HelloServlet implements Servlet{
@Override
public void destroy() {
System.out.println("destroy...");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("init...");
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
System.out.println("service...");
}
public HelloServlet(){
System.out.println("HelloServlet'constructor");
}
1.ServletConfig对象
ServletConfig封装了Servlet的配置信息,可以获取到配置web.xml中的初始化参数。
helloServlet
com.ouc.javaweb.HelloServlet
user
root
password
xucailing
1
如何获取初始化参数:
getInitParameter(String name):获取指定参数名的初始化参数
getInitParameterNames():获取参数名组成的Enumeration对象
@Override
public void init(ServletConfig servletConfig) throws ServletException {
String user=servletConfig.getInitParameter("user");
Enumeration names=servletConfig.getInitParameterNames();
while(names.hasMoreElements()){
String name=names.nextElement();
//先获取名称的集合,再根据名称获取值
String value=servletConfig.getInitParameter(name);
System.out.println("name:"+name+"---"+"value:"+value);
}
}
ServletConfig可以获取到Servlet的配置名称
String servletName=servletConfig.getServletName();
System.out.println(servletName);
2.ServletContext对象
每一个web应用程序都创建一个对应的ServletContext对象,ServletContext对象被包含在ServletConfig对象中,调用ServletConfig.getServletContext()可以返回ServletContext对象的引用。
作用:
1.获取当前web应用的初始化参数,web应用的初始化参数可以被所有的Servlet获取,而Servlet的初始化参数,只能被当前Servlet获取。(用法同servletConfig获取参数一样)
//获取ServletContext对象
ServletContext servletContext=servletConfig.getServletContext();
String driver=servletContext.getInitParameter("driver");
System.out.println("driver:"+driver);
Enumeration names1=servletContext.getInitParameterNames();
while(names1.hasMoreElements()){
String name=names1.nextElement();
String value=servletContext.getInitParameter(name);
System.out.println("name:"+name+"---->value:"+value);
2.获取web应用的某一个文件的绝对路径(发布在服务器上的绝对路径):
String realPath=servletContext.getRealPath("/note.txt");
System.out.println("绝对路径:"+realPath);
输出结果为:
D:\project.metadata.me_tcat85\webapps\JavaWeb0002\note.txt
3.获取当前web应用的名称(页面绝对路径)
//获取当前web应用的名称
String contextPath=servletContext.getContextPath();
System.out.println("contextPath:"+contextPath);
4.获取当前web应用的某一个文件对应的输入流
//getResourceAsStream(),相对于当前web应用的路径
InputStream in2=servletContext.getResourceAsStream("/WEB-INF/classes/jdbc.properties");
System.out.println("2."+in2);