问题背景
在做一个博客管理系统的时候,遇到了在程序启动时候就要加载运行一些数据给前端界面展示出来,比如文章分类的头部,但是在博客中这个头部是不变的,我又在其它页面引用了头部,要怎么将分类的数据展示呢?
在开始的时候我写了一个请求,请求路径为/ ,后来就发现这个方法是不行的,因为只有在首页才有这个请求返回时携带的数据,其它页面的头部是没有数据的。
解决方案
经过多方查询资料,发现初始化的资源数据可以写在interceptor中,这个时候参数就可以作为一个webRequest使用了
package com.blog.interceptor;
import com.blog.pojo.Category;
import com.blog.pojo.Menu;
import com.blog.service.CategoryService;
import com.blog.service.MenuService;
import org.omg.PortableInterceptor.Interceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
* @author panglili
* @create 2022-07-31-19:44
* 在处理请求之前获取网站的基本资源,可以把它们当做web的属性去处理
* 在使用拦截器之前尝试使用了
*/
@Component
public class UserResourceInterceptor implements HandlerInterceptor {
@Autowired
private MenuService menuService;
@Autowired
private CategoryService categoryService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//菜单显示
List<Menu> menus = menuService.listMenu();
request.setAttribute("menuList",menus);
List<Category> categories = categoryService.categoryList();
request.setAttribute("categoryList",categories);
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
}
}
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.blog.interceptor.UserResourceInterceptor"/>
</mvc:interceptor>
</mvc:interceptors>