SpringMVC再学习

基于原生的Servlet,通过了功能强大的前端控制器DispatcherServlet,对请求和相应进行统一处理

如今我们不再去web.xml中去主持servlet
而是直接创建一个配置类ServletContainersInitConfig去基础AbstractDispatcherServletInitializer

createServletApplicationContext()方法是为了创建Servlet容器,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中

createRootApplicationContext()方法是为了创建servlet容器时需要加载非SpringMVC对应的bean

getServletMappings()设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求
//不管是springmvc.class 还是 spring.class 一般都需要加上注释@ComponentScan(“com/…”),包扫描
主配置类ServletContainersInitConfig
相关配置类SpringMvcConfig、SpringConfig

public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer{
   protected WebApplicationContext createServletApplicationContext(){
   //配置springmvc的容器
      AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
      ctx.register(SpringMvcConfig.class);
      return ctx;
   }

   protected String[] getServletMappings(){
      return new String[]{"/"};
   }

    protected WebApplicationContext createRootApplicationContext(){
    //配置spring的容器
           AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
      ctx.register(SpringConfig.class);
      return ctx;

  //添加过滤器
  protected Filter[] getServletFilters(){
     CharacterEncodingFilter filter = new CharacterEncodingFilter();
     filter.setEncoding("utf-8");
     return new Filter[]{filter};
     //有多个的情况 return new Filter[]{filter,filter1,filter2};要么用它自带的过滤器,要么自己创建
  }
  
}

传参时

前端后端名字相对好即可,名称对应不上就用@RequstParam
json 参数加上注解 @RequestBody(配件springmvc的配置类上加@EnableWebMvc)

拦截器

拦截器与过滤器的区别

归属不同: Filter属于Servlet技术,Interceptor属于SpringMvc技术
拦截内容不同: Filter对所有访问进行增强,Interceptor仅针对SpringMvc的访问进行增强

编写拦截器(实现该三个方法)

@Componet
public class ProjectIntercaptor implements HandlerInterceptor{
  @Override
  public boolean preHandle(HttpServletRequest request,HttpServeletResponse response,Object handler) throws Exception{
      System.out.println("");
      return true;
  }
  @Override
  public boolean postHandle(HttpServletRequest request,HttpServeletResponse response,ModelAndView modelAndView) throws Exception{
      System.out.println("");
  }
  @Override
  public void afterCompletion(HttpServletRequest request,HttpServeletResponse response,Object handler,Exception ex) throws Exception{
      System.out.println("");
  }
}

注册拦截器

也可以直接SpringMvcConfig类直接实现WebMvcConfiguer,然后直接在该类创建下面的方法,不用再去写个support类了

public class SpringMvcSupport extends WebMvcConfigurationSupport{
  //继承WebMvcConfigurationSupport,就可以覆写很多添加方法,当然添加拦截器也是其中的一种
  @Autowired //把我们自己写的拦截器配置到注入到容器中
  private ProjectInterceptor projectInterceptor;

  @Override
  protected void addInterceptors(InterceptorRegistry registry){
     registry.addInterceptor(projectInterceptor).addPathPatterns("/books");
  }
}

拦截器参数

request 可以拿到请求的信息
reponse 可以设置返回的信息
handler 通过抢占可以拿到原始的方法

各个组件

请添加图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值