企业可以做哪些网站有哪些内容吗,嵌入式工程师要学什么,wordpress导航添加图片,建立网站需要钱吗Java Spring Boot 是一个流行的 Java Web 开发框架#xff0c;它提供了一些基本的 Web 管道功能。在 Spring Boot 中#xff0c;Web 管道是通过一组过滤器、拦截器、控制器和视图解析器等组件组成的。
如果你需要扩展 Spring Boot Web 管道#xff0c;可以考虑以下几种方式…Java Spring Boot 是一个流行的 Java Web 开发框架它提供了一些基本的 Web 管道功能。在 Spring Boot 中Web 管道是通过一组过滤器、拦截器、控制器和视图解析器等组件组成的。
如果你需要扩展 Spring Boot Web 管道可以考虑以下几种方式 过滤器Filter在 Spring Boot 中可以通过自定义过滤器来实现对 HTTP 请求和响应的拦截和处理。过滤器可以拦截 HTTP 请求并在请求到达目标 Servlet 或 JSP 之前进行一些操作比如鉴权、日志记录等。 拦截器Interceptor拦截器是一种更加高级的拦截机制它是在控制器方法执行之前或之后执行的代码。拦截器可以用于实现一些通用的功能比如身份认证、请求处理时间统计等。 控制器Controller控制器是处理 HTTP 请求的核心组件它接收请求并根据请求内容生成响应。在 Spring Boot 中可以通过自定义控制器来实现自己的业务逻辑。 视图解析器View Resolver视图解析器是将控制器返回的数据渲染成 HTML、XML 或 JSON 等格式的组件。在 Spring Boot 中可以通过自定义视图解析器来实现自己的视图渲染逻辑。 增强器Enhancer增强器是一种用于增强某些类的功能的组件比如 AOP面向切面编程和事务管理等。在 Spring Boot 中可以通过自定义增强器来实现自己的业务逻辑。
1. SpringBoot Filter 扩展管道请求
1.1. 截获请求。
public class QueryFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化操作}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;// 获取请求 URLString url request.getRequestURL().toString(); // 获取请求方式String method request.getMethod(); // 记录请求开始时间long startTime new Date().getTime(); // 执行过滤操作filterChain.doFilter(servletRequest, servletResponse);// 记录请求结束时间long endTime new Date().getTime(); // 计算请求处理时间long duration endTime - startTime; System.out.println(String.format(URL: %s, Method: %s, Time: %dms, url, method, duration));}Overridepublic void destroy() {// 销毁操作}
}
Configuration
public class QueryFilterConfig implements WebMvcConfigurer {Beanpublic FilterRegistrationBeanQueryFilter myFilterRegistrationBean() {FilterRegistrationBeanQueryFilter registrationBean new FilterRegistrationBean();registrationBean.setFilter(new QueryFilter());// 拦截所有请求registrationBean.addUrlPatterns(/*); return registrationBean;}
}1.2. 截获指定的请求将请求转发
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;public class QueryFilter implements Filter {Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化操作}Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;// 判断请求 URL 是否以 /old 开头if (request.getRequestURI().startsWith(/old)) {// 转换请求 URLString newUrl request.getRequestURI().replace(/old, /new); // 转发请求request.getRequestDispatcher(newUrl).forward(request, response); } else {// 继续执行过滤器链filterChain.doFilter(servletRequest, servletResponse); }}Overridepublic void destroy() {// 销毁操作}
}
在转发请求时我们需要使用 request.getRequestDispatcher() 方法来获取请求转发器然后使用 forward() 方法进行转发。这里的转发是在服务器内部进行的不会影响客户端的 URL因此客户端不会意识到 URL 的变化。