SpringMVC的相关学习笔记

什么是MVC
    Model 数据模型
    View视图
    Controller 控制器
    MVC是一种Web应用架构,是一种代码设计思想
    思想:将所有客户端请求全部交由控制器,由控制器将其分发并将结果响应给客户端

2.常见MVC框架
  使用原生Servlet实现MVC:
    1.配置比较复杂
    2.数据处理麻烦
    实际开发中一般会使用MVC框架,如Struts,Structs2, SpringMVC等
    对比:
    效率方面:Structs>SpirngMVC>Structs2
    Struct2是多例的,效率低
    Struct1和SpringMVC是单例的,两者效率基本差不多
    配置方面:SpringMVC>Structs2>Structs1

3.为什么要使用SpringMVC
    使用注解配置替代xml配置,更简单
    效率高,单例的
    扩展好,用户自定义
    SpringMVC和Spring无缝衔接

4.SpringMVC原理
1.流程图
2.执行过程
分为六步:
    1.DispatcherServlet
    SpringMVC核心控制器,前端控制器,主要作用是用来分发
    2.HandlerMapping
    映射处理器,根据请求url映射到具体的处理Handler
    Handler就是Controller层实现类,也称为Action或Controller
    3.HandlerAdapter
    适配器:用来适配不同的处理器Handler
    处理器有两种实现方式:实现接口,基于注解,所以执行之前需要先适配
    4.Handler
    处理器:执行处理具体业务,并产生数据模型Model和视图名View
    Handler会将数据模型Model和视图名View封装成ModelANDView对象并返回
    5.ViewResolver
    视图解析器:根据视图名解析为具体的视图,一般多为jsp页面,然后封装为View对象
    6.View
    视图:使用具体的视图技术进行渲染,结合Model展示数据
    视图有很多种形式:jsp,freemarker,velocity,excel,pdf等

配置 SpringMVC

1.添加jar包


       
            org.springframework
            spring-webmvc
       

       
       
            javax.servlet
            javax.servlet-api
       

       
            javax.servlet.jsp
            jsp-api
       

       
            jstl
            jstl
       

2.配置核心控制器(web.xml)

   
        springMVC
        org.springframework.web.servlet.DispatcherServlet
       
        1
   

   
        springMVC
        /
   

3.核心配置文件
两种定义方式:
    使用默认位置,默认在WEB-INF/目录

建立springMVC.xml

4.静态资源处理
  当配置DispatherServlet为/时,会拦截所有请求(包括静态资源),导致所有静态资源都无法访问
    两种处理方式:
    使用tomcat提供的,默认Servlet
    tomcat提供了默认的Servlet来处理静态资源
1.方式1

       
    缺点:1.如果使用的不是tomcat,则可能不生效,与tomcat耦合
        2.只能读取webapp下的资源,无法读取/WEB-INF/下的资源
2.方式2
使用SpringMVC提供的处理方式
 
       
       
5.直接访问jsp页面
    默认不能直接访问WEB-INF目录下的jsp页面,一般都是在Controller中做转发映射
 

6.Controller详解
1.方法的返回值
有四种类型:
    ModelAndView表示返回的为数据模型和视图
    String表示返回的是视图
  三种写法(形式)
    普通字符串---->表示视图名称
    "forword"+url--->转发
    "redirect"+url --->重定向
    void将请求的url作为视图名称,很少使用
    Object  表示返回的是数据模型,(一般返回的是json数据)

SpringMVC注解
@COntroller      将类映射为Controller,添加到IoC容器中
@RequestMapping 配置请求映射路径,即URL
@ReuestParam   表示参数来源于请求参数
@PathVariable   表示参数来源于URL
@RequestHeader 表示参数来源于请求头
@CookieValue 表示参数来源于Cookie
@RequestBody 表示参数来源于请求体
@ModelAttribute 将请求数据转换为对象
@Valid 后台校验
@InitBinder 类型转换,注册属性编辑器
@ControllerAdvice 统一异常处理,处理全局异常
@ExceptionHander 异常处理器,处理特定异常的方法
@RespongseBody 结合返回值为Object的方法使用,用来返回JSON数据
@RestController 将映射为Controller层,默认为所有方法添加@ResponseBody注解

@RequestMapping
基本用法
    该注解可以定义在方法上,可以定义在类上,表示层级关系

