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";
}
}
测试结果