目录
一、Servlet的生命周期(初始化阶段、运行阶段、销毁阶段)
初始化阶段
1、执行 Servlet 构造器方法
2、执行 init 初始化方法
第一、二步,Servlet构造器 和 init()方法会在第一次访问Servlet程序时被调用
且init()方法在Servlet程序的整个生命周期中只会被调用一次
运行阶段
3、执行 service 方法
第三步, service()方法 每次访问的时候都会被调用。
销毁阶段
4、执行 destroy 销毁方法
第四步, 在 web 工程停止的时候调用
public class Servlet1 implements Servlet {
public Servlet1() {
//第一次访问的时候,创建Servlet程序时 会调用构造器方法
System.out.println("1 构造器方法");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
//第一次访问的时候,创建Servlet程序时 会调用init()方法
System.out.println("2 init初始化方法");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//service方法每次访问的时候都会调用
System.out.println("3 service方法");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
//在web工程停止的时候调用
System.out.println("4 destory销毁方法");
}
}
实例:
首次访问servlet程序,控制台打印结果:
第一次访问成功 (初始化阶段和运行阶段)
反复重新访问servlet程序(运行阶段)
初始化阶段在第一次访问过后就结束了,现在等于反复调用service()方法
停止servlet程序(销毁阶段)
调用destory()方法
二、GET 和 POST 请求的分发处理
为了区分 get请求 和 post请求 的分发处理 可以利用 servletRequest对象 中的 getMethod()方法
这里强制转换的原因:因为 httpServletRequest 的类型是 ServletRequest,getMethod()方法在它的子类中
ServletRequest类的子类型HttpServletRequest可以使用,里面就包含getMethod()方法
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
//为了区分get请求和post请求的分发处理 可以利用 servletRequest对象 中的 getMethod()方法
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
//获取请求的方式 返回值为POST或GET
String method = httpServletRequest.getMethod();
if ("GET".equals(method)) {
doGet();
} else if ("POST".equals(method)) {
doPost();
}
}
public void doGet() {
System.out.println("GET请求");
}
public void doPost() {
System.out.println("POST请求");
}
为了方便看出效果,这里准备一张form表单来进行提交行为(请求方式为GET)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<!-- <form action="http://localhost:8080/06_servlet/hello" method="get">-->
<!-- <input type="submit"/>-->
<!-- </form>-->
<form action="http://localhost:8080/06_servlet/hello" method="post">
<input type="hidden" name="action" value="login"/>
<input type="hidden" name="username" value="root"/>
<input type="submit"/>
</form>
</body>
</html>
三、通过继承 HttpServlet 实现Servlet程序
一般在实际项目开发中,都是使用继承 HttpServlet 类的方式去实现 Servlet 程序。
Servlet类的代码:
public class HelloServlet3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet3的Post方法");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("HelloServlet3的Get方法");
}
}
web.xml中的代码:
<servlet>
<servlet-name>HelloServlet3</servlet-name>
<servlet-class>com.atguigu.servlet.HelloServlet3</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet3</servlet-name>
<url-pattern>/hello3</url-pattern>
</servlet-mapping>
四、使用 IDEA 创建 Servlet 程序
创建完成后记得配置web.xml文件
<servlet>
<servlet-name>Servlet2</servlet-name>
<servlet-class>com.atguigu.servlet.Servlet2</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servlet2</servlet-name>
<url-pattern>/servlet2</url-pattern>
</servlet-mapping>
五、Servlet 类的继承体系
此图源于尚硅谷