Springboot
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。
Springboot是Spring中的一个成员,可以简化Spring,SpringMVC的核心是IOC容器
使用Springboot开发效率高。
Springboot特点
- 独立运行的 Spring 项目
Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。
可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;
- 内嵌 Servlet 容器
Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。
- 提供 starter 简化 Maven 配置
Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。
- 提供了大量的自动配置
Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。
尽可能自动配置Spring容器
- 自带应用监控
Spring Boot 可以对正在运行的项目提供监控。
- 无代码生成和 xml 配置
Springboot特性
遵循习惯优于配置的原则。使用springboot我们只需要很少的配置,大多数使用默认配置即可
内嵌servlet容器,降低了对环境的要求,可用命令直接执行项目
项目快速搭建。springboot尽可能自动配置spring以及第三方库,帮助开发者快速搭建spring框架,可无需配置的自动整合第三方框架
提供各种starter简化Maven配置。springboot提供了一系列的starter用来简化maven依赖。如:常用的spring-boot-starter-web、spring-boot-starter-tomcat等
独立运行spring项目。springboot可以以jar包的形式进行独立运行,使用java -jar xx.jar 就可以成功运行项目,无需部署war文件
可以完全不使用xml配置,只需要自动配置和Java config
应用监控(SpringBootActuator)
SpringBoot使用Interceptor拦截器
拦截器的实现方式
1、继承HandlerInterceptorAdapter的父类
2、实现HandlerInterceptorAdapter接口(推荐方式)
SpringMVC使用拦截器的步骤
1、在session中存储用户信息,用于进行权限验证。
2、实现HandlerInterceptorAdapter接口,重写preHandle()方法
3、springMVC.xml文件中注册拦截器
public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        //判断是否登录过
        if (request.getSession().getAttribute("id") ==null){
            request.setAttribute("msg","还未登录!");//转发
            request.getRequestDispatcher("/WEB-INF/Page/login.jsp").forward(request,response);
            return false;
        }else {
            return true;//放行
        }
    }
}注册拦截器
springmvc.xml
<!--    注册拦截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <!--设置要拦截的请求 -->
            <mvc:mapping path="/**"/>
            <!--设置放行的请求-->
            <mvc:exclude-mapping path="/showLogin"/>
            <mvc:exclude-mapping path="/loginCheck"/>
            <!--配置拦截器实现功能类-->
            <bean class="com.qgs.controller.interceptor.LoginInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>Spring Boot使用拦截器的步骤
1、注册拦截器
2、实现拦截器
实现WebMvcConfigurer接口注册连接器(等同于在springmvc.xml中注册拦截器)
//注册拦截器
public class MvcConfig implements WebMvcConfigurer {
    //添加拦截器对象,并注入IOC容器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        HandlerInterceptor interceptor = new Login();
        //拦截哪个地址
        String[] PathPattern ={"/Info/**"};
        registry.addInterceptor(interceptor).addPathPatterns(PathPattern);
        //放行哪个地址
        String[] path ={"/login/**","/show/**"};
        registry.addInterceptor(interceptor).excludePathPatterns(path);
        //设置拦截器执行顺序
        registry.addInterceptor(interceptor).order(1);
    }
}实现HandlerInterceptor接口,实现拦截器
//注册拦截器@Configuration
public class MvcConfig implements WebMvcConfigurer {
    //添加拦截器对象,并注入IOC容器
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //创建拦截器对象
        HandlerInterceptor interceptor = new Login();
        //拦截哪个地址
        String[] PathPattern ={"/Info/**"};
        //放行哪个地址
        String[] path ={"/login/**","/show/**"};
        registry.addInterceptor(interceptor)
                .addPathPatterns(PathPattern) //拦截
                .excludePathPatterns(path);//放行
    }
}SpringBoot中使用Servlet
1、创建Servlet类。
2、注册Servlet
创建Servlet类
public class ServletA extends HttpServlet {
    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        out.println("hello servlet");
        out.flush();
        out.close();
    }
}注册Servlet
//注册servlet
@Configuration//代替xml文件
public class ServletConfig {
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean bean =new ServletRegistrationBean(
                new ServletA(),"/ServletA");//bean.addUrlMappings("/ServletA" ,"/hello");
        return bean;
    }
}

SpringBoot使用自定义Filter过滤器
Filter是Servlet规范中的过滤器,可以处理请求,请求参数,属性。常用在过滤处理字符编码
Filter过滤器的使用及原理
如:没一个Servlet都要解决中文乱码问题,也有公共代码,这些代码目前都是重复编写,并没有达到复用的效果。
Filter过滤器是和用户的请求路径对应的。
Filter过滤器可以在Servlet这个目标程序执行之前添加代码。也可以在Servlet执行之后添加代码。
一般在过滤器当中编写公共代码。
Filter对象在服务器启动的时候会新建对象。而Servlet在服务器启动时不会新建对象。
Filter和Servlet是单例的。
Filter的实现
java类实现Filter接口
Init方法:在Filter对象第一次被创建后调用,并且只调用一次。
doFilter方法:用户每发送一次请求就执行一次。
Destroy()方法:Filter对象被释放/销毁之前执行,并且只调用一次。
SpringBoot中使用Filter
- 创建类
- 注册Filter
//自定义过滤器public class FilterA implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("过滤了");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}//注册Filter
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean bean =new FilterRegistrationBean();
        bean.setFilter(new FilterA());
        //设置过滤地址
        bean.addUrlPatterns("/login/*");
        return bean;
    }
}SptingBoot使用字符集过滤器
Servet默认响应的是ISO-8859-1
使用步骤
1、注册过滤器
2、application.properties配置
//注册Filter
@Configuration
public class FilterConfig {
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean bean =new FilterRegistrationBean();
        //使用框架中的字符集过滤类
        CharacterEncodingFilter charFilter =new CharacterEncodingFilter();
        charFilter.setEncoding("utf-8");
        charFilter.setForceEncoding(true);
        bean.setFilter(charFilter);
        //设置过滤地址
         bean.addUrlPatterns("/*");
        return bean;
    }
}#Springboot框架已经设置CharacterEncodingFilter
#默认编码为 ISO-8859-1   false表示关闭#Springboot框架已配置的过滤器
server.servlet.encoding.enable=falseapplication.properties设置过滤器字符集
设置Springboot框架中(已存在)的CharacterEncodingFilter字符集

#启用
server.servlet.encoding.enable=true
#设置指定的字符集
server.servlet.encoding.charset=utf-8
#强制request和response使用utf-8字符集
server.servlet.encoding.force=true









