一般情况下,使用Spring、Spring MVC这些框架之后,基本上就告别Servlet、Filter以及Listener了,但是有时在整合一些第三方框架时,可能还是不得不使用Servlet,比如在整合某报表插件时就需要使用Servlet。Spring Boot中对于整合这些基本的Web组件也提供了很好的支持。
在一个Spring Boot Web项目中添加如下三个组件:
MyServlet.java
package com.shrimpking.component;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/6/5 12:24
*/
@WebServlet("/hello")
public class MyServlet extends HttpServlet
{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
System.out.println("name>>>" + req.getParameter("name"));
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
doGet(req,resp);
}
}
MyFilter.java
package com.shrimpking.component;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/6/5 12:26
*/
@WebFilter("/*")
public class MyFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException
{
System.out.println("MyFilter>>>init ");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
System.out.println("MyFilter>>>doFilter");
//执行下一个链条
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy()
{
System.out.println("MyFilter>>>destroy");
}
}
MyListener.java
package com.shrimpking.component;
import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.annotation.WebListener;
/**
* Created by IntelliJ IDEA.
*
* @Author : Shrimpking
* @create 2023/6/5 12:29
*/
@WebListener
public class MyListener implements ServletRequestListener
{
@Override
public void requestInitialized(ServletRequestEvent sre)
{
System.out.println("MyListener>>>Initialized");
}
@Override
public void requestDestroyed(ServletRequestEvent sre)
{
System.out.println("MyListener>>Destroyed");
}
}
代码解释:
• 这里定义了三个基本的组件,分别使用@WebServlet、@WebFilter和@WebListener三个注解进行标记。
• 这里以ServletRequestListener为例,但是对于其他的Listener,例如HttpSessionListener、ServletContextListener等也是支持的。
在项目入口类上添加@ServletComponentScan注解,实现对Servlet、Filter以及Listener的扫描,代码如下:
package com.shrimpking;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@SpringBootApplication
@ServletComponentScan
public class Springboot29ServeltfilterlistenerApplication
{
public static void main(String[] args)
{
SpringApplication.run(Springboot29ServeltfilterlistenerApplication.class, args);
}
}
最后,启动项目,在浏览器中输入“http://localhost:8099/hello?name=tom”,可以看到相关日志,如图