【Springboot】第三章 SpringBoot 和 web 组件

第三章 SpringBoot 和 web 组件

三个组件:拦截器、Servlet 、Filter

3.1 SpringBoot中拦截器

拦截器是SpringMVC中一种对象,能拦截器对Controller的请求。
拦截器框架中有系统的拦截器, 还可以自定义拦截器,实现对请求预先处理。

实现自定义拦截器:

1.创建类实现SpringMVC框架的HandlerInterceptor接口
HandlerInterceptor有三个默认方法,主要用第一个,来实现对请求的拦截和请求的预先处理,返回值是布尔值。返回值true代表通过拦截器的验证,请求是可以被系统处理的。
在这里插入图片描述

2.需在SpringMVC的配置文件声明拦截器

<mvc:interceptors>
	<mvc:interceptor>
    	<mvc:path="url" />
        <bean class="拦截器类全限定名称"/>
    </mvc:interceptor>
</mvc:interceptors>

在SpringMVC 框架中需要以上操作。


接下来是Springboot中怎么创建拦截器以及怎么放进框架中:
在这里插入图片描述

1.自定义拦截器:web👉LoginInterceptor
在这里插入图片描述
重写preHandle方法
在这里插入图片描述
在这里插入图片描述
👇

public class LoginInterceptor implements HandlerInterceptor  {
    /**
     * @param request
     * @param response
     * @param handler  被拦截器的控制器对象
     * @return boolean
     *    true: 请求能被Controller处理
     *    false: 请求被截断
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("执行了LoginInterceptor的preHandle");
        return true;
    }
}
  1. 需要把拦截器加入容器中才能起作用,自定义一个类实现WebMvcConfigurer的接口。
    在这里插入图片描述
    WebMvcConfigurer中有很多默认方法:
    在这里插入图片描述
    重写addInterceptors
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

运行主函数:
在这里插入图片描述
访问user/account:
在这里插入图片描述
拦截器运行:
在这里插入图片描述
访问user/login不会拦截:
在这里插入图片描述

3.2 Servlet

在SpringBoot框架中使用Servlet对象。

使用步骤:

  1. 创建Servlet类。 创建类继承HttpServlet
  2. 注册Servlet ,让框架能找到Servlet:ServletRegistrationBean

例子:
1.创建自定义Servlet类
在这里插入图片描述
在这里插入图片描述

//创建Servlet类
public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req,resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       //使用HttpServletResponse输出数据,应答结果
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out  = resp.getWriter();
        out.println("===执行的是Servlet==");
        out.flush();
        out.close();
    }
}

2.注册Servlet
在这里插入图片描述
ServletRegistrationBean这个类源码:
在这里插入图片描述
ServletRegistrationBean的第一个参数是 Servlet对象, 第二个是url地址:

public ServletRegistrationBean(T servlet, String... urlMappings)     
@Configuration
public class WebApplictionConfig {
    //定义方法, 注册Servlet对象
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean bean = new ServletRegistrationBean( new MyServlet(),"/myservlet");
   
        return bean;
    }
}

运行主函数,浏览器输入访问地址:
在这里插入图片描述
servletRegistrationBean的无参构造方法:

@Configuration
public class WebApplictionConfig {
    //定义方法, 注册Servlet对象
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){

        //两个参数
//        ServletRegistrationBean bean = new ServletRegistrationBean( new MyServlet(),"/myservlet");

        //无参构造
        ServletRegistrationBean bean = new ServletRegistrationBean();
        bean.setServlet( new MyServlet());
        bean.addUrlMappings("/login","/test"); // <url-pattern>
        
        return bean;
    }

运行主函数,在浏览器输入地址:
在这里插入图片描述
在这里插入图片描述

3.3 过滤器Filter

Filter是Servlet规范中的过滤器,可以处理请求, 对请求的参数、属性进行调整。 常常在过滤器中处理字符编码

在Springboot框架中使用过滤器:

  1. 创建自定义过滤器类
  2. 注册Filter过滤器对象

例子:
1. 自定义过滤器:自定义过滤器类并实现Filter接口
web 👉 MyFilter
在这里插入图片描述
在这里插入图片描述

// 自定义过滤器
public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("执行了MyFilter,doFilter ");
        filterChain.doFilter(servletRequest,servletResponse);
    }
}

2. 注册Filter: filterRegistrationBean

@Configuration
public class WebApplicationConfig {
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        //无参构造
        FilterRegistrationBean bean  = new FilterRegistrationBean();
        //对象
        bean.setFilter( new MyFilter() );
        //地址
        bean.addUrlPatterns("/user/*");
        return bean;
    }
}

在这里插入图片描述

@Controller
public class CustomFilterController {

    @RequestMapping("/user/account")
    @ResponseBody
    public String userAccount(){
        return "访问user/account地址";
    }

    @RequestMapping("/query")
    @ResponseBody
    public String queryAccount(){
        return "访问/query地址";
    }
}

在这里插入图片描述
执行主函数,在浏览器输入访问地址:
在这里插入图片描述
在这里插入图片描述
将日志清空,再输入/query
在这里插入图片描述
日志输出:
在这里插入图片描述

3.4 字符集过滤器

CharacterEncodingFilter : 解决post请求中乱码的问题

SpringMVC框架中 在web.xml 注册过滤器, 配置它的属性。

第一种方式:
使用步骤:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
执行主函数,在浏览器输入访问地址:
在这里插入图片描述
在这里插入图片描述
Springboot框架中使用过滤器解决乱码问题:
1.在配置类中,配置字符集过滤器,filterRegistrationBean
在这里插入图片描述

@Configuration
public class WebSystemConfig {
    //注册Servlet
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        MyServlet myServlet = new MyServlet();
        ServletRegistrationBean reg = new ServletRegistrationBean(myServlet,"/myservlet");
        return reg;
    }
    //注册Filter
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean reg = new FilterRegistrationBean();

        //使用框架中的过滤器类
        CharacterEncodingFilter filter  = new CharacterEncodingFilter();
        //指定使用的编码方式
        filter.setEncoding("utf-8");
        //指定request , response都使用encoding的值
        filter.setForceEncoding(true);

        reg.setFilter(filter);
        //指定 过滤的url地址
        reg.addUrlPatterns("/*");

        return reg;
        
    }
}

2.修改application.properties文件, 让自定义的过滤器起作用
SpringBoot中默认已经配置了CharacterEncodingFilter。编码默认ISO-8859-1。
设置enabled=false 作用是关闭系统中配置好的过滤器, 使用自定义的CharacterEncodingFilter。
在这里插入图片描述

server.servlet.encoding.enabled=false

第二种方式 简单的方式使用字符集过滤器
不需要在config文件中注册过滤器。只需要修改application.properties文件
在这里插入图片描述

server.port=9001
server.servlet.context-path=/myboot

#让系统的CharacterEncdoingFilter生效
server.servlet.encoding.enabled=true
#指定使用的编码方式
server.servlet.encoding.charset=utf-8
#强制request,response都使用charset属性的值
server.servlet.encoding.force=true

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目录结构 尚硅谷_SpringBoot_入门-课程简介 尚硅谷_SpringBoot_入门-Spring Boot简介 尚硅谷_SpringBoot_入门-微服务简介 尚硅谷_SpringBoot_入门-环境准备 尚硅谷_SpringBoot_入门-springboot-helloworld 尚硅谷_SpringBoot_入门-HelloWorld细节-场景启动器(starter) 尚硅谷_SpringBoot_入门-HelloWorld细节-自动配置 尚硅谷_SpringBoot_入门-使用向导快速创建Spring Boot应用 尚硅谷_SpringBoot_配置-yaml简介 尚硅谷_SpringBoot_配置-yaml语法 尚硅谷_SpringBoot_配置-yaml配置文件值获取 尚硅谷_SpringBoot_配置-properties配置文件编码问题 尚硅谷_SpringBoot_配置-@ConfigurationProperties与@Value区别 尚硅谷_SpringBoot_配置-@PropertySource、@ImportResource、@Bean 尚硅谷_SpringBoot_配置-配置文件占位符 尚硅谷_SpringBoot_配置-Profile多环境支持 尚硅谷_SpringBoot_配置-配置文件的加载位置 尚硅谷_SpringBoot_配置-外部配置加载顺序 尚硅谷_SpringBoot_配置-自动配置原理 尚硅谷_SpringBoot_配置-@Conditional&自动配置报告 尚硅谷_SpringBoot_日志-日志框架分类和选择 尚硅谷_SpringBoot_日志-slf4j使用原理 尚硅谷_SpringBoot_日志-其他日志框架统一转换为slf4j 尚硅谷_SpringBoot_日志-SpringBoot日志关系 尚硅谷_SpringBoot_日志-SpringBoot默认配置 尚硅谷_SpringBoot_日志-指定日志文件和日志Profile功能 尚硅谷_SpringBoot_日志-切换日志框架 尚硅谷_SpringBoot_web开发-简介 尚硅谷_SpringBoot_web开发-webjars&静态资源映射规则 尚硅谷_SpringBoot_web开发-引入thymeleaf 尚硅谷_SpringBoot_web开发-thymeleaf语法 尚硅谷_SpringBoot_web开发-SpringMVC自动配置原理 尚硅谷_SpringBoot_web开发-扩展与全面接管SpringMVC 尚硅谷_SpringBoot_web开发-【实验】-引入资源 尚硅谷_SpringBoot_web开发-【实验】-国际化 尚硅谷_SpringBoot_web开发-【实验】-登陆&拦截器 尚硅谷_SpringBoot_web开发-【实验】-Restful实验要求 尚硅谷_SpringBoot_web开发-【实验】-员工列表-公共页抽取 尚硅谷_SpringBoot_web开发-【实验】-员工列表-链接高亮&列表完成 尚硅谷_SpringBoot_web开发-【实验】-员工添加-来到添加页面 尚硅谷_SpringBoot_web开发-【实验】-员工添加-添加完成 尚硅谷_SpringBoot_web开发-【实验】-员工修改-重用页面&修改完成 尚硅谷_SpringBoot_web开发-【实验】-员工删除-删除完成 尚硅谷_SpringBoot_web开发-错误处理原理&定制错误页面 尚硅谷_SpringBoot_web开发-定制错误数据 尚硅谷_SpringBoot_web开发-嵌入式Servlet容器配置修改 尚硅谷_SpringBoot_web开发-注册servlet三大组件 尚硅谷_SpringBoot_web开发-切换其他嵌入式Servlet容器 尚硅谷_SpringBoot_web开发-嵌入式Servlet容器自动配置原理 尚硅谷_SpringBoot_web开发-嵌入式Servlet容器启动原理 尚硅谷_SpringBoot_web开发-使用外部Servlet容器&JSP;支持 尚硅谷_SpringBoot_web开发-外部Servlet容器启动SpringBoot应用原理 尚硅谷_SpringBoot_Docker-简介 尚硅谷_SpringBoot_Docker-核心概念 尚硅谷_SpringBoot_Docker-linux环境准备 尚硅谷_SpringBoot_Docker-docker安装&启动&停止 尚硅谷_SpringBoot_Docker-docker镜像操作常用命令 尚硅谷_SpringBoot_Docker-docker容器操作常用命令 尚硅谷_SpringBoot_Docker-docker安装MySQL 尚硅谷_SpringBoot_数据访问-简介 尚硅谷_SpringBoot_数据访问-JDBC&自动配置原理 尚硅谷_SpringBoot_数据访问-整合Druid&配置数据源监控 尚硅谷_SpringBoot_数据访问-整合MyBatis(一)-基础环境搭建 尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-注解版MyBatis 尚硅谷_SpringBoot_数据访问-整合MyBatis(二)-配置版MyBatis 尚硅谷_SpringBoot_数据访问-SpringData JPA简介 尚硅谷_SpringBoot_数据访问-整合JPA 尚硅谷_SpringBoot_原理-第一步:创建SpringApplication 尚硅谷_SpringBoot_原理-第二步:启动应用 尚硅谷_SpringBoot_原理-事件监听机制相关测试 尚硅谷_SpringBoot_原理-自定义starter 尚硅谷_SpringBoot_结束语

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值