第八天:Spring MVC

1.mvc

概念:

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

model:

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

view:

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

controller:

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

2.回顾servlet

扫描二维码关注公众号,回复: 15053976 查看本文章

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

2.1:示例:

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

2.2:MVC框架要做哪些事情:

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

3.SpringMvc

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

3.1:特点:

1.轻量级,简单易学

2.高效,基于请求响应的mvc框架

3.与spring兼容性好,无缝结合

4.约定优于配置

5.功能强大

6.简洁

3.2:原理:

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

 3.3: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呈现给用户

4.spring mvc程序编写

4.1:配置版

配置web.xml , 注册DispatcherServlet

新建springmvc-servlet.xml,添加 处理映射器,添加 处理器适配器,添加 视图解析器

新建Controller,返回一个ModelAndView,装数据,封视图

注册bean

跳转的jsp页面,显示ModelandView存放的数据

启动测试:

localhost:8080/hello

4.2:注解版

配置web.xml:

修改springmvc-servlet.xml配置文件:

创建Controller控制类:

创建视图:

添加lib(不添加会接口找不到):

启动测试:

localhost:8080/hello

4.3:小结

步骤:

  1. 新建一个web项目
  2. 导入相关jar包
  3. 编写web.xml , 注册DispatcherServlet
  4. 编写springmvc配置文件
  5. 接下来就是去创建对应的控制类 , controller
  6. 最后完善前端视图和controller之间的对应
  7. 测试运行调试.

使用springMvc必须注册:处理器映射器、处理器适配器、视图解析器;其中视图解析器需要手动配置,其他只需要开启注解。

5.RestFul风格

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

6.转发和重定向

转发和重定向的最大区别就是:重定向让浏览器工作,转发让服务器工作;

重定向可以是任何网址,但转发必须是当前网址;

转发(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窗口领餐,这就叫重定向。

8.乱码问题

乱码问题是在我们开发中十分常见的问题

解决办法:

1.乱码问题通过过滤器解决 , 而SpringMVC给我们提供了一个过滤器 , 可以在web.xml中配置

注意:这里写/*,写/的话过滤不了jsp页面,不能解决乱码

但是我们发现 , 有些极端情况下.这个过滤器对get的支持不好 .

2.修改Tomcat配置文件,设置编码:

3.自定义过滤器(万能):

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

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

9.拦截器

拦截器:它主要用于拦截用户请求并作相应的处理

过滤器与拦截器的区别:拦截器是AOP思想的具体应用。

过滤器

servlet规范中的一部分,任何javaweb工程都可以使用

在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截

拦截器

拦截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能使用

拦截器只会拦截访问的控制器方法, 如果访问的是jsp/html/css/image/js是不会进行拦截的

示例:

1.编写拦截器(必须实现 HandlerInterceptor 接口),preHandle方法进行拦截处理,其他两个方法可以不用重写(处理日志)

在springmvc的配置文件中配置拦截器:

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

猜你喜欢

转载自blog.csdn.net/qq_35056891/article/details/126947700
今日推荐