LoginInterceptor.postHandle 执行:ModelAndView [view="error"; model={timestamp=Sat Jul 08 20:30:28 CST 2023, status=404, error=Not Found, path=/testjsp}]
时间: 2024-04-08 08:36:16 浏览: 22
您提到的问题是关于LoginInterceptor的postHandle方法执行时返回的ModelAndView对象。根据您提供的信息,该ModelAndView对象的视图(view)属性为"error",模型(model)属性包含了以下键值对:timestamp=Sat Jul 08 20:30:28 CST 2023, status=404, error=Not Found, path=/testjsp。
请问有什么具体的问题或者需要解决的困扰吗?我会尽力帮助您。
相关问题
<context:component-scan base-package="com.ischoolbar.programmer.controller"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> <!-- 启动 mvc 注解驱动 --> <mvc:annotation-driven></mvc:annotation-driven> <!-- 启动定时任务 --> <task:annotation-driven/> <!-- 静态资源处理 --> <mvc:default-servlet-handler/> <!-- 配置视图解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean> <!-- 文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传文件大小限制 --> <property name="maxUploadSize"> <value>10485760</value> </property> <!-- 请求的编码格式, 和 jsp 页面一致 --> <property name="defaultEncoding"> <value>UTF-8</value> </property> </bean> <!-- 后台访问拦截器 --> <mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <mvc:exclude-mapping path="/system/login"/> <mvc:exclude-mapping path="/system/get_cpacha"/> <mvc:exclude-mapping path="/h-ui/**"/> <mvc:exclude-mapping path="/easyui/**"/> <bean class="com.ischoolbar.programmer.interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors> </beans>解释代码
这是一个 Spring MVC 的配置文件示例,主要用于配置 Spring MVC 的相关组件和功能。下面对各个部分进行解释:
1. `<context:component-scan>`:扫描指定包路径下的组件,这里扫描的是 `com.ischoolbar.programmer.controller` 包下的所有组件,其中 `@Controller` 注解的组件会被注册为 Spring MVC 的控制器。
2. `<mvc:annotation-driven>`:启用 Spring MVC 的注解驱动功能,包括支持注解的控制器、参数解析器、视图解析器等功能。
3. `<task:annotation-driven/>`:启用 Spring 的定时任务功能,用于执行定时任务。
4. `<mvc:default-servlet-handler/>`:启用 Spring MVC 的静态资源处理功能,用于处理静态资源的请求。
5. `<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">`:配置 Spring MVC 的视图解析器,用于将逻辑视图名称解析为物理视图(JSP 页面)。
6. `<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">`:配置文件上传的解析器,用于处理文件上传的请求。
7. `<mvc:interceptors>`:配置 Spring MVC 的拦截器,用于拦截请求并进行处理。
其中,`<mvc:mapping path="/**"/>` 表示拦截所有请求,`<mvc:exclude-mapping>` 表示排除指定路径的请求不被拦截。在这个示例中,拦截器的作用是进行登录状态的验证,如果用户未登录,则跳转到登录页面。
package com.ischoolbar.programmer.interceptor; import java.util.HashMap; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONObject; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import com.ischoolbar.programmer.entity.User; /** * 登录过滤拦截器 * @author llq * */ public class LoginInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { // TODO Auto-generated method stub } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { // TODO Auto-generated method stub } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception { // TODO Auto-generated method stub String url = request.getRequestURI(); //System.out.println("进入拦截器,url = " + url); Object user = request.getSession().getAttribute("user"); if(user == null){ //表示未登录或者登录状态失效 System.out.println("未登录或登录失效,url = " + url); if("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))){ //ajax请求 Map<String, String> ret = new HashMap<String, String>(); ret.put("type", "error"); ret.put("msg", "登录状态已失效,请重新去登录!"); response.getWriter().write(JSONObject.fromObject(ret).toString()); return false; } response.sendRedirect(request.getContextPath() + "/system/login"); return false; } return true; } }给代码加上注释
//导入相关的包
package com.ischoolbar.programmer.interceptor;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sf.json.JSONObject;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.ischoolbar.programmer.entity.User;
/**
* 登录过滤拦截器
*
* @author llq
*
*/
public class LoginInterceptor implements HandlerInterceptor {
//在请求处理完成后调用的方法
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
// TODO Auto-generated method stub
}
//在请求处理之后但是视图渲染之前调用的方法
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
// TODO Auto-generated method stub
}
//在请求处理之前调用的方法
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
// TODO Auto-generated method stub
String url = request.getRequestURI(); //获取请求的url
//System.out.println("进入拦截器,url = " + url);
Object user = request.getSession().getAttribute("user"); //获取session中的user对象
if (user == null) { //如果session中的user对象为空,表示未登录或者登录状态失效
System.out.println("未登录或登录失效,url = " + url);
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) { //如果是ajax请求
Map<String, String> ret = new HashMap<String, String>();
ret.put("type", "error");
ret.put("msg", "登录状态已失效,请重新去登录!");
response.getWriter().write(JSONObject.fromObject(ret).toString()); //返回JSON格式的错误信息
return false;
}
response.sendRedirect(request.getContextPath() + "/system/login"); //跳转到登录页面
return false;
}
return true;
}
}