SpringMVC中在Config类的几种常用的配置方法(十)

项目结构:

最先前提:Config类先要继承WebMvcConfigurerAdapter类

1.配置视图解析器

/**以前我们在xml的配置方式

     <!-- 3.配置视图解析器 -->	
     <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
     </bean> 
 */

    //实现该方法,注册视图处理器
	@Bean
	public InternalResourceViewResolver internalResourceViewResolver(){
		InternalResourceViewResolver view=new InternalResourceViewResolver();
		view.setSuffix(".jsp");
		view.setPrefix("/WEB-INF/views/");
		return view;
	}


//如果是配置FreeMarker视图的话
/*  @Bean
	public FreeMarkerConfigurer freemarkerConfigurer() {
		FreeMarkerConfigurer fmCfg = new FreeMarkerConfigurer();
		fmCfg.setDefaultEncoding("UTF-8");
		fmCfg.setTemplateLoaderPath("/WEB-INF/views/");
		return fmCfg;
	}

	@Bean
	public FreeMarkerViewResolver viewResolver() {
		FreeMarkerViewResolver viewResolver = new FreeMarkerViewResolver();
		viewResolver.setExposeSessionAttributes(true);
		viewResolver.setSuffix(".ftl");
		viewResolver.setContentType("text/html;charset=UTF-8");
		return viewResolver;
	}
*/

2.配置自定义注解:

//1、先创建一个注解
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotation {
}


//2.设置注解处理器并实现HandlerMethodArgumentResolver接口 
public class MyAnnotationHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {

	//该注解对应的变量返回什么数据
	public Object resolveArgument(MethodParameter arg0, ModelAndViewContainer arg1, NativeWebRequest arg2,
			WebDataBinderFactory arg3) throws Exception {
		return "www.baidu.com";
	}
    //什么时候该注解生效
	public boolean supportsParameter(MethodParameter parameter) {
		return parameter.hasParameterAnnotation(MyAnnotation.class) && parameter.getParameterType().equals(String.class);	
	}

}


//3.在WebConfig类中添加方法
//配置自定义Annotation功能
	@Bean
	publicMyAnnotationHandlerMethodArgumentResolvermyAnnotationHandlerMethodArgumentResol 
    ver(){
		return new MyAnnotationHandlerMethodArgumentResolver();
	}
	//向sprngmvc中注册该注解
	@Override
	public void addArgumentResolvers(List<HandlerMethodArgumentResolver> 
    argumentResolvers) {
		argumentResolvers.add(myAnnotationHandlerMethodArgumentResolver());
		super.addArgumentResolvers(argumentResolvers);
	}

//4.在Controller中使用注解
@Controller
public class HelloController {
	@RequestMapping("/hello")
	public String hello(Model model,@MyAnnotation String keyword){
		System.out.println(keyword);
		model.addAttribute("msg","hello");
		return "hello";
	}

}

 访问/hello后会输出

 

3.配置拦截器

/**以前在xml中配置方式
     <!--配置拦截器-->
     <mvc:interceptors>
       <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <bean class="xxx.xxx.xx.LoginInterceptor"/>
       </mvc:interceptor>     
	  </mvc:interceptors>
*/
  
  //创建拦截器,并实现HandlerInterceptorAdapter接口
  public class MyInterceptor  extends HandlerInterceptorAdapter{
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 
    Object handler)
			throws Exception {
		System.out.println("请求前的拦截处理");
		return super.preHandle(request, response, handler);
	}
  }

   // 现添加该方法,即可以实现
	@Bean
	public MyInterceptor myInterceptor(){
		return new MyInterceptor();
	}
	@Override
	public void addInterceptors(InterceptorRegistry registry) {
        InterceptorRegistration ir=registry.addInterceptor(myInterceptor());
        //不过滤/hello路径
        ir.excludePathPatterns("/hello");
		super.addInterceptors(registry);
	}

4.配置自定义视图

    //添加自定义视图控制器
	@Override
	public void addViewControllers(ViewControllerRegistry registry) {
		//不需要写一个@RequertMapping 和方法,直接访问/view1时就会跳转到view12.jsp中
		registry.addViewController("/view1").setViewName("view12");
		
		//自定义一个重定向转发,当访问/home时,会重定向到/hello.jsp中
		registry.addRedirectViewController("/home", "/hello");
		
		//设置文件访问权限,如/primary/**即访问primary文件下的文件时返回403,不够权限访问 
		registry.addStatusController("/primary/**", HttpStatus.FORBIDDEN);
		super.addViewControllers(registry);
	}

5.配置静态资源映射处理

   //静态资源映射处理,比如css,js,图片,html
	@Override
	public void addResourceHandlers(ResourceHandlerRegistry registry) {
		//当访问hell.html时自动寻找(映射)对应的文件路径,如这里是classpath:static/hello.html
		//这里可以把代码跟前端代码关联起来!!
	registry.addResourceHandler("/hell.html")
                                  .addResourceLocations("classpath:static/hello.html");
		super.addResourceHandlers(registry);
	}

6.配置默认静态资源处理

	//默认静态资源处理:即 <mvc:default-servlet-handler/>  
	//我们之前的web.xml的dispatcher拦截的是所有的资源文件,但是如果启用这里的默认拦截,
	//可以把spring拦截的静态资源交给tomcat去加载,如在spring访问不到css,但tomcat可以访问到
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
    {
		configurer.enable();
		super.configureDefaultServletHandling(configurer);
	}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值