前言
大型网站通常会因为开发人员的代码功底参差不齐, 在一段时间后, 因为接口关闭等一系列原因, 造成页面出现500
或404
等常见错误。而这些链接是隐藏极深, 难以去人工一一排除的。
Xenu Link Sleuth是一个错链扫描工具, 可以检测到网页中的链接是否正常。
当然, 这个工具是需要自己手动点击才能自动扫描的。最好就是用户访问到的瞬间, 我们就能知道链接是否正常。
拦截器
Spring MVC
提供了拦截器和拦截器链。
推荐使用注解加载Bean
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Component public @interface Interceptor { String value() default ""; }
@Interceptor public class WebStatusInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(WebExceptionResolver.class); @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { if(ex != null || response.getStatus() != HttpStatus.OK.value()){ logger.error("异常链接:"+request.getRequestURI()); logger.error("状态码:"+response.getStatus()); logger.error("异常:", ex); } } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| <?xml version="1.0" encoding="UTF-8"?> <beans> <context:component-scan base-package="com.ahao" use-default-filters="false"> <context:include-filter type="annotation" expression="com.ahao.annotation.Interceptor"/> </context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="true"/>
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/**"/> <ref bean="webStatusInterceptor "/> </mvc:interceptor> </mvc:interceptors> </beans>
|
总结
Xenu Link Sleuth是比较强大的工具, 但是及时性不足, 扫描时间过长。
Spring MVC
提供了拦截器可以补充上面的缺陷, 但是缺点就是无法扫描外部链接。