手把手入门Springboot2之Web

时间:2023-01-03 01:26:52


Springboot

Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。

Springboot是Spring中的一个成员,可以简化Spring,SpringMVC的核心是IOC容器

使用Springboot开发效率高。

Springboot特点

  1. 独立运行的 Spring 项目

Spring Boot 可以以 jar 包的形式独立运行,Spring Boot 项目只需通过命令“ java–jar xx.jar” 即可运行。

可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

  1. 内嵌 Servlet 容器

Spring Boot 使用嵌入式的 Servlet 容器(例如 Tomcat、Jetty 或者 Undertow 等),应用无需打成 WAR 包 。

  1. 提供 starter 简化 Maven 配置

Spring Boot 提供了一系列的“starter”项目对象模型(POMS)来简化 Maven 配置。

  1. 提供了大量的自动配置

Spring Boot 提供了大量的默认自动配置,来简化项目的开发,开发人员也通过配置文件修改默认配置。

尽可能自动配置Spring容器

  1. 自带应用监控

Spring Boot 可以对正在运行的项目提供监控。

  1. 无代码生成和 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;

    }

}

 

手把手入门Springboot2之Web

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=false

application.properties设置过滤器字符集

设置Springboot框架中(已存在)的CharacterEncodingFilter字符集

 

手把手入门Springboot2之Web

#启用

server.servlet.encoding.enable=true

#设置指定的字符集

server.servlet.encoding.charset=utf-8

#强制request和response使用utf-8字符集

server.servlet.encoding.force=true