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

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

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

文章目录

一、前言二、注释掉ServletConfig.java文件三、开始修改四、访问测试

一、前言

此篇文章是使用路径扫描方式对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;


//@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监听注销了“字符串则说明监听程序退出成功

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5717235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存