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包

<!-- spring-mvc-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
        </dependency>

        <!-- Java EE-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
        </dependency>

2.配置核心控制器(web.xml)
<!-- 1.配置DispatherServlet,核心控制器-->
    <servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!-- 启动的时候执行-->
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>springMVC</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

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

建立springMVC.xml

4.静态资源处理
  当配置DispatherServlet为<url-pattern>/</url-pattern>时,会拦截所有请求(包括静态资源),导致所有静态资源都无法访问
    两种处理方式:
    使用tomcat提供的,默认Servlet
    tomcat提供了默认的Servlet来处理静态资源
1.方式1
<!-- 使用tomcat提供的默认Servlet处理静态资源-->
       <mvc:default-servlet-handler/>
    缺点:1.如果使用的不是tomcat,则可能不生效,与tomcat耦合
        2.只能读取webapp下的资源,无法读取/WEB-INF/下的资源
2.方式2
使用SpringMVC提供的处理方式
 <mvc:resources mapping="/img/**" location="/WEB-INF/img/"/>
       <mvc:resources mapping="/css/**" location="/WEB-INF/css/"/>
       <mvc:resources mapping="/js/**" location="/WEB-INF/js/"/>
5.直接访问jsp页面
    默认不能直接访问WEB-INF目录下的jsp页面,一般都是在Controller中做转发映射
 <mvc:view-controller path="/userLogin" view-name="login"/>

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.管理自定义转换器
    <!-- 管理自定义转换器-->
       <bean class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
              <property name="converters">
                     <set>
                            <bean class="converter.String2AddressConverter"/>
                            <bean class="converter.Address2StringConverter"/>
                     </set>
              </property>
       </bean>
    3.加载应用自定义管理器
<!--
              mvc的注解驱动,用来简化配置
              默认会加载许多内置的类型转换器,如果要使用自定义的类型转换器,需要自己指定
       -->
       <mvc:annotation-driven conversion-service="conversionService"/>

四。@SessionAttributes

 

五,处理AJAX
1.@ResponseBody
    为方法添加注解后,将返回值写到响应体中
2.返回JSON
三种方式:
    jackson,SpringMVC默认支持
    gson,SpringMVC默认支持,google开发
    fastjson,SpringMVC默认不支持,alibaba开发
2.返回JSON
1.添加jar包
       <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
2.配置消息转换器 --可选择配置 (省略)
 -->
       <mvc:annotation-driven conversion-service="conversionService">
              <!-- 配置消息转换器-->
              <mvc:message-converters>
                     <bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"/>
              </mvc:message-converters>
       </mvc:annotation-driven>


使用fastjson
步骤:添加jar包
2.配置消息转换器
三.文件上传和下载
1.文件上传
1.简介
    SpringMVC对于上传提供了支持,基于commons-fileupload
1.2用法
    步骤:
    1.添加jar包
    2.编写上传的页面
    3.配置文件解析器
    <!-- 配置文件解析器,id名称必须为multipartResolver -->
       <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
              <property name="maxUploadSizePerFile" value="5000000"/>
       </bean>
    4.通过CommonsMultipartFile接收文件
2.文件下载
    两种方式:
    使用OutputStream
    使用@ResponseEntity
 2.1使用OutputStream
    传递文件名的两种方式:
    。使用请求参数传递文件名
    。使用rest风格传递文件名

 


 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值