【无标题】

1 拦截器

1.1 自定义的拦截器

package com.example.web;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 功能描述:自定义的拦截器
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.web
 * @Version: 1.0
 */
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * @param request
     * @param response
     * @param handler  被拦截器的控制对象
     * @return true: 请求能被controller处理
     * false: 请求被截断
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("执行了LoginInterceptor类的preHandle方法");
        return true;
    }
}

1.2 添加拦截器对象,注入到容器中

package com.example.config;

import com.example.web.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 功能描述:
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.config
 * @Version: 1.0
 */
@Configuration
public class MyAppConfig implements WebMvcConfigurer {
    // 添加拦截器对象,注入到容器中
    @Override
    public void addInterceptors(InterceptorRegistry registry) {

        // 创建拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();
        // 指定拦截的请求uri地址
        String path[] = {"/user/**"};
        // 指定不拦截的地址
        String excludePath[] = {"/user/login"};
        registry.addInterceptor(interceptor)
                .addPathPatterns(path)
                .excludePathPatterns(excludePath);
    }
}

1.3 测试

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 功能描述:
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.controller
 * @Version: 1.0
 */
@Controller
public class CustomFilterController {

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

    @RequestMapping("/user/login")
    @ResponseBody
    public String userLogin() {
        return "user/login";
    }
}

在这里插入图片描述

2 servlet

在SpringBoot框架中使用Servlet对象。使用步骤∶

1.创建Servlet类。创建类继承HttpServlet

package com.example.web;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

/**
 * 功能描述:创建servlet类
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.web
 * @Version: 1.0
 */
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 writer = resp.getWriter();
        writer.println("执行的是MyServlet");
        writer.flush();
        writer.close();
    }
}

2.注册servlet ,让框架能找到Servlet

package com.example.config;

import com.example.web.MyFilter;
import com.example.web.MyServlet;
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;

@Configuration
public class WebApplicationConfig {

    // 定义方法,注册servlet对象
    @Bean
    public ServletRegistrationBean servletRegistrationBean() {

        // public ServletRegistrationBean(T servlet,String. . . urlMappings)
        // 第一个参数是 Servlet对象,第二个是url地址
        ServletRegistrationBean bean = new ServletRegistrationBean(new MyServlet(),
                "/myServlet");
        return bean;
    }
}

测试:http://localhost:8080/myServlet
在这里插入图片描述

3 过滤器Filter

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

3.1.创建自定义过滤器类``

package com.example.web;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;

/**
 * 功能描述:自定义的过滤器
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.web
 * @Version: 1.0
 */
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);
    }
}

3.2.注册Filter过滤器对象

package com.example.config;

import com.example.web.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 功能描述:注册过滤器
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.config
 * @Version: 1.0
 */
@Configuration
public class WebApplicationConfig {

    @Bean
    public FilterRegistrationBean filterRegistrationBean() {
        FilterRegistrationBean bean = new FilterRegistrationBean();
        bean.setFilter(new MyFilter());
        bean.addUrlPatterns("/user/*");
        return bean;
    }
}

3.3 测试

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 功能描述:
 *
 * @Auther: zhu.bin
 * @Date: 2022/12/27
 * @Description: com.example.controller
 * @Version: 1.0
 */
@Controller
public class CustomFilterController {

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

    @RequestMapping("/query")
    @ResponseBody
    public String query() {
        return "query";
    }
}

测试结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值