栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

MVC配置类

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

MVC配置类

1.MVC配置类

在boot中(一个注解,实现方法,然后重写方法进行注册)

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/user/hello
@ComponentScan("com.cskaoyan.controller")
@EnableWebMvc
public class MvcConfig implements WebMvcConfigurer {
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyHandlerInterceptor()).addPathPatterns("/user/hello
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/jpg
    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
        validatorFactoryBean.setProviderClass(Hibernatevalidator.class);
        return validatorFactoryBean;
    }


    
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new MyConvert());
    }


}
2.hibernate参数校验

        1.导入依赖

    
        
            org.hibernate.validator
            hibernate-validator
            6.2.0.Final
        

        2.校验类上注解

@Data
public class HibernateUser {
    @Length(max = 8)
    String username;
    @Length(min = 3)
    String password;
}

        3.控制层注解

    @RequestMapping("login2")
    public baseUserVO getLogin2(@Valid HibernateUser user, BindingResult bindingResult) throws MyExceptionParamVer {
        //对传入的字段用user类的属性做校验,
//        baseUserVO.gerBinding(bindingResult);
        //测试切面
        return baseUserVO.getResult(user);

    }

   MVC容器注册

   
    @Override
    public Validator getValidator() {
        LocalValidatorFactoryBean validatorFactoryBean = new LocalValidatorFactoryBean();
        validatorFactoryBean.setProviderClass(Hibernatevalidator.class);
        return validatorFactoryBean;
    }
3.方法拦截器注册

1.实现HandlerInterception接口

package com.cskaoyan.HandlerInterceptor;

import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


@Component
public class MyHandlerInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String username = (String) request.getSession().getAttribute("username");
        if (username == null) {
            response.getWriter().println("Login Plz");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

    }
}

2.MVC容器注册

4.异常集中管理

@ComtrollerAdvice注解

@ExceptionHandler注解映射

package com.cskaoyan.error;

import com.cskaoyan.bean.VO.baseUserVO;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;



@ControllerAdvice
public class MyHandlerEx {
    //username过长

    @ExceptionHandler(MyExceptionUsername.class)
    public String myExceptionUsername(){
        return "redirect:/index.jsp";

    }
     //psw过短
    @ExceptionHandler(MyExceptionPSW.class)
    public  String myExceptionPSW(){
        return "redirect:/index.jsp";
    }

    @ResponseBody
    @ExceptionHandler(MyExceptionParam.class)
    public baseUserVO myExceptionParam(){
        return baseUserVO.getWrong("yuanzhi!!");
    }

    @ResponseBody
    @ExceptionHandler(MyExceptionParamVer.class)
    public baseUserVO myExceptionParamVer(MyExceptionParamVer exceptionParamVer){
        String msg = exceptionParamVer.getMsg();
        return baseUserVO.getWrong(msg);
    }






}
5. Converter
package com.cskaoyan.convert;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class MyConvert implements Converter {


    @Override
    public Date convert(String s) {
        Date parse = null;
        try {
            parse = new SimpleDateFormat("yyyy-MM-dd").parse(s);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return parse;

    }
}
   
    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new MyConvert());
    }

MVC注册

心脏搭桥思想

 

6.AOP

只需要注册组件@component

通知器和aspectJ是后置处理器的细化

AspectJ:配合校验器BindingResult进行参数校验

@Before @After @Around @AfterReturning@AfterThrowing注解

package com.cskaoyan.aspectj;

import com.cskaoyan.bean.BO.HibernateUser;
import com.cskaoyan.bean.VO.baseUserVO;
import com.cskaoyan.error.MyExceptionParamVer;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.validation.BindingResult;


@Aspect
@Component
public class MyAspectJ {
    //类下所有方法
    @Pointcut("execution(* com.cskaoyan.controller.UserController..*(..))")
    public  void MyPointcut(){}


    @Before("MyPointcut()")
    public void before(JoinPoint joinPoint) throws MyExceptionParamVer {
        System.out.println("切面生效");
        Object[] args = joinPoint.getArgs();
        for (Object arg : args) {
            if (arg instanceof BindingResult){
                //属于结果集,那么就调用静态方法对结果集做分析,输出json字符串(此处方法是抛出异常)
                baseUserVO.gerBinding(((BindingResult) arg));
                                        //强转
            }
        }
    }


}

配合自定义注解指定方法

package com.cskaoyan.aspectj;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyAnno {

}

@ControllerAdvice

@ExceptionHandler

总结:  过滤器和拦截器的区别,过滤器是依赖于servlet容器(struts),在实现上基于函数回调,可以对几乎所有的请求进行过滤。但缺点是一个过滤器实例只能在容器初始化时调用一次,来进行过滤操作,获得我们想要的数据。

三者之间主要还是粒度的差异,应用场景的不同。

过滤器(Filter)(责任链模式) :可以拿到原始的http请求,但是拿不到你请求的控制器和请求控制器中的方法的信息。

拦截器(Interceptor)(责任链):可以拿到你请求的控制器和方法,却拿不到请求方法的参数。

(访问路径,拿到请求的方法,拿不到方法参数)

切片(Aspect)(动态代理)  :  可以拿到方法的参数,但是却拿不到http请求和响应的对象

(以方法为主,可以拿到方法的参数,动态代理,可以做增强)

7.文件上传

注册组件

@Configuration
public class MvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/user/hello/**");
    }


    @Bean
    public CommonsMultipartResolver multipartResolver() {
        return new CommonsMultipartResolver();
    }
}
  @PostMapping("upload")
    public baseUserVO upload(MultipartFile[] myfile,
                             HttpServletRequest request) throws IOException {
        String realPath = request.getServletContext().getRealPath("WEB-INF/static");

        for (MultipartFile multipartFile : myfile) {
            String filename = multipartFile.getOriginalFilename();
            File file = new File(realPath, filename);
            multipartFile.transferTo(file);

        }
        return null;

    }

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/600863.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号