目录、
一.前言
经常熟悉Servlet的人知道,Servlet最主要的是它的三大组件,Servlet、Filter、Listener。如果我们想要在SpringBoot中使用Servlet这三大组件,有两种方式,分别是组件注册和路径扫描。
组件注册就是自己写一个Servlet组件配置类,然后在里面进行逐个注册。
路径扫描就是用到SpringBoot中的注解,将注解写到自己组件的类上即可。
在Spring Boot中,可以通过两种方式整合Servlet三大组件(Servlet、Filter、Listener)。我们这里主要讲如何使用组件注册方式整合内嵌Servlet容器的Servlet、Filter、Listener
二.配置pox.xml文件
导入项目的依赖
代码如下:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
三.Servlet
1.什么是Servlet
servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层。
2.创建MyServlet类
创建一个自定义Servlet类MyServlet使用@Component注解将MyServlet类作为组件注入Spring容器。MyServlet类继承自HttpServlet,通过HttpServletResponse对象向页面输出“Servlet helloworld”
代码如下:
@Component
public class MyServlet extends HttpServlet{
@Override
public void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException ,IOException{
this.doPost(req, resp);
}
@Override
public void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("Servlet helloworld");
}
}
3.编写Servlet配置类ServletConfig
创建一个Servlet配置类,在该类中注册刚刚创建的这个Servlet类。由于该类是配置类,所以在类上面要加上注解@Configuration
代码如下:
@Configuration
public class ServletConfig {
@Bean
public ServletRegistrationBean getServlet(MyServlet myServlet){
ServletRegistrationBean registrationBean = new ServletRegistrationBean(myServlet,"/myServlet");
return registrationBean;
}
}
4.运行效果
完成之后完成后启动项目,在浏览器访问“http://localhost:8080/myServlet”
四.Filter
1.什么是Filter
filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响应,它只是修改对某一资源的请求,或者修改从某一的响应。
2.创建MyFilter类
创建一个自定义Servlet类 MyFilter,使用@Component注解将当前MyFilter类作为组件注入到Spring容器中。MyFilter类实现Filter接口,并重写了init() - doFilter()和destroy()方法,在doFilter()方法中向控制台打印了“hello MyFilter”字符串。
代码如下:
package com.example.demoweb.filter;
import jakarta.servlet.*;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
public class MyFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException{}
@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 destroy(){}
3.修改配置类ServletConfig
向Servlet组件配置类注册自定义Filter类,打开之前创建的Servlet组件配置类ServletConfig,将该自定义Filter类使用组件注册方式进行注册。
代码如下:
@Bean
public FilterRegistrationBean getFilter(MyFilter filter) {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(filter);
registrationBean.setUrlPatterns(Arrays.asList("/toLoginPage", "/myFilter"));
return registrationBean;
}
4.运行效果
完成后启动项目,在浏览器上访问“http://localhost:8080/myFilter”
由于没有编写对应路径的请求处理方法,所以浏览器会出现404错误页面
重点关注打印台,这时打印台出现hello MyFilter则说明我们整合自定义Filter组件成功。
五.Listener
1.什么是Listener
监听器,从字面上可以看出listener主要用来监听只用。通过listener可以监听web服务器中某一个执行动作,并根据其要求作出相应的响应。通俗的语言说就是在application,session,request三个对象创建消亡或者往其中添加修改删除属性时自动执行代码的功能组件。
2.创建MyListener类
代码如下:
package com.example.demoweb.Listener;
import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import org.springframework.stereotype.Component;
@Component
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent servletContextEvent){
System.out.println("contextInitialized ...");
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
System.out.println("contextDestroyed ...");
}
}
3.修改配置类ServletConfig
向Servlet组件配置类注册自定义Listener类。打开之前创建的Servlet组件配置类ServletConfig,将该自定义Listener类使用组件注册方式进行注册
代码如下:
@Bean
public ServletListenerRegistrationBean getServletListener(MyListener myListener) {
ServletListenerRegistrationBean registrationBean = new ServletListenerRegistrationBean(myListener);
return registrationBean;
}
4.运行效果
完成后启动项目,关注控制台。程序启动成功后,控制台会打印出自定义Listener组件中定义的输出语句“contextInitialized ...”。单击图中的【Exit】按钮关闭当前项目(注意,如果直接单击红色按钮会强制关闭程序,浏览器就无法打印关闭监听信息)
程序成功关闭后,控制台打印出了自定义Listener组件中定义的输出语句“contextDestroyed ...”。说明t整合自定义Listener组件成功。
六.使用 路径扫描 的方法整合三大组件
点击一下链接自行学习通过路径扫描的方法整合web三大组件,博主仔细查找且亲测好评的文章。
路径扫描整合web三大组件https://blog.csdn.net/weixin_60707895/article/details/120773675