SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listener)

作者:怪咖软妹@ 时间:2021-07-19 18:41:43 

本篇主要讲解SpringBoot当中使用Servlet三大组件,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧!

三大组件作用

1、Servlet

Servlet是用来处理客户端请求的动态资源,也就是当我们在浏览器中键入一个地址回车跳转后,请求就会被发送到对应的Servlet上进行处理。
Servlet的任务有:

1、接收请求数据:我们都知道客户端请求会被封装成HttpServletRequest对象,里面包含了请求头、参数等各种信息。
2、处理请求:通常我们会在service、doPost或者doGet方法进行接收参数,并且调用业务层(service)的方法来处理请求。
3、完成响应:处理完请求后,我们一般会转发(forward)或者重定向(redirect)到某个页面,转发是HttpServletRequest中的方法,重定向是HttpServletResponse中的方法,两者是有很大区别的。

HttpServlet

间接实现了Servlet接口,通过继承HttpServlet实现了一个Servlet时,我们只需要根据处理请求的类型(method的值)来重写不同方法,处理get请求,重写doGet请求;处理post请求,重写doPost请求。

2、Filter

在客户端到服务器的过程中,当发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行,在服务器给客户端响应时也会进行判断 如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行。

什么是oop?(拓展)

面向对象编程,java是面向对象变成,封装、继承、多台、抽象。

什么是aop?(拓展)

面向切面编程。用来过滤请求。在请求到达servlet之前,对其进行过滤。

它是sun公司srvlet2.3版本之后推出的新功能,在2.3之前的版本没有该功能,定义一个过滤器需要实现(implement)Filter接口,这里实现的是javax.servlet.Filter。

过滤器的生命周期:

在项目开始启动的时候,过滤器开始初始化,当有请求来的时候开始自动去执行doFilter方法,随着项目的关闭过滤器开始停止。

3、Listener

Listener就是 * ,我们在JavaSE开发或者Android开发时,经常会给按钮加 * ,当点击这个按钮就会触发监听事件,调用onClick方法,本质是方法回调。在JavaWeb的Listener也是这么个原理,但是它监听的内容不同,它可以监听Application、Session、Request对象,当这些对象发生变化就会调用对应的监听方法。

* :相当于之前所学的事件
源:监听的是谁
动作:触发的条件
响应:当条件满足时会执行的函数

ServletContext对象:
声明周期:随着项目的启动而创建,随着项目的关闭而销毁。
生命周期可以理解为: * >过滤器>servlet

代码示例

在不用springboot项目的时候我们想要使用这些功能都是在web.xml当中配置,而SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文件。
这里我直接通过一个小demo给大家演示,并展示效果

1、导入依赖


<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>

2、创建Listener(创建一个类实现ServletContextListener 接口)


package com.gzl.cn.listener;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
 System.out.println("contextInitialized...web应用启动");
}

@Override
public void contextDestroyed(ServletContextEvent sce) {
 System.out.println("contextDestroyed...当前web项目销毁");
}
}

3、创建一个servlet(创建一个类实现HttpServlet 接口)


package com.gzl.cn.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class MyServlet extends HttpServlet {

//处理get请求
@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 {
 resp.getWriter().write("Hello MyServlet");
}
}

4、创建filter(创建一个类实现filter接口)


package com.gzl.cn.filter;

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

public class MyFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
 System.out.println("MyFilter process...");
 chain.doFilter(request,response);

}

@Override
public void destroy() {

}
}

5、创建配置类

注册三大组件用以下方式,把他注入到容器当中即可生效。


package com.gzl.cn.config;

import java.util.Arrays;

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 com.gzl.cn.filter.MyFilter;
import com.gzl.cn.listener.MyListener;
import com.gzl.cn.servlet.MyServlet;

@Configuration
public class MyServerConfig {

//注册三大组件
@Bean
public ServletRegistrationBean myServlet(){
 ServletRegistrationBean registrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
 registrationBean.setLoadOnStartup(1);
 return registrationBean;
}

@Bean
public FilterRegistrationBean myFilter(){
 FilterRegistrationBean registrationBean = new FilterRegistrationBean();
 registrationBean.setFilter(new MyFilter());
 registrationBean.setUrlPatterns(Arrays.asList("/hello","/myServlet"));
 return registrationBean;
}

@Bean
public ServletListenerRegistrationBean myListener(){
 ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
 return registrationBean;
}

}

6、测试效果

項目启动的时候,Listener监听到了,并打印出了日志

SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listener)

我们配置类当中我们配置的路径是访问myServlet触发过滤器和servlet
所以这里我们直接访问 http://localhost:8080/myServlet

SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listener)

访问的时候filter打印出来了

SpringBoot中使用Servlet三大组件的方法(Servlet、Filter、Listener)

来源:https://blog.csdn.net/weixin_43888891/article/details/112550155

标签:SpringBoot,Servlet,Filter,Listener,组件
0
投稿

猜你喜欢

  • mybatis初始化SqlSessionFactory失败的几个原因分析

    2021-06-17 11:13:44
  • Spring AOP的概念与实现过程详解

    2023-02-17 02:54:12
  • Windows下gradle的安装与配置的超详细教程

    2023-08-27 17:01:50
  • SpringBoot在IDEA中实现热部署的步骤

    2022-01-14 23:30:02
  • feignclient https 接口调用报证书错误的解决方案

    2021-08-20 18:35:55
  • Java try-catch-finally异常处理机制详解

    2023-10-02 20:29:00
  • 对Mapper 中几种update的区别说明

    2023-05-19 04:39:44
  • Java中两个字符串进行大小比较的方法

    2023-10-12 13:39:26
  • Java 读取PDF中的文本和图片的方法

    2021-09-17 03:05:12
  • Springboot实现图片上传功能的示例代码

    2022-08-05 22:46:44
  • Java利用Strategy模式实现堆排序

    2022-07-16 08:01:04
  • java集合框架的体系结构详细说明

    2021-10-24 10:33:29
  • 对Jpa中Entity关系映射中mappedBy的全面理解

    2023-07-25 03:48:39
  • Java中lombok的@Builder注解的解析与简单使用详解

    2022-12-29 06:44:55
  • Eclipse+Java+Swing实现学生成绩管理系统的实例代码

    2022-12-14 15:35:04
  • Java 随机生成验证码(支持大小写字母、数字、随机字体)的实例

    2023-11-25 00:35:38
  • Spring在SingleTon模式下的线程安全详解

    2021-10-08 11:39:31
  • Spring Boot与Spark、Cassandra系统集成开发示例

    2021-06-03 13:40:51
  • Java进程cpu占用过高问题解决

    2021-08-09 00:16:59
  • SpringBoot整合MybatisPlus的教程详解

    2023-12-06 18:05:20
  • asp之家 软件编程 m.aspxhome.com