扁平式网站模板,如何做单页网站,网站备案 通知,从珠海回来都变黄码了1、拦截器#xff1a;
1、拦截器的配置:
SpringMVC中的拦截器用于拦截控制器方法的执行
SpringMVC中的拦截器需要实现HandlerInterceptor
!--配置拦截器--mvc:interceptors!--对所有的请求进行拦截--!--bean classcom.songzhishu.m…1、拦截器
1、拦截器的配置:
SpringMVC中的拦截器用于拦截控制器方法的执行
SpringMVC中的拦截器需要实现HandlerInterceptor
!--配置拦截器--mvc:interceptors!--对所有的请求进行拦截--!--bean classcom.songzhishu.mvc.interceptors.FirstInterceptor idfirstInterceptor/bean--!-- ref beanfirstInterceptor/ref--!--上面的是可以拦截所有的请求路径--mvc:interceptor!--拦截指定的路径 /* 是只拦截一层目录 而/** 是可以拦截所有的路径--mvc:mapping path/**/!--排除要拦截的路径(就是不拦截)--mvc:exclude-mapping path//!--指定拦截器--ref beanfirstInterceptor//mvc:interceptor/mvc:interceptors
2、拦截器中的三个抽象方法
preHandle控制器方法执行之前执行preHandle()其boolean类型的返回值表示是否拦截或放行返回true为放行即调用控制器方法返回false表示拦截即不调用控制器方法postHandle控制器方法执行之后执行postHandle()afterComplation处理完视图和模型数据渲染视图完毕之后执行afterComplation()
Component
public class FirstInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//在控制器之前执行System.out.println(前);/*返回值是true的话是拦截后放行 为false的话是不放行*/return HandlerInterceptor.super.preHandle(request, response, handler);}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(后);//在控制器之后执行HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(视图);//视图渲染后HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}
}
3、拦截器的执行顺序 !--测试拦截器的顺序--ref beanfirstInterceptor/ref beansecondInterceptor/
若每个拦截器的preHandle()都返回true 此时多个拦截器的执行顺序和拦截器在SpringMVC的配置文件的配置顺序有关
preHandle()会按照配置的顺序执行而postHandle()和afterComplation()会按照配置的反序执行
若某个拦截器的preHandle()返回了false preHandle()返回false和它之前的拦截器的preHandle()都会执行postHandle()都不执行返回false的拦截器之前的拦截器的afterComplation()会执行
2、异常处理器
1、基于配置的异常处理器 SpringMVC提供了一个处理控制器方法执行过程中所出现的异常的接口HandlerExceptionResolver HandlerExceptionResolver接口的实现类有DefaultHandlerExceptionResolver和SimpleMappingExceptionResolver SpringMVC提供了自定义的异常处理器SimpleMappingExceptionResolver使用方式
!--异常处理器--bean classorg.springframework.web.servlet.handler.SimpleMappingExceptionResolverproperty nameexceptionMappingsprops!--key表示处理器执行过程中出现的异常值表示出现指定异常时设置一个新的视图名称跳转到指定的页面--prop keyjava.lang.ArithmeticExceptionerror/prop/props/property!--将异常的信息共享在请求域中的键--property nameexceptionAttribute valueex/property/bean
测试 RequestMapping(value /testException)public String testException(){System.out.println(1/0);return success;} 自定义的异常会自动捕捉异常
2、基于注解的异常处理器
ControllerAdvice //将类标记成组件,进行扫描 其次就是异常捕获
public class ExceptionController {ExceptionHandler(value {ArithmeticException.class, NullPointerException.class})public String testEx(Exception exception, Model model){model.addAttribute(ex ,exception);return error;}
}
3、注解配置SpringMVC
1、创建初始化类代替web.xml 在Servlet3.0环境中容器会在类路径中查找实现javax.servlet.ServletContainerInitializer接口的类如果找到的话就用它来配置Servlet容器。 Spring提供了这个接口的实现名为SpringServletContainerInitializer这个类反过来又会查找实现WebApplicationInitializer的类并将配置的任务交给它们来完成。Spring3.2引入了一个便利的WebApplicationInitializer基础实现名为AbstractAnnotationConfigDispatcherServletInitializer当我们的类扩展了 AbstractAnnotationConfigDispatcherServletInitializer并将其部署到Servlet3.0容器的时候容器会自动发现它并用它来配置Servlet上下文。
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {/*** 指定spring的配置类* return*/Overrideprotected Class?[] getRootConfigClasses() {return new Class[]{SpringConfig.class};}/*** 指定SpringMVC的配置类* return*/Overrideprotected Class?[] getServletConfigClasses() {return new Class[]{WebConfig.class};}/*** 指定DispatcherServlet的映射规则即url-pattern* return*/Overrideprotected String[] getServletMappings() {return new String[]{/};}/*** 添加过滤器* return*/Overrideprotected Filter[] getServletFilters() {CharacterEncodingFilter encodingFilter new CharacterEncodingFilter();encodingFilter.setEncoding(UTF-8);encodingFilter.setForceRequestEncoding(true);HiddenHttpMethodFilter hiddenHttpMethodFilter new HiddenHttpMethodFilter();return new Filter[]{encodingFilter, hiddenHttpMethodFilter};}
}
2、创建SpringConfig配置类代替spring的配置文件
Configuration
public class SpringConfig {//ssm整合之后spring的配置信息写在此类中
}
3、创建WebConfig配置类代替SpringMVC的配置文件
Configuration
//扫描组件
ComponentScan(com.atguigu.mvc.controller)
//开启MVC注解驱动
EnableWebMvc
public class WebConfig implements WebMvcConfigurer {//使用默认的servlet处理静态资源Overridepublic void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {configurer.enable();}//配置文件上传解析器Beanpublic CommonsMultipartResolver multipartResolver(){return new CommonsMultipartResolver();}//配置拦截器Overridepublic void addInterceptors(InterceptorRegistry registry) {FirstInterceptor firstInterceptor new FirstInterceptor();registry.addInterceptor(firstInterceptor).addPathPatterns(/**);}//配置视图控制/*Overridepublic void addViewControllers(ViewControllerRegistry registry) {registry.addViewController(/).setViewName(index);}*///配置异常映射/*Overridepublic void configureHandlerExceptionResolvers(ListHandlerExceptionResolver resolvers) {SimpleMappingExceptionResolver exceptionResolver new SimpleMappingExceptionResolver();Properties prop new Properties();prop.setProperty(java.lang.ArithmeticException, error);//设置异常映射exceptionResolver.setExceptionMappings(prop);//设置共享异常信息的键exceptionResolver.setExceptionAttribute(ex);resolvers.add(exceptionResolver);}*///配置生成模板解析器Beanpublic ITemplateResolver templateResolver() {WebApplicationContext webApplicationContext ContextLoader.getCurrentWebApplicationContext();// ServletContextTemplateResolver需要一个ServletContext作为构造参数可通过WebApplicationContext 的方法获得ServletContextTemplateResolver templateResolver new ServletContextTemplateResolver(webApplicationContext.getServletContext());templateResolver.setPrefix(/WEB-INF/templates/);templateResolver.setSuffix(.html);templateResolver.setCharacterEncoding(UTF-8);templateResolver.setTemplateMode(TemplateMode.HTML);return templateResolver;}//生成模板引擎并为模板引擎注入模板解析器Beanpublic SpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {SpringTemplateEngine templateEngine new SpringTemplateEngine();templateEngine.setTemplateResolver(templateResolver);return templateEngine;}//生成视图解析器并未解析器注入模板引擎Beanpublic ViewResolver viewResolver(SpringTemplateEngine templateEngine) {ThymeleafViewResolver viewResolver new ThymeleafViewResolver();viewResolver.setCharacterEncoding(UTF-8);viewResolver.setTemplateEngine(templateEngine);return viewResolver;}}
3、SpringMVC执行流程
1、SpringMVC常用组件 DispatcherServlet前端控制器不需要工程师开发由框架提供
作用统一处理请求和响应整个流程控制的中心由它调用其它组件处理用户的请求 HandlerMapping处理器映射器不需要工程师开发由框架提供
作用根据请求的url、method等信息查找Handler即控制器方法 Handler处理器需要工程师开发
作用在DispatcherServlet的控制下Handler对具体的用户请求进行处理 HandlerAdapter处理器适配器不需要工程师开发由框架提供
作用通过HandlerAdapter对处理器控制器方法进行执行 ViewResolver视图解析器不需要工程师开发由框架提供
作用进行视图解析得到相应的视图例如ThymeleafView、InternalResourceView、RedirectView View视图
作用将模型数据通过页面展示给用户