Spring Boot 学习(一) 原生组件注入
1.使用Servlet API
@ServletComponentScan(basePackages = "com.sp") //可以自动将写的servlet扫描进去 配置扫描的包,在BootWeb01Application里面声明注解
@WebServlet(urlPatterns = "/my") //这注解是servlet3.0生成的注解,在Myservlet里声明注解 ,直接响应没有结果spring boot的拦截器
@WebFilter(urlPatterns = {"/css/*","/js/*","/imges/*"}) //可以拦截请求,css下的所有、js下的所有、imges下的所有请求
@WebListener
Servlet
@WebServlet(urlPatterns = "/my") //这注解是servlet3.0生成的注解 public class Myservlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.getWriter().write("123456"); } }

Filter
package com.sp.filter; import lombok.extern.slf4j.Slf4j; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.IOException; @Slf4j @WebFilter(urlPatterns = {"/css/*","/js/*","/imges/*"}) //指定路径拦截,拦截成功会打印MyFilter工作 public class Myfilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { log.info("Myfilter初始化完成"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { log.info("Myfilter工作"); // Filter想要进行过滤,要在Filter链中 chain.doFilter(request,response); } @Override public void destroy() { log.info("Myfilter销毁"); } }
Listener
package com.sp.servlet; import lombok.extern.slf4j.Slf4j; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import javax.servlet.annotation.WebListener; @Slf4j @WebListener public class MyservletListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { log.info("MyservletListener监听到项目初始化完成"); } @Override public void contextDestroyed(ServletContextEvent sce) { log.info("MyservletListener监听到项目销毁"); } }


2.使用方法二、使用RegistrationBean
springboot中的拦截方法
注意要先声明为Configration配置类,之后通过添加容器的方式进行配置Servlet,只要配置了请求的Url才会在控制台显示提示信息
package com.sp.servlet; import com.sp.filter.Myfilter; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.boot.web.servlet.ServletRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.util.Arrays; @Configuration //声明为配置类 这里没有声明ProxyBeanMethods = false
// 因为false会导致不是单实例,每次new都会新建一个,会导致对象的冗余
// 默认为true
public class MyRegistConfig { @Bean //存放到容器中 public ServletRegistrationBean myServlet() { Myservlet myservlet = new Myservlet(); return new ServletRegistrationBean(myservlet,"/my01","/my02"); //可以放多个servlet请求 } @Bean public FilterRegistrationBean myFilter() { Myfilter myfilter = new Myfilter(); // return new FilterRegistrationBean(myfilter,myServlet() ); //访问servlet的指定路径 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myfilter); filterRegistrationBean.setUrlPatterns(Arrays.asList("/my04","/my05")); //自定义访问路径
return filterRegistrationBean; } }

@Bean //存放到容器中 public ServletRegistrationBean myServlet() { Myservlet myservlet = new Myservlet(); return new ServletRegistrationBean(myservlet,"/my01","/my02","/my04"); //可以放多个servlet请求 } @Bean public FilterRegistrationBean myFilter() { Myfilter myfilter = new Myfilter(); // return new FilterRegistrationBean(myfilter,myServlet() ); //访问servlet的指定路径 FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myfilter); filterRegistrationBean.setUrlPatterns(Arrays.asList("/my04","/my05")); //此时自定义拦截,其中my04是servlet定义的请求,所以可以返回123456 return filterRegistrationBean; }

监听器,在启动时打印写入的内容
@Bean public ServletListenerRegistrationBean myListener() { MyservletListener myservletListener = new MyservletListener(); return new ServletListenerRegistrationBean(myservletListener); }

@Slf4j @WebListener public class MyservletListener implements ServletContextListener { @Override public void contextInitialized(ServletContextEvent sce) { log.info("MyservletListener监听到项目初始化完成"); } @Override public void contextDestroyed(ServletContextEvent sce) { log.info("MyservletListener监听到项目销毁"); } }
*单星是servlet的写法 **双星是spring的写法
注意:配置静态资源路径的时候:可以用数组来表示多个静态资源路径
resources:
static-locations: [classpath:/templates,classpath:/static,classpath:/public]

浙公网安备 33010602011771号