servlet的生命周期:
/*
Servlet的生命周期:Servlet对象从被创建到被销毁的过程!
当我们第一次访问Servlet时,调用方法执行顺序如下:
1.构造器
2.init()
3.service()
再次刷新访问时,只会调用
service()方法
当项目卸载时,调用
destroy()方法
*/
==========================
/*
Servlet的生命周期方法
1.构造器
构造器用来创建Servlet的对象,Servlet第一次接收请求时调用,只调用了一次。
构造器只调用了一次,说明Servlet是单例,以多线程形式去调用service()方法
servlet不是线程安全,所以尽量不要在service()方法中操作全局变量。
2.init()
构造器被调用后紧接着被调用,init方法用来对Servlet进行初始化操作,只调用了一次。
3.service()
每次处理请求的时候service()方法都会被调用,会被调用多次。
4.destroy()
web项目卸载时调用,用来在对象被销毁前做一些收尾工作。只会调用一次。
*/
===============================
HelloServlet.java
public class HelloServlet implements Servlet {
public HelloServlet() {
System.out.println("构造器...");
}
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("init方法被调用。。。");
}
@Override
public ServletConfig getServletConfig() {
System.out.println("getServletConfig方法被调用。。。");
return null;
}
/**
* ServletRequest 封装的是浏览器发送给服务器请求报文
* ServletResponse 封装的是服务器发送给浏览器响应报文
*/
@Override
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
/*//向控制台输出一个语句
System.out.println("你好! Servlet");
//给浏览器发送一个信息
//通过response对象获取一个输出流
PrintWriter out = res.getWriter();
//通过out可以向浏览器发送信息
out.print(new Date());*/
System.out.println("service方法被调用。。。");
}
@Override
public String getServletInfo() {
System.out.println("getServletInfo方法被调用。。。");
return null;
}
@Override
public void destroy() {
System.out.println("destroy方法被调用。。。");
}
}
==========================
配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/HelloServlet</url-pattern>
</servlet-mapping>
</web-app>
=====================
servletconfig:
/**
* 一个Servlet都有他唯一对应的ServletConfig
*
* ServletConfig
* 代表:封装的就是Servlet的配置信息,封装的就是servlet标签中的聂荣
* 获取:该对象由服务器创建,最终会作为参数传到init方法中,我们可以在这个方法中直接使用
* 功能:
* 【1】 获取servlet的别名
* 【2】获取当前Servlet的初始化参数
* 【3】获取ServletContext对象
* <init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
*/
//【1】 获取servlet的别名
String servletName = config.getServletName();
//输出servletName
System.out.println("别名:"+servletName);
//2.获取当前Servlet的初始化参数
String user = config.getInitParameter("user");
System.out.println("user: "+user);
//3.获取ServletContext对象
// 我们web应用中所有信息都封装在ServletContext对象中,每一个web应用都对应着一个唯一的ServletContext
ServletContext context = config.getServletContext();
String url = context.getInitParameter("url");
System.out.println("AServlet :"+url);
==========================
servletcontext:
/**
* ServletContext
* 代表:代表整个web应用,每一个web应用都有他唯一对应ServletContext对象,该对象在项目启动时创建,在项目卸载销毁
* 获取:通过ServletConfig获取
* 功能:
* 【1】获取整个WEB应用的初始化参数
* <context-param>
<param-name>url</param-name>
<param-value>http://www.atguigu.com</param-value>
</context-param>
【2】可以获取到资源的真实路径
虚拟路径:http://localhost:8080/08_WEB_Servlet/index.html
真实路径:资源在硬盘中的地址
【3】可以作为一个最大的域对象在不同的WEB资源之间共享数据。
application
*/
//通过ServletConfig获取ServletContext
ServletContext context = this.getServletConfig().getServletContext();
//获取全局的初始化参数
String url = context.getInitParameter("url");
//System.out.println("url = "+url);
//获取index.html的真实路径(物理路径)
//主要用于做上传和下载
String realPath = context.getRealPath("/hello.html");
System.out.println(realPath);
===========================
导入项目2个步骤:
步骤1:
步骤2: