【JAVA高级学习】SpringMVC【3】

自定义拦截器

1. 跟过滤器比较像的技术
2. 发送时被拦截器拦截,在控制器的前后添加额外功能。
	2.1 跟AOP区分开。AOP是在特定方法前后进行扩充(Spring中一般针对ServiceImpl中实现类方法)
	2.2 拦截器,请求的拦截。针对的是控制器方法(SpringMVC中针对Controller控制器中方法)
3. SpringMVC拦截器和Filter过滤器的区别
	3.1 拦截器只能拦截Controller
	3.2 Filter可以拦截任何请求
4. 实现自定义拦截器的步骤:
	4.1 新建类:实现HandlerInterceptor接口
public class DemoInterceptor implements HandlerInterceptor	{
	//在进入控制器之前之前
	//如果返回值为false,阻止进入控制器
	//控制代码:控制满足什么情况时可以访问控制器(比如:用户未登录不能访问某页面)
	@Override
	public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
		System.out.println("preHandle");
		return true;
	}
	//控制器正常执行完成,进入到jsp之前执行
	//日志记录
	//敏感词语过滤
	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		System.out.println("往:"+arg3.getViewName()+"跳转");
		System.out.println("model的值"+arg3.getModel().get("model"));
		arg3.getModel().put("model", "model修改后的的值");
		System.out.println("postHandle");
	}
	//jsp执行完成之后执行
	//记录在执行过程中出现的异常
	//可以把异常记录到日志中
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		System.out.println("afterCompletion");
	}
}
4.2 在springmvc.xml中配置拦截器需要拦截哪些控制器:
	4.2.1 拦截所有控制器
<!-- 拦截器 -->
<mvc:interceptors>
	<bean class="com.sxt.interceptor.DemoInterceptor"></bean>
</mvc:interceptors>
	4.2..2 拦截特定的url(控制器)
<!-- 拦截器 -->
<mvc:interceptors>
	<mvc:interceptor>
		<!--拦截demo dmeo1 demo2-->
		<mvc:mapping path="/demo"/>
		<mvc:mapping path="/demo1"/>
		<mvc:mapping path="/demo2"/>
		<bean class="com.sxt.interceptor.DemoInterceptor"></bean>
	</mvc:interceptor>
</mvc:interceptors>

拦截器栈

1. 当多个拦截器同时生效时,就组成了拦截器栈
2. 顺序:先进后出
3. 执行顺序与springmvc.xml中配置顺序有关
4. 举例:先配置拦截器A,再配置拦截器B,执行顺寻为:preHandle(A)-->preHandle(B)-->控制器-->postHandle(B)-->postHandle(A)-->JSP-->afterCompletion(B)-->afterCompletion(A)

附加-使用SpingMVC实现登录验证

1.把页面放入到web-inf中(达到页面不能够直接访问的效果)
	1.1 放入的WEB-INF后必须通过控制器转发到页面(tomcat只能读取到项目根目录下的资源)
	1.2 sprinvmvc拦截器拦截的是控制器,不能拦截jsp
2. 通过拦截器拦截全部的控制器,需要在拦截器内部放行login控制器

SpringMVC运行原理

1. 文字解释
如果在web.xml中设置DispatcherServlet的<url-pattern>为/时:
当用户发起请求,请求一个控制器时,首先会执行DispatcherServlet;由DispatcherServlet调用HandlerMapping的DefaultAnnotationHandlerMapping解析URL,解析后调用HandlerAdapter组件的AnnotationMethodHandlerAdapter调用Controller中的HandlerMethod。
当HandlerMethod执行完成后会返回View,会被ViewResolver进行视图解析,解析后调用jsp对应的.class文件并运行,最终把.class运行的结果响应给客户端。
以上就是SpingMVC运行原理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值