由于SpringBoot默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,没有web.xml文
件。所以三大组件的注册也有相应的改变,接下来看一下,springboot中是如何注册的:
一、Servlet的注册
Servlet是一种独立于平台和协议的处于服务器端的Java应用程序,利用他可以实现业务层和表现层的分离,同时又可以生成动态页面
1. 创建一个Servlet类继承HttpServlet
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 {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("<h1>Hello World,servlet!</h1>");
}
}
2. 在配置类中配置Servlet
import com.infosec.netsafess.servlet.MyServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class ServletComponentConfiguration {
@Bean
public ServletRegistrationBean myServlet(){
ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean(new MyServlet(),"/myServlet");
return servletRegistrationBean;
}
}
接下来的几个配置都添加在这个配置类中!
执行结果如下:
二、Filter的注册
Filter称之为过滤器,可以通过它对web服务器管理的所有web资源,通常用来实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等。
1. 创建一个filter类实现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("过滤器逻辑运行中");
chain.doFilter(request,response); //放行
}
@Override
public void destroy() {
}
}
2. 将Filter注册到SpringBoot容器中
@Bean
public FilterRegistrationBean myFilter(){
FilterRegistrationBean registrationBean = new FilterRegistrationBean();
registrationBean.setFilter(new MyFilter()); //设置过滤类
registrationBean.setUrlPatterns(Arrays.asList("/myServlet")); //这里是一个数组,里面都是过滤的路径
return registrationBean;
}
三、 Listener的注册
1. 创建一个类实现监听器,以ServletContextListener为例
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class MyListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("监听器开始运行了");
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("监听器开始销毁了");
}
}
2. 将监听器注册到spring容器中
import com.university.subject.jsp_component.MyListener;
import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MyWebConfig {
@Bean
public ServletListenerRegistrationBean myListener(){
ServletListenerRegistrationBean<MyListener> registrationBean = new ServletListenerRegistrationBean<>(new MyListener());
return registrationBean;
}
}
//这个监听器是监听上下文的初始化,服务启动和关闭就会触发这个监听器
2019-07-24 23:37:37.867 INFO 1412 --- [ restartedMain] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.21]
2019-07-24 23:37:37.977 INFO 1412 --- [ restartedMain] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2019-07-24 23:37:37.977 INFO 1412 --- [ restartedMain] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 2400 ms
监听器开始运行了
2019-07-24 23:37:38.827 INFO 1412 --- [ restartedMain] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
3. 支持的监听器类型
static {
Set<Class<?>> types = new HashSet();
types.add(ServletContextAttributeListener.class);
types.add(ServletRequestListener.class);
types.add(ServletRequestAttributeListener.class);
types.add(HttpSessionAttributeListener.class);
types.add(HttpSessionListener.class);
types.add(ServletContextListener.class);
SUPPORTED_TYPES = Collections.unmodifiableSet(types);
}
监听器类型 | 功能 |
---|---|
ServletContextAttributeListener | 监听spring上下文的属性增加和减少 |
ServletRequestListener | 监听ServletRequest请求 |
ServletRequestAttributeListener | 监听ServletRequest请求属性值的变化 |
HttpSessionAttributeListener | 监听HttpSession的属性 |
HttpSessionListener | 监听HttpSession |
ServletContextListener | 监听spring的上下文的创建和销毁 |
HttpSessionAttributeListener | 监听HttpSession的属性
HttpSessionListener | 监听HttpSession
ServletContextListener | 监听spring的上下文的创建和销毁