SpringMVC

MVC模式

mvc : 是一种用于设计创建web应用表现层的模式。使用它可以将业务逻辑,数据,页面显示代码分离出来

  • Model(模式):数据模型(封装对象)

  • View(试图):用于展示数据(html,jsp)

  • Controller(控制器):用于程序业务逻辑处理
    1、封装请求:model
    2、调用service
    3、响应跳转视图

SpringMVC
  • SpringMVC是Spring产品对MVC模式的一种具体实现, 它可以通过一套注解,让一个简单的Java类成为控制器,而无须实现任何接口。

  • SpringMVC中和Spring一样,也存在容器的概念(支持spring的注解)
    在这里插入图片描述

SpringMVC原理
  • 工作流程
    在这里插入图片描述
  1. 用户通过浏览器发送请求至DispatcherServlet
  2. DispatcherServlet收到请求调用HandlerMapping
  3. HandlerMapping找到具体的处理器链返回给DispatcherServlet
  4. DispatcherServlet会根据返回的处理器链调用HandlerAdapter
  5. HandlerAdapter经过适配调用具体的Handler(controller)
  6. Controller执行完成返回一个执行结果
  7. HandlerAdapter将Handler的结果ModelAndView对象返回给DispatcherServlet
  8. DispatcherServlet将ModelAndView对象传给ViewReslover
  9. ViewReslover解析后得到具体View,并返回给DispatcherServlet
  10. DispatcherServlet根据View进行视图渲染(即将模型数据填充至视图中)
  11. DispatcherServlet会将渲染后的视图响应给浏览器
  • SpringMVC的四大组件
    在这里插入图片描述

前端控制器:DispatcherServlet

SpringMVC的核心组件(DispathcherServlet),协调所有组件的运行

处理器映射器 HandlerMapping

根据URL请求去寻找对应的处理方法( Controller中的方法)

处理器适配器 HandlerAdapter

真正的去调用处理方法(执行Controller中的方法)

视图解析器 ViewReslover

将逻辑视图翻译成物理视图

物理视图:jsp页面的完整路径
常见注解

@RequestMapping :用于建立请求URL和处理方法之间的对应关系, 也可以通过它的属性对请求做出各种限制.

  • value(path): 用于限制请求URL(和path作用一样)

  • method:用于限制请求类型
    配置当前请求的请求类型(RequestMethod.post,RequestMethod.get,RequestMethod.delete,RequestMethod.put)

  • params:用于限制请求参数的条件(了解中的了解)

此注解可以标注在方法上,也可以标注在类上,标注在类上代表类中的所有方法都可以共用一段URL

示例:
在这里插入图片描述

springMVC处理文件上传

前端三要素:

  • form表单的method = post
  • form表单的enctype=“multipart/form-data”
  • from表单中的input的type = file
    springmvc中服务端:
  • 需要在springmvc的配置文件中,添加文件解析器(自动的将上传的内容,转化为MultipartFile对象)
  • 在控制器方法上,直接使用MultipartFile对象标识上传的文件

前台示例代码:
在这里插入图片描述
导入依赖

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.4</version>
</dependency>

配置文件上传解析器

<!--
    文件解析器
        id:固定值(multipartResolver)
        其中指定上传文件的大小规则
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!--文件的大小规则  5M = 1024 * 1024 * 5 -->
    <property name="maxUploadSize" value="5242880"></property>
</bean>

后台代码示例:
在这里插入图片描述

配置释放静态资源

方式一

在Springmvc的配置文件中添加释放静态资源

<!--
        释放静态资源的方式一
            mapping : 请求路径的URL的映射规则
            location: 静态资源的物理目录
            当静态资源请求到SpringMVC的前端控制器时,根据释放资源的配置
                1、不在查找具体的controller处理
                2、从location路径中查找匹配的资源
    -->
    <mvc:resources mapping="/js/*" location="/js/"></mvc:resources>
    <mvc:resources mapping="/image/*" location="/image/"></mvc:resources>
    <mvc:resources mapping="/css/*" location="/css/"></mvc:resources>

配置繁琐,所有的静态资源分门别类放置到不同的文件夹,一个一个进行配置

方式二

在Springmvc的配置文件中添加释放静态资源

<!--
        统一释放所有的静态资源文件
            当SpringMVC处理静态资源时,委托给默认的Servlet处理
            默认Servlet:tomcat中的默认Servlet
    -->
    <mvc:default-servlet-handler></mvc:default-servlet-handler>

方式三
修改web.xml中前端控制器的URL映射规则,已特殊字符串结尾的请求会交给前端控制器处理。

  • 需要进入SpringMVC的所有请求,都需要已.do结尾
  • 控制器方法中@RequestMapping不需要做额外的配置,和之前一模一样
    在这里插入图片描述
Ajax+json实现异步交互

在这里插入图片描述
在SpringMVC中进行ajax的数据交互,需要通过两个注解简化开发

  • @RequestBody : 自动的将请求的json字符串,转化为指定java对象(处理请求)

用于接收前端传递的请求体中的json数据, 并可以自动转换封装进指定的对象中

  • @ResponseBody:自动的将java对象,转化为json字符串并相应(处理相应)

用于将controller方法返回的对象通过转换器转换为指定的格式(通常为json)之后,写入到response对象的body区

注意: Springmvc默认用MappingJackson2HttpMessageConverter对json数据进行转换,需要加入jackson的包

<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.8</version>
</dependency>
Restful风格

REST是一种软件架构风格, 其强调HTTP请求的URL应当以资源为中心 ( 以后的URL中尽量不要出现动词 )

REST规范了HTTP请求动作(请求方式:post,put),使用四个词语分别表示对资源的CRUD操作:

GET(获取)、POST(新建)、PUT(更新)、DELETE(删除)

Restful :

  • 针对同一个URL,根据不同的请求方式做不一样的业务处理
  • 地址参数 /user/{id}
  • 请求方式:GET(获取),POST(新建),PUT(更新),DELETE(删除)
原来Restful
保存/saveUserPOST /user
修改/udpateUserPUT /user/1
删除/deleteUser?uid=1DELETE /user/1
查询所有/findUserGET /user
查询一个/findUserByUid?uid=1GET /user/1
异常处理机制

SpringMVC的统一异常处理

对于异常的处理一般有两种方式:

  • 一种是当前方法处理(try-catch),这种处理方式会造成业务代码和异常处理代码的耦合。

  • 一种是当前方法不处理, 出现异常后直接抛给调用者处理。

使用Spring框架后,我们的代码最终是由框架来调用的。也就是说,异常最终会抛到框架中, 然后由框架指定异常处理器来统一处理异常

方式一:自定义异常处理器

自定义一个类实现HandlerExceptionResolver接口,将异常处理器交给spring容器管理即可

在这里插入图片描述
方式二: 注解方式

可以通过@ControllerAdvice 和 @ExceptionHandler注解定义全局异常处理

使用方式:

  • @ControllerAdvice:配置到java类
  • 定义一个异常处理方法
    • 返回值String (视图)
    • 参数:Model
    • 方法上通过@ExceptionHandler配置(处理的异常类型)
      在这里插入图片描述
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值