配置URL时以/开头和不以/开头的区别:
    添加时表示从项目根目录下查找
    不添加的时表示从当前方法所在层级开始查找

URL的多种写法
    请求映射路径有三种写法:
    Ant风格(较少使用)
    *表示单层目录,匹配任意字符,可以q
    Rest风格
    {变量}表示URL中的占位符
根据请求方式访问
    限定请求方式:GET,POST,PUT,DELETE等
   //@RequestMapping(path = "/user/{id}",method = RequestMethod.GET)
    @GetMapping("/user/{id}")
    public String deleteUser(@PathVariable Integer id){
        System.out.println("PathController.deleteUser,id:"+id);
        return "hello";
    }

    //@RequestMapping(path = "/user/{id}",method = RequestMethod.POST)
    @PostMapping("/user/{id}")
    public String selectUser(@PathVariable Integer id){
        System.out.println("PathController.selectUser,id:"+id);
        return "hello";
    }

其他属性
    params
    限定请求参数,必须符合指定条件
    其他属性
         */
        //请求参数中必须包含id,且username等于admin,password不等于123

一.方法的参数
1.JavaEE组件
    HttpServletReQuest
    HttpSerlvtResponse
    HttpSession
2.IO流
    InputStream/OutputStream
    Reader/Writer
    
3.向界面传递数据
    MOdel,Map,ModelMap
    将数据存储到Request作用域中

4.String和基本类型
    @RequestParam表示参数来源于请求参数,默认所有的参数都加这个注解,参数来源于同名的参数
    @PathVariable表示参数来源于URL
    @RequestHeader表示参数来源于请求头
    @CookieValue 表示参数来源于Cookie
    @RequestBody 表示参数来源于请求体(只有post请求才会有请求体)
5自定义的类型
@ModelAttribute 将请求数据转换为对象
条件:对象的属性名必须与表单元素的名称相同
@ModelAttribute 有两种用法:
1.在方法参数的前面添加注解
    作用:将请求参数转换为对象
2.在方法的上面添加该注解
    作用:在调用所有的目标方法前会调用添加@ModelAttribute注解的方法,并向模型中添加数据,

6.错误参数
Errors,BindingResult
用来接收错误信息,实现服务端的数据校验
实际开发中,既要做客户端表单校验,也要服务端数据校验
服务端校验的错误消息一般只在后台处理

二,服务器校验框架
1.简介
1.1  JSR303校验
    JSR303是一个数据验证的标准规范,用于对Java Bean中的属性进行校验,称为Bean Validation
    提供了常用的校验注解
1.2  Hibernate Validator
    是JSR303的一个参考实现,并提供了扩展
三,类型转换
1.简介
    数据绑定流程:  获取值---->查找转换器---->转换---->后台校验----->数据绑定
    两种解决方式:
    方式1:使用PropertyEditor
    方式2:使用Converter(推荐)
2.使用PropertyEditor
    步骤:
     1.定义属性编辑器
    2.注册属性编辑器
        @InitBinder
    缺点:
    。代码嵌入在Controller层中的
    。只能从字符串转换
3.使用Converter
    步骤
    1.定义转换器,实现Converter接口
    2.管理自定义转换器
    
       
             
                     
                           
                           
                     

             

       

    3.加载应用自定义管理器

       

四。@SessionAttributes

 

五,处理AJAX
1.@ResponseBody
    为方法添加注解后,将返回值写到响应体中
2.返回JSON
三种方式:
    jackson,SpringMVC默认支持
    gson,SpringMVC默认支持,google开发
    fastjson,SpringMVC默认不支持,alibaba开发
2.返回JSON
1.添加jar包
       
            com.fasterxml.jackson.core
            jackson-databind
       

2.配置消息转换器 --可选择配置 (省略)
 -->
       
             
             
                     
             

       


使用fastjson
步骤:添加jar包
2.配置消息转换器
三.文件上传和下载
1.文件上传
1.简介
    SpringMVC对于上传提供了支持,基于commons-fileupload
1.2用法
    步骤:
    1.添加jar包
    2.编写上传的页面
    3.配置文件解析器
    
       
             
       

    4.通过CommonsMultipartFile接收文件
2.文件下载
    两种方式:
    使用OutputStream
    使用@ResponseEntity
 2.1使用OutputStream
    传递文件名的两种方式:
    。使用请求参数传递文件名
    。使用rest风格传递文件名

 


 

 

你可能感兴趣的:(java)