SpringBoot-基础-06-servlet三大组件

SpringBoot-servlet三大组件

servlet三大组件,简单servlet、过滤servlet、监听servlet,即Servlet、Filter、Listener ,三大组件注册方式大同小异。

一、Servlet

(1)简介:

Servlet主要用于处理客户端的请求,当我们在浏览器回车跳转时,请求就会被发送对应 的Servlet处理。

作用:接收请求数据
处理请求
完成响应

(2)Servlet的创建和使用

①创建一个Servlet类,继承HttpServlet
②编写一个Configuration类,注册Servlet的Bean
Servlet类

 public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response){
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response){
        System.out.println("现在执行Servlet的doPost方法");
    }
}

Configuration类

@Configuration
public class Config {
    @Bean
    public ServletRegistrationBean myServlet(){
        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet());
        registrationBean.addUrlMappings("/login");
        return registrationBean;
    }
}

请求测试:

测试结果:
在这里插入图片描述

二、Filter过滤器

(1)简介:

它是基于函数回调实现链式对网络请求和响应的拦截和修改。拦截已有请求,对不需要或不符合的信息资源进行预处理。
执行顺序:过滤前—拦截前—Action处理—拦截后—过滤后
在这里插入图片描述

(2)Filter的创建和使用

①创建一个Filter类,实现Filter接口
②编写一个Configuration类,注册Filter的Bean Filter类

Filter类,
init()初始化方法,只在过滤器创建的时候执行一次,用于初始化过滤器的属性
doFilter()过滤方法,调用该方法的入参 FilterChain对象的 doFilter 方法对请求放行执行后面的逻辑,若未调用 doFilter 方法则本次请求结束,并向客户端返回响应失败
destory()销毁方法, 此方法用于销毁过滤器,过滤器被创建以后只要项目一直运行,过滤器就会一直存在,在项目停止时,会调用该方法销毁过滤器

 public class MyFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException{
        System.out.println("现在进行Filter的init初始化方法");
    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("现在执行doFilter方法");
        HttpServletRequest hsr = (HttpServletRequest) servletRequest;
        String url = hsr.getRequestURL().toString();
        if(url.contains("/testfilter")){
            System.out.println("不拦截:"+url);
            filterChain.doFilter(servletRequest,servletResponse);
        }
        else if(url.contains("/test")){
            System.out.println("进行拦截:"+url);
            return ;
        }
    }

    @Override
    public void destroy() {
        System.out.println("现在执行销毁方法");
    }

}

Configuration类

public class Config {
//    @Bean
//    public ServletRegistrationBean myServlet(){
//        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet());
//        registrationBean.addUrlMappings("/login");
//        return registrationBean;
//    }
    @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new MyFilter());
        //设置拦截规则
        registrationBean.setUrlPatterns(Arrays.asList("/testfilter","/test"));
        return registrationBean;
    }
}

测试结果:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

三、Listener监听器

3.1、简介:

监听器就是监听某个对象的状态变化的组件

(1)事件源:被监听的对象。主要有三个域对象:request、session、servletContext(application)。
(2)监听器:监听事件源对象的组件,事件源对象的状态变化就会触发监听器。
(3)注册监听器:将监听器与事件源进行绑定。
(4)响应行为:监听器听到事件源的转台变化是,所涉及的功能代码

3.2、事件源监听器
(1)创建和销毁事件监听器

①ServletContextListener 接口
ServletContext对象创建时:激发contextInitialized(ServletContextEvent sce)方法
ServletContext对象销毁时:激发contextDestroyed(ServletContextEvent sce)方法

②HttpSessionListener接口
HttpSession对象创建时:激发sessionCreated(HttpSessionEvent se)方法
HttpSession对象销毁时:激发contextDestroyed(ServletContextEvent sce)方法
③ServletRequestListener 接口
Request对象创建时:激发requestInitialized方法
Request对象销毁时:激发requestInitialized方法

(2)属性增加删除监听器

