整合Servlet - Springboot

一、引入:

之前用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.

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

三、测试:

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

日志打印如下:

说明:执行顺序如下:

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

发布了70 篇原创文章 · 获赞 22 · 访问量 6007

猜你喜欢

转载自blog.csdn.net/Kevin__Coder/article/details/104525714