深入学习Spring Boot的组件
Spring Boot整合Web层技术
先附上目录结构:
整合Servlet
通过注解
创建Servlet类
FirstServlet.java 1
2
3
4
5
6
7
8
9
10/**
* 通过注解整合Servlet
* 需要在启动类添加@ServletComponentScan注解实例化Servlet类
*/
"FirstServlet", urlPatterns = "/FirstServlet") (name =
public class FirstServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
System.out.println("FirstServlet");
}
}
修改启动类
WebApplication.java 1
2
3
4
5
6
7
8
9
//通过注解扫描@WebServlet,@WebFilter,@WebListener并实例化
public class WebApplication {
public static void main(String[] args) {
SpringApplication.run(WebApplication.class, args);
}
}
手动配置
创建Servlet类
SecoondServlet.java 1
2
3
4
5
6
7
8
9/**
* 手动配置法
* 添加配置类或去启动类注册方法
*/
public class SecondServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) {
System.out.println("SecondServlet");
}
}
创建配置类
ServletConfig.java 1
2
3
4
5
6
7
8
9
10
11
12
13
14/**
* 完成Servlet组件注册
* 因为@SpringBootApplication包含@Configuration注解
* 所以这个类里面的方法也可以写在启动类里面
*/
public class ServletConfig {
public ServletRegistrationBean getServletRegistrationBean(){
ServletRegistrationBean bean = new ServletRegistrationBean(new SecondServlet());
bean.addUrlMappings("/SecondServlet");
return bean;
}
}
整合Filter
通过注解
创建Filter类
实现javax.servlet.Filter接口
idea会提示,把三个抽象方法重载
FirstFilter.java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25/**
* 通过注解整合Filter
* 需要在启动类添加@ServletComponentScan注解实例化
* Filter类是Servlet类的子集
*/
//@WebFilter(filterName = "FirstFilter", urlPatterns = {"*.do", "*.jsp"}) 拦截指定后缀名
"FirstFilter", urlPatterns = "/FirstServlet") //拦截FirstServlet (filterName =
public class FirstFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入First Filter");
filterChain.doFilter(servletRequest, servletResponse);//
System.out.println("离开First Filter");
}
public void destroy() {
}
}修改启动类
已配置@ServletComponentScan注解
手动配置
创建Filter类
SecondFilter.java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/**
* 手动配置法
* 添加配置类或去启动类注册方法
*/
public class SecondFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入Second Filter");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("离开Second Filter");
}
public void destroy() {
}
}
创建配置类
FilterConfig.java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15/**
* 完成Filter组件注册
* 因为@SpringBootApplication包含@Configuration注解
* 所以这个类里面的方法也可以写在启动类里面
*/
public class FilterConfig {
public FilterRegistrationBean getFilterRegistrationBean(){
FilterRegistrationBean bean = new FilterRegistrationBean(new SecondFilter());
bean.addUrlPatterns("/SecondServlet");
//bean.addUrlPatterns("*.do", "*.jsp");
return bean;
}
}
整合Listener
以ServletContextListener
为例
通过注解
创建Listener类
实现
ServletContextListener
接口,右键+Generate...
或Alt+Insert,然后选择Override Methods...
或Ctrl+O,选择contextInitialized
contextDestroyed
这两个方法,然后:
FirstListener.java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16/**
* 通过注解整合Listener
* 修改启动类添加注解@ServletComponentScan
*/
public class FirstListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
System.out.println("First Listener");
}
public void contextDestroyed(ServletContextEvent sce) {
}
}
修改启动类
已配置@ServletComponentScan注解
手动配置
创建Listener类
SecondFilter.java 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22/**
* 手动配置法
* 添加配置类或去启动类注册方法
*/
public class SecondFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("进入Second Filter");
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("离开Second Filter");
}
public void destroy() {
}
}创建配置类
ListenerConfig.java 1
2
3
4
5
6
7
8
9
10
11
12
13/**
* 完成Listener组件注册
* 因为@SpringBootApplication包含@Configuration注解
* 所以这个类里面的方法也可以写在启动类里面
*/
public class ListenerConfig {
public ServletListenerRegistrationBean getServletListenerRegistrationBean(){
ServletListenerRegistrationBean bean = new ServletListenerRegistrationBean(new SecondListener());
return bean;
}
}
总结
三个组件都可以利用注解配置或者手动配置,组件类都要继承父类或者实现接口,注解方法只需要在组件类上方添加相应的注解并配置变量,然后在启动类添加@ServletComponentScan注解即可;手动配置组件类上不需要注解,但是需要一个配置类并注解@Configuration(@SpringBootApplication是包含@Configuration的,因此配置类少的话可以直接把方法写到启动类里面),里面的方法要实现注册组件并注解@Bean。