一、引入:

之前用JSP(一个JSP发展史的介绍文章,虽如今JSP不再是开发主流,但可以了解下:​​https://zhuanlan.zhihu.com/p/42343690​​) + Servlet 的技术栈 做了一个较为完整的中小型项目,感觉用起来比较顺手。

但是,在用了 Spring 、Spring MVC 这些框架之后,基本上就告别Servlet 、Filter 、 Listener了。

然而! 有些地方我们也不得不(比如整合第三方插件时)用到Servlet一系列。

因此:我们这里用Spring Boot,其中对于整合这些基本的 Web 组件也提供了很好的支持。

二、步骤:

1.添加这三个web组件

Servlet:

package com.kevin.springbootkevin1.web.servlet_filter_listener;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/my")
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("name>>>" + req.getParameter("name"));
}
}

Filter: 

package com.kevin.springbootkevin1.web.servlet_filter_listener;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class MyFilter implements javax.servlet.Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out .println ("MyFilter >>> init") ;
}

@Override
public void doFilter(ServletRequest req,
ServletResponse resp,
FilterChain chain) throws IOException, ServletException {
System.out.println("MyFilter >>> doFilter");
chain.doFilter(req,resp);
}

@Override
public void destroy() {
System.out.println("MyFilter >>> destroy");
}
}

 Listener:

package com.kevin.springbootkevin1.web.servlet_filter_listener;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
@WebListener
public class MyListener implements ServletRequestListener {
//销毁
@Override
public void requestDestroyed(ServletRequestEvent sre) {
System.out.println("MyListener >>> requestDestroyed");
}

//初始化
@Override
public void requestInitialized(ServletRequestEvent sre) {
System.out.println("MyListener >>> requestInitialized");
}
}

注意:

A. 这里分别需要使用:@WebServlet、@WebFilter 和@WebListener 三个注解。

B.

整合Servlet - Springboot_System

2 . 在项目入口类上添加@ServletComponentScan 注解,实现对 这三个组件 的扫描

整合Servlet - Springboot_java_02

三、测试:

浏览器访问 :​​http://localhost:8080/my?name=Kevin​​ ,一个请求:

日志打印如下:

整合Servlet - Springboot_ide_03

说明:执行顺序如下:

MyFilter里的 init  >>> MyListener里的 requestInitialized-初始化函数  >>>  MyFilter里的doFilter  >>>  MyServlet 里的 doPost  >>>   MyListener 里的 requestDestroyed 。