SpringMVC学习笔记

SpringMVC学习笔记_第1张图片

Spring MVC的工作流程

1 用户请求
2 前端控制器
3 handlerMapping 找到对应的Controller
4 controller 返回执行链给前端控制器
5 前端控制器通过 HandlerAdapter去执行执行链,返回model and view
6 前端控制器将model and view交给视图渲染器,渲染成视图
7.前端控制器将视图交给用户

0x01使用配置

配置前端控制器,在Web.xml中添加


    dispatcher-servlet
    org.springframework.web.servlet.DispatcherServlet
    
    
    
    
      contextConfigLocation
      classpath:spring/spring-*.xml
    
  
  
    dispatcher-servlet
    /
  

配置完成后,在classpath目录冲创建 spring文件夹,文件夹中创建spring Mvc配置文件

SpringMVC学习笔记_第2张图片
分层配置

先不考虑service层和dao层,有了前端控制器,就需要配置HandlerMapping 映射器和HandlerAdapter 适配器,最后是视图解析器

为了简化配置,DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter被mvc标签代替
所以 spring-web.xml文件如下




    
    
    


    
    

    
    

    
    
        
        
        
    

    
    


0x02 Controller

  • URL映射
    简单URL映射的配置:
  
      
          
            ControllerA  
          
      
  
      

不过现在一律使用注解式映射

@Controller()
@RequestMapping("/user")
public class AccountController {

    @RequestMapping(value = "/login")
    public String login(HttpSession session) {
      ...
    }
}

通过RequestMapping来限定url访问的方法,注意的是@Controller()和@RequestMapping()是需要成对出现的,否则无法访问,另外RequestMapping还有延伸,通过规范请求方式,请求头等来限定用户请求。

  • 参数的绑定和自定义参数绑定
    Spring MVC 自带参数绑定的功能,就是根据request中的key/value数据,找到对应名称和类型的入参,将参数绑定到对应的pojo对象上,特殊类型例如Date,可以通过自定义参数绑定,来讲参数绑定到pojo上

写几个案例:

 
//注入1
    @PostMapping("user/signUp")
    public static String getToken(String email) {
      ...
    }

//注入2
   @PostMapping("user/signUp")
    public static String getToken(@RequestParam(“email”)String name) {
      ...
    }

还有N多注入方式,其原理大致一样:有兴趣百度:SpringMVC参数绑定
自定义参数绑定的方式是参数按照用户自己编写转换器处理后绑定


    
       
        
        
        
        
    

package com.zing.account.interceptor;

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

public class Converter01 implements Converter {
    @Override
    public O convert(I input) {
//        将input处理后生成O类型输出
        return new O();
    }
}

这样前端的字符串,就可以转换成其他任意类型了。

0x03 SpringMVC对事务的支持

service一般用来处理数据逻辑业务,校验数据等。这一层属于业务逻辑层,所以在某些业务上需要进行事物处理.

如何使用SpringMVC的事务管理呢,有两种方法

  1. 开启事务注解
  
    
        
        
    

    
    

使用

//注册Service接口中的注解式事物
@Transactional(readOnly = false, rollbackFor = DataAccessException.class)   
    Account register(Account account);   
  1. 配置AOP自动事务管理

    
    
        
            
            
            
            
            
            
            
        
    

    
    
        
    

前者简单,后者可以规范代码。都可以选择。

0x04 RESTful链接和静态资源的支持

可以将URL的链接某部分作为参数传入方法


静态资源可以用标签来映射,否则可能会会被拦截

SpringMVC学习笔记_第3张图片

如图的配置,表示将WEB-INF下static文件夹用/rs/来映射,这样就可以通过
http://localhost:8000/rs/js/jquery.min.js来访问static目录下/js/jquery.min.js文件了

0x05 拦截器

Spring拦截器,编写一个类实现org.springframework.web.servlet.HandlerInterceptor;就可以作为拦截器使用了

拦截器中有3个方法

//请求到达方法前执行
boolean preHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3) throws Exception;

//执行方法后,没有返回ModuleAndView之前,可以执行
    void postHandle(HttpServletRequest var1, HttpServletResponse var2, Object var3, ModelAndView var4) throws Exception;

//方法执行后执行
    void afterCompletion(HttpServletRequest var1, HttpServletResponse var2, Object var3, Exception var4) throws Exception;

配置拦截器方式


  
    
    
    
        
  

0x06全局异常的处理 ExceptionResolver

Spring中有现成的全局异常处理解决方法

public class MyExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {

        if (e instanceof MyException) {
            //处理逻辑
        } else {
            //处理逻辑
        }
        return null;
    }
}

可以看到返回的依旧是 ModelAndView ,处理完成后,可将想返回给用户的友好的界面。

将这个全局异常处理器配置到xml中, 直接当Bean放进去就行,Spring会默认将异常处理交给这个Resolver。


---- 转载请注明出处,https://micorochio.github.io/2017/03/19/spring-mvc-note/
文章参考了一些其他大牛的技术博客和书籍,时间原因,忘了一些,
只记得: 开涛的博客 - ITeye
如有问题请批评指正。

你可能感兴趣的:(SpringMVC学习笔记)