zoukankan      html  css  js  c++  java
  • springboot jsp,过滤器,拦截器

    springboot使用jsp,过滤器,拦截器(拦截器与过滤器区别重点

    jsp使用配置

      创建springboot项目在maven中暂时只添加两个Dependencies :devtools(热部署) web(远程调用,服务支持)

    在创建的项目的pom.xml的<dependencies>增加jsp需要的依赖

     <!--整合jsp,需要的依赖-->
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
            </dependency>


      在application.yml(yml格式的好用,把properties改了)文件中,增加视图解析

    server:
    #  设置端口为80,访问时可以省略
      port: 80
    #  视图解析器
    spring:
      mvc:
        view:
          prefix: /
          suffix: .jsp

      标记webapp 。在src/main下建立 webapp目录 ,然后在Project Structure中,标记为idea识别的webapp

     src/main下 新建 Directory 为webapp ,在project structure中 

    在建立的出来的右侧,进行一下操作。apply 应用之后ok退出。如果有 Web,但是右侧下半部是空的,直接点击右侧下半部的+,指定自己创建的文件即可

    到此,建立的jsp文件放到这个webapp目录下,启动项目在浏览器直接访问就可以定位到jsp资源。

    修改一下配置文件application.properties

    server:
      #  设置端口为80,访问时可以省略
      port: 80
      servlet:
        context-path: /
    #  视图解析器
    spring:
      mvc:
        view:
          prefix: /
          suffix: .jsp

     springboot使用过滤器

        

     首先自己创建一个过滤器  

    package com.xiaoeyu.springboot4.filter;
    
    import javax.servlet.*;
    import java.io.IOException;
    
    //通过实现Filter来自定义过滤器
    public class Myfilter implements Filter {
        /*
        * filter是servelet规范规定的,只能用于web程序,是servlet容器比如Tomcat支持的,只在请求进入servlet之前,和出来以后起作用
        * 拦截器:既可以在web程序,也可以Application,Swing程序中,是spring框架支持的,是spring的一个组件,可以使用spring里的任何资源,对象
        * 例如  Service对象,数据源,事务管理等通过IOC注入给拦截器即可。拦截器能够深入到方法前后,异常抛出前后,有更大的弹性
        * */
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            System.out.println("doFilter:在请求到达servlet之前执行过滤器");
            filterChain.doFilter(servletRequest, servletResponse);
            System.out.println("doFilter:在请求离开servlet之后离开Tomcat容器之前执行");
        }
    }

    将过滤器进行注册,就是在springboot中使用上

    package com.xiaoeyu.springboot4.config;
    
    import com.xiaoeyu.springboot4.filter.Myfilter;
    import org.springframework.boot.web.servlet.FilterRegistrationBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    //标注是一个配置类,等价于配置文件.xml,springboot框架会在启动的过程中读取该配置中@Bean注解的方法,将其返回值注入到IOC容器中
    @Configuration
    public class FilterConfig {
    
        @Bean //等同于在spring配置文件中的<bean>的配置,会把方法的返回值对象,注入到IOC容器中
        public FilterRegistrationBean filterRegistrationBean() {
            FilterRegistrationBean bean = new FilterRegistrationBean();
            bean.setFilter(new Myfilter());//用什么过滤器进行拦截即注册过滤器
            bean.addUrlPatterns("/*");//配置过滤器拦截的路径
            bean.setOrder(1);//设置启动顺序,正数,越小越优先
            return  bean;
        }
    }

     springboot使用拦截器

        

    自定义个拦截器

    package com.xiaoeyu.springboot4.interceptor;
    
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    //拦截器,需要访问Controller中的方法才会触发
    public class Myinterceptor implements HandlerInterceptor {
    
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            System.out.println("preHandle:在进入拦截器,执行Controller之前调用");
            //返回值为false请求原路返回,但是前台显示的200状态码,任何请求都可以成功,到这里以后不在往下,原路返回
            return true;
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
            System.out.println("postHandle:执行完Controller逻辑,在Controller的return ModelAndView 之前执行,可以操控ModelAndView的数据");
            modelAndView.addObject("name", "postHandle:修改姓名JRL");
            System.out.println("postHandle:修改了ModelAndView中的name值");
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
            System.out.println("afterCompletion:Controller的Return之后,Filter返回给客户端之前(应该是FilterAfter方法执行前)");
    
        }
    }

    将拦截器加载进去,在springboot能起作用

    package com.xiaoeyu.springboot4.config;
    
    import com.xiaoeyu.springboot4.interceptor.Myinterceptor;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    //告知springboot这是一个配置类,在实现WebMvcConfigurer的对象中调用addInterceptors方法。把添加的拦截器注入到IOC容器
    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new Myinterceptor()).addPathPatterns("/*");//拦截的路径
        }
    }

    通过Controller在触发拦截器。访问静态资源不到不触发拦截器

    package com.xiaoeyu.springboot4.controller;
    
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;
    
    @Controller
    public class HelloController {
        /*从前台通过url localhost/hello?name=冯永康   
        传过来一个参数,并把它打印且放到ModelAndView中,在拦截器中对name进行修改,并跳转到jsp页面,查看效果*/
        @RequestMapping("/hello")
        public ModelAndView hello(String name, ModelAndView mv) {
            System.out.println("name:" + name);
            mv.setViewName("test");
            mv.addObject("name", name);
            return mv;
        }
    }

    这是用于方便显示数据的 test.jsp  直接返回字符换也可以

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    我是一个jsp页面<br>
    获取ModelAndView中的数据 name=${name}<br>
    </body>
    </html>
  • 相关阅读:
    到具体某一天的倒计时
    angular2 2种方式----获取子组件的类属性和类方法
    页面刷新
    angular父子组件传值
    div垂直居中,文字垂直居中!!!
    Python 基础数据类型 II (列表)
    Python 基础数据类型 I (str等)
    学习笔记411
    20190407 Word合并单元格
    VBA正则笔记 理解肯定环视
  • 原文地址:https://www.cnblogs.com/xiaoeyu/p/10414122.html
Copyright © 2011-2022 走看看