springmvc 详解

mvc

概念

mvc是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范。是将业务逻辑、数据、显示分离的方法来组织代码。MVC主要作用是降低了视图与业务逻辑间的双向偶合。MVC不是一种设计模式,MVC是一种架构模式。当然不同的MVC存在差异。

model

数据模型,提供要展示的数据,因此包含数据和行为,可以认为是领域模型或JavaBean组件

view

负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。

controller

接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。

回顾servlet

是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层

示例

1.新建maven工程,引入pom依赖

在这里插入图片描述 2.建立一个moudle,添加web支持,导入servlet和jsp的jar依赖:
在这里插入图片描述 3.编写一个Servlet类,用来处理用户的请求
在这里插入图片描述
4.在WEB-INF目录下新建一个jsp的文件夹,新建hello.jsp
在这里插入图片描述
5.在web.xml中注册Servlet
在这里插入图片描述

6.测试
localhost:8080?method=add

MVC框架作用

1.将url映射到java类或java类的方法 .
2.封装用户提交的数据 .
3.处理请求–调用相关的业务处理–封装响应数据 .
4.将响应的数据进行渲染 . jsp / html 等表示层数据 .

SpringMvc

spring mvc是基于java实现的MVC的轻量级web框架

特点

1.轻量级,简单易学
2.高效,基于请求响应的mvc框架
3.与spring兼容性好,无缝结合
4.约定优于配置
5.功能强大
6.简洁

原理

	当发起请求时被前置的控制器拦截到请求,根据请求参数生成代理请求,找到请求对应的实际控制器,控制器处理请求,创建数据模型,访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,将结果返回给中心控制器,再将结果返回给请求者。

在这里插入图片描述

SpringMVC执行原理

在这里插入图片描述

图为SpringMVC的一个较完整的流程图,实线表示SpringMVC框架提供的技术,不需要开发者实现,虚线表示需要开发者实现
执行流程:
1.DispatcherServlet表示前置控制器,是整个spring mvc的控制中心。用户发出请求,DispatcherServlet接收请求并拦截请求。
2.HandlerMapping为处理器映射。DispatcherServlet调用HandlerMapping,HandlerMapping根据请求url查找Handler
3.HandlerExceution表示具体的Handler,作用是根据url查找对应的控制器。
4.HandlerExceution将解析后的信息传递给DispacherServlet.
5.HandlerAdapter表示处理器适配器,按照规则去执行Handler。
6.Handler具体让Controller去执行
7.Controller将视图逻辑名或模型返回给HandlerAdapter
8.HandlerAdapter将视图逻辑名或模型返回给DispatcherServlet
9.DispatcherServlet调用视图解析器(ViewResolver)来解析HandlerAdapter传递的视图逻辑名
10.视图解析器(ViewResolver)将解析的视图逻辑名传递给DispatcherServlet.
11.DispatcherServlet根据解析的视图结果,调用具体的view
12.将view呈现给用户

SpringMVC示例

配置版

配置web.xml , 注册DispatcherServlet
在这里插入图片描述

新建springmvc-servlet.xml,添加 处理映射器,添加 处理器适配器,添加 视图解析器
在这里插入图片描述

新建Controller,返回一个ModelAndView,装数据,封视图
在这里插入图片描述

注册bean:
在这里插入图片描述

跳转的jsp页面,显示ModelandView存放的数据
在这里插入图片描述

启动测试:
localhost:8080/hello

注解版

配置web.xml:
在这里插入图片描述

修改springmvc-servlet.xml配置文件:
在这里插入图片描述

创建Controller控制类:
在这里插入图片描述

创建视图:
在这里插入图片描述

添加lib(不添加会接口找不到):
在这里插入图片描述

启动测试:
localhost:8080/hello

小结

步骤:
新建一个web项目
导入相关jar包
编写web.xml , 注册DispatcherServlet
编写springmvc配置文件
接下来就是去创建对应的控制类 , controller
最后完善前端视图和controller之间的对应
测试运行调试.
使用springMvc必须注册:处理器映射器、处理器适配器、视图解析器;其中视图解析器需要手动配置,其他只需要开启注解。

RestFull风格

Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
功能:
使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作
请求类型:
@GetMapping(“/hello”) //处理get请求
@PostMapping(“/hello”) //处理post请求,更倾向于添加信息
@PutMapping(“/hello”) //与post相同,更倾向于更新信息
@DeleteMapping(“/hello”) //处理delete请求
@PatchMapping(“/hello”) //Patch方式是对put方式的一种补充,put方式是可以更新.但是更新的是整体.patch是对局部更新

接收参数:
@RequestParam
获取方式:http://localhost:8080/hello?param=10
在这里插入图片描述

@PathVariable
获取方式:http://localhost:8080/hello/101
在这里插入图片描述

@RequestBody
在这里插入图片描述

转发和重定向

	转发和重定向的最大区别就是:重定向让浏览器工作,转发让服务器工作;
	重定向可以是任何网址,但转发必须是当前网址;

转发

(forward:请求转发(去前后缀)):
mv.setViewName(“str”);

	str=”forward : 路径”        请求转发到一个jsp中
	str=”forward : controller的映射”     请求转发到一个controller方法中

重定向

(redirect:重定向):
mv.setViewName(“str”);

	str=”redirect: 路径”        请求转发到一个jsp中
	str=”redirect: controller的映射”     请求转发到一个controller方法中

例:
如小明去肯德基A窗口买全家桶,但是A窗口服务员发现没有了,但是B窗口还有;然后他从B窗口拿过来给你,这就叫转发;但是让你去B窗口领餐,这就叫重定向。

乱码问题

乱码问题是在我们开发中十分常见的问题
解决办法:

过滤器

	SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置
	注意:这里写/*,写/的话过滤不了jsp页面,不能解决乱码
	但是我们发现 , 有些极端情况下.这个过滤器对get的支持不好 .

在这里插入图片描述

修改Tomcat配置文件,设置编码

在这里插入图片描述

自定义过滤器(万能)

一般情况下,SpringMVC默认的乱码处理就已经能够很好的解决了!然后在web.xml中配置这个过滤器即可!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

乱码问题,需要平时多注意,在尽可能能设置编码的地方,都设置为统一编码 UTF-8!

拦截器

拦截器:它主要用于拦截用户请求并作相应的处理
过滤器与拦截器的区别:
拦截器是AOP思想的具体应用。
过滤器
servlet规范中的一部分,任何javaweb工程都可以使用
在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截
拦截器
拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用
拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的
示例:
1.编写拦截器(必须实现 HandlerInterceptor 接口),preHandle方法进行拦截处理,其他两个方法可以不用重写(处理日志)
在这里插入图片描述

在springmvc的配置文件中配置拦截器:
在这里插入图片描述

测试:http://localhost:8080/t1

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值