SpringBoot整合Servlet三大组件(Servlet、Filter、Listener)[使用路径扫描方式]

一、前言

此篇文章是使用路径扫描方式对Servlet三大组件进行整合,是在上一篇文章 SpringBoot整合Servlet三大组件(Servlet、Filter、Listener)[使用组件注册方式]修改的,这样做的目的在于可以形成一个明显的对比。

二、注释掉ServletConfig.java文件

注释掉的原因在于避免与之前编写的使用组件注册的方式相互干扰。

//
//import com.itheima.servletComponent.MyServlet;
//import org.springframework.boot.web.servlet.FilterRegistrationBean;
//import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
//import org.springframework.boot.web.servlet.ServletRegistrationBean;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//
//import java.util.Arrays;
//
创建组件配置类 嵌入式servlet容器三大组件
//
//@Configuration //使用此注解将ServletConfig类标注为配置类
//public class ServletConfig {
    注册servlet组件
//    @Bean
//    public ServletRegistrationBean getServlet(MyServlet myServlet){
        此方法用于注册自定义的Myservlet,并返回ServletRegistrationBean类型的bean对象
//        ServletRegistrationBean registrationBean =
//                new ServletRegistrationBean(myServlet,"/myServlet");
//        return registrationBean;
//    }
    注册Filter组件
//    @Bean
//    public FilterRegistrationBean getFilter(MyFilter filter){
//        FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
//        registrationBean.setUrlPatterns(Arrays.asList("/toLoginPage","/myFilter"));//使用此方法定义了过滤的请求路径为"/toLoginPage","/myFilter"
//        return registrationBean; //将当前组装好的FilterRegistrationBean对象作为Bean对象返回
//    }
    注册Listener组件
//    @Bean
//    public ServletListenerRegistrationBean getServletListener(MyListener myListener){
//        ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(myListener);
//        return registrationBean;
//    }
//}

三、开始修改

进入自定义Servlet类MyServlet.java将@Component注释掉,并换成@WebServlet("/myServlet")注解

import org.springframework.stereotype.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;

/*
* 使用组件注册方式整合Servlet
* */
//@Component     //使用次注解将MyServlet类作为组件注入Spring容器
@WebServlet("/myServlet")  //使用此注解来映射/annotationServlet请求的Servlet类
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("hello MyServlet");  //向页面输出
    }
}

进入自定义Filter类MyFilter.java将@Component注释掉,并换成@WebFilter(value = {"/toLogin","/MyFilter"})注解

import org.springframework.stereotype.Component;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

//@Component //使用该注解将当前MyFilter类作为组件注入到Spring容器中
@WebFilter(value = {"/toLogin","/MyFilter"}) //使用此注解来映射"/antionLogin","antionMyFilter"请求的Filter类
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("Hello MyFilter");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        Filter.super.init(filterConfig);
    }

    @Override
    public void destroy() {
        Filter.super.destroy();
    }
}

进入自定义Listener类MyListener.java将@Component注释掉,并换成@WebFilter(value = {"/toLogin","/MyFilter"})注解

import org.springframework.stereotype.Component;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;

//自定义Listener类
//@Component
@WebListener
public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce) {
        System.out.println("contextInitialized监听中");
    }

    @Override
    public void contextDestroyed(ServletContextEvent sce) {
        System.out.println("contextDestroyed监听注销了");
    }
}

四、访问测试

启动程序,之后浏览器访问http://localhost:8080/myServlet看是否出现下图效果
在这里插入图片描述
之后查看控制台是否打印出现如下效果,如出现则说明监听成功
在这里插入图片描述
然后在访问http://localhost:8080/MyFilter并查看控制台是否打印Hello MyFilter,如打印则说明过滤器也成功了
在这里插入图片描述
最后按下控制台左侧旁的exit图标,出现“contextDestroyed监听注销了“字符串则说明监听程序退出成功
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-希冀-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值