监听器:
①ServletContextAttributeListener
②HttpSessionAttributeListener
③ServletRequestAttributeListener
监听对象属性的增加、删除和替换,三个监听器接口方法名称相同,参数不同

(1)监听对象增加属性,web容器调用事件监听器的这个方法
public void attributeAdded()方法,不同域对象参数分别为:ServletContextAttributeEvent scae 、HttpSessionBindingEvent hsbe、ServletRequestAttributeEvent srae
(2)监听对象
删除
属性,web容器调用事件监听器的这个方法
public void attributeRemoved (ServletContextAttributeEvent scae)方法,不同域对象参数分别为:ServletContextAttributeEvent scae、HttpSessionBindingEvent hsbe、ServletRequestAttributeEvent srae
(3)监听对象
替换*属性,web容器调用事件监听器的这个方法
public void attributeReplaced (ServletContextAttributeEvent scae)方法,不同域对象参数分别为:ServletContextAttributeEvent scae、HttpSessionBindingEvent hsbe、ServletRequestAttributeEvent srae

(3)对象的状态监听器

对象绑定到HttpSession对象: void valueBound(HttpSessionBindingEvent event)
对象与HttpSession对象解绑:void valueUnbound(HttpSessionBindingEvent event)
当绑定到HttpSession对象中的对象将要随HttpSession对象被钝化之前:sessionWillPassivate(HttpSessionBindingEvent event)
当绑定到 HttpSession 对象中的对象将要随 HttpSession 对象被活化之后:
sessionDidActive(HttpSessionBindingEvent event)

一个 web.xml 文件中可以配置多个 Servlet 事件监听器
web 服务器按照它们在 web.xml 文件中的注册顺序来加载和注册这些 Serlvet 事件监听器

四、示例

实现ServletContextListener接口

public class MyListener implements ServletContextListener {
    @Override
    public void contextInitialized(ServletContextEvent sce){
        System.out.println("Servlet上下文--->当前web项目启动");
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce){
        System.out.println("当前类销毁");
    }
}

注册Listenner监听器

@Configuration
public class Config {
//    @Bean
//    public ServletRegistrationBean myServlet(){
//        ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet());
//        registrationBean.addUrlMappings("/login");
//        return registrationBean;
//    }
//注册过滤器
    @Bean
    public FilterRegistrationBean myFilter(){
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new MyFilter());
        //设置拦截规则
        registrationBean.setUrlPatterns(Arrays.asList("/testfilter","/test"));
        return registrationBean;
    }
//注册监听器
    @Bean
    public ServletListenerRegistrationBean myListener(){
        ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean(new MyListener());
        return registrationBean;
    }
}

测试结果
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot与MyBatis的结合可以帮助我们快速开发基于数据库的应用程序。下面是使用Spring Boot和MyBatis的一般步骤: 1. 导入依赖:在Maven或Gradle项目中,添加Spring Boot和MyBatis的依赖。例如,在Maven项目中可以添加以下依赖: ```xml <dependencies> <!-- Spring Boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- MyBatis --> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> </dependency> <!-- 数据库驱动 --> <!-- 根据自己使用的数据库选择对应的驱动依赖 --> <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <scope>runtime</scope> </dependency> </dependencies> ``` 2. 配置数据源:在application.properties或application.yml文件中配置数据库连接信息,包括数据库URL、用户名和密码等。 3. 创建实体类和Mapper接口:创建与数据库表对应的实体类,并创建Mapper接口用于定义数据库操作方法。 4. 创建Mapper映射文件:创建与Mapper接口对应的XML映射文件,编写SQL语句以及结果映射配置。 5. 注册Mapper接口:在Spring Boot的配置类或者使用@MapperScan注解,将Mapper接口注册到Spring容器中。 6. 编写业务逻辑:在Service层编写业务逻辑,调用Mapper接口中的方法完成数据操作。 7. 运行应用程序:使用Spring Boot的启动类来运行应用程序,启动内嵌的Servlet容器。 以上是使用Spring Boot和MyBatis的一般步骤,当然在实际项目中还可能涉及其他配置和组件的使用。希望对你有帮助!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值