springMVC拦截器
SpringMVC中拦截器的作用:
SpringMVC的拦截器相当于java web中的filter,对处理器进行预处理和后处理,多个拦截器可以相互连接(简称:连接器链),调用顺序按照定义顺序进行调用,其连接器是在spring核心配置文件进行配置。
其中拦截器与过滤器的区别:
拦截器的基础实现
1。创建类实现接口handlerinterceptor(有三个方法可以实现)一般是对prehandle()
方法进行方法实现,注意返回是否为true
public class PrivilegeIntercrptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("prehanle running...");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle running...");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("afterCompletion running...");
}
}
2,配置拦截器(我所拦截的是Controller端信息,所以拦截配置实在spring-mvc.xml文件配置的),注意mvc引用<mvc:mapping path="/**"/>和<mvc:exclude-mapping path=""/>
拦截地址设置。
<!--配饰拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<!--拦截路径-->
<mvc:mapping path="/**"/>
<!-- 不拦截路径-->
<mvc:exclude-mapping path="/user/login"/>
<bean class="com.itheima.interceptor.PrivilegeIntercrptor"/>
</mvc:interceptor>
</mvc:interceptors>
3.代码实现
@RequestMapping("/quick23")
@ResponseBody
public ModelAndView quickMethod23() throws IOException, ParseException {
System.out.println("目标方法执行....");
ModelAndView modelAndView = new ModelAndView();
modelAndView.addObject("name","itcast");
modelAndView.setViewName("index");
return modelAndView;
}
SpringMVC异常处理
在项目出现错误是会跳出页面错误,如果是完整项目出错会很low,我们可以对异常信息进行页面跳转,虽然无法处理,但是可以提升代码可看性
异常处理一般有两种初一方式,第一种是框架自带的简易处理,第二种是自定义异常处理方式
1.简单异常处理(需要在核心配置文件配置)SimpleMappingExceptionResolver
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
<!-- 默认异常视图-->
<property name="defaultErrorView" value="index.jsp"/>
<property name="exceptionMappings">
<map>
<!-- com.itheima.exception.MyException为自定义异常 -->
<entry key="com.itheima.exception.MyException" value="error"/>
<!-- key = 异常类型 value 跳转页面-->
<entry key="java.lang.ClassCastException" value="error"/>
</map>
</property>
</bean>
2自定义异常处理方式实现接口HandlerExpectionResolver
public class MyExpectionResovler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(javax.servlet.http.HttpServletRequest httpServletRequest, javax.servlet.http.HttpServletResponse httpServletResponse, Object o, Exception e) {
//创建ModelAndView对象
ModelAndView modelAndView = new ModelAndView();
//处理异常的代码实现
if (e instanceof ClassCastException){
modelAndView.addObject("info","类型转换异常");
}
modelAndView.setViewName("index.jsp");
return modelAndView;
}
}