SpringMVC

一、回顾MVC

1.早些年
控制器Controller =>Servlet
视图层 View =>JSP
JavaBean =>POJO
2.MVC三层架构
控制器Controller =>Servlet 【处理且返回请求,重定向和转发】
视图层 View =>JSP 【展示数据模型】
模型层 Model =>Service Dao JavaBean JDBC 【CRUD】
3.常用框架
常见服务器端MVC框架:Struts、SpringMVC、ASP.NET MVC、Zend Framework、JSF
前端MVC框架:Vue、angularijs、reaCt、backbone
由MVC演化成另外一些模式:MVP、MVVM等

二、什么是SpringMVC?

1.概述
SpringMVC是围绕Spring Framework一部分,是基于JAVA实现MVC的轻量级web框架。
特定:①轻量级,简单易学
②高效,基于请求响应的MVC框架
③与Spring兼容性好,无缝结合
④约定大于配置
⑤功能强大:RESTful风格、数据验证、格式化、本地化、主题
⑥简介灵活
Spring的web框架围绕DispatCherServlet【调度Servlet】设计
DispatCherServlet=>将请求分发到不同的处理器
从Spring2.5开始,使用JAVA5以上的版本用户可以采用基于注解形式进行开发,简洁
2.中心控制器
SpringMVC框架像许多其他MVC框架一样:以请求为驱动,围绕一个中心Servlet分派请求及提供其他功能
DispatcherServlet是一个实际的Servlet(它继承自HttpServlet基类) 在这里插入图片描述
SpringMVC原理在这里插入图片描述
当用户发起请求时,被前置的控制器拦截到请求,根据请求参数生成代理请求,
找到请求时对应的实际控制器,控制器处理请求,创建数据模型,
访问数据库,将模型响应给中心控制器,控制器使用模型与视图渲染视图结果,
将结果返回给中心控制器,再将结果返回给请求者!
3.SpringMVC执行原理在这里插入图片描述
实线:SpringMVC框架提供的技术,无需技术者实现 虚线:需要开发者实现
简要分析执行流程?
=>1.DispatcherServlet表示前置控制器,是整个SpringMVC的控制中心
用户发出请求,DispatcherServlet接受请求并拦截请求在这里插入图片描述

2.HandlerMapper为处理器映射。
=>DispatcherServlet调用HandlerMapper,HandlerMapper根据请求url查找Handler
3.HandlerExecution表示具体的Handler
=>主要作用是根据url查找控制器,如上面的hello
4.HandlerExecution将解析后的信息传递给DispacherServlet。 如解析控制器映射
5.HandlerAdapter表示处理器适配器。
=>其按照特定的规则去执行Handler
6.Handler让具体的Controller执行
7.Controller将具体的执行信息返回给HandlerAdapter。 如ModelAndView
8.HandlerAdapter将视图逻辑名或模型传递给DispatcherServlet
9.DispatcherServlet调用视图解析器【ViewResolver】来解析HandlerAdapter传递的逻 辑视图名
10.视图解析器将解析的逻辑视图名传给DispatcherServlet
11.DispatcherServlet根据视图解析器解析的视图结果,调用具体的视图
12.最终视图呈现给用户

三、第一个MVC程序 这里有配置版和注解版【这才是SpringMVC精髓】

在这里插入图片描述
配置版步骤:①建立项目在这里插入图片描述
②增加Web支持在这里插入图片描述在这里插入图片描述

③导入依赖[导入Javaweb依赖【JSTL+stand标签库 Servlet和JSP】和Springmvc依赖]
④配置web.xml,注册DispatcherServlet在这里插入图片描述
⑤编写SpringMVC配置文件在这里插入图片描述
在这里插入图片描述
⑥编写我们要操作的业务Controller.在这里插入图片描述
⑦将自己的类交给SpringIOC容器,注册bean【写在配置文件】在这里插入图片描述
在④配置文件中就可以看到
注:然后已经吧配置文件在web.xml给servlet-mapping,跟JavaWeb基础知识不同的是JavaWeb是在web.xml的servlet-mapping的是一个类,而这边是配置文件。所以写在配置文件中的bean的id就是servlet-mapping!!!
⑧写出要跳转的jsp页面,显示ModelAndView存放的数据及正常的页面在这里插入图片描述
⑨配置tomcat
在这里插入图片描述
⑩测试在这里插入图片描述
⑩①中间可能会遇到的404问题
排查步骤:
一、从控制台上,看看是否有没有缺少jar包
在这里插入图片描述

二、若不缺jar包,显示无法输出,那么IDEA项目,添加lib依赖 然后再重启tomact
在这里插入图片描述
在这里插入图片描述
注解版:实际开发是不会写配置版的,注解才是SpringMVC的精髓
步骤:1.新建项目 这跟配置版本一样
2.添加依赖 这跟配置版本一样【若是父项目已经引入,那么就不用再 引入】
3.配置web.xml 这跟配置版本一样
4.配置SpringMVC配置文件在这里插入图片描述
5.创建Controller 这里不使用接口 而是使用注解在这里插入图片描述
6.创建视图层在这里插入图片描述
7.配置tomcat启动测试在这里插入图片描述
测试在这里插入图片描述

四、控制器和RestFul

一.控制器Controller
·控制器复杂提供访问应用程序的行为,通常是通过接口定义或注解定义两种方式
·控制器负责解析用户的请求并将其转换为一个模型
·在SpringMVC中一个控制器类可以包含多个方法
·在SpringMVC,对于Controller配置方式有很多种
①实现Controller
步骤:
1.新建项目 这跟配置版本一样
2.添加依赖 这跟配置版本一样【若是父项目已经引入,那么就不用再 引入】
3.配置web.xml 这跟配置版本一样
4.配置SpringMVC配置文件在这里插入图片描述
5.编写控制类在这里插入图片描述
6.注册bean [在配置文件]在这里插入图片描述
7.创建视图层在这里插入图片描述
8.配置tomcat,启动测试 这里的tomcat的application context为/在这里插入图片描述
9.说明
·实现Controller接口是比较老的方法
·缺点:一个控制器只有一个方法。 所以要使用很多个方法,就需要定 义很多个类,比较麻烦
②使用注解@Controller
·@Controller可以声明Spring类的实例是一个控制器【在IOC还有三个别的注解】
·Spring还可以使用扫描机制在找到应用程序中所有基于注解的控制器类,为了保 证Spring能找到你的控制器,需要在配置文件中声明组件扫描
步骤:
1.新建项目 这跟配置版本一样
2.添加依赖 这跟配置版本一样【若是父项目已经引入,那么就不用再 引入】
3.配置web.xml 这跟配置版本一样
4.配置SpringMVC配置文件在这里插入图片描述
5.创建视图层在这里插入图片描述
6.编写控制类和配置tomcat 启动测试 tomcat的application context为/在这里插入图片描述
7.发现:你可以不止一个方法?!

二.RequestMapping注解 【使用在实现Controller接口的类无效!!】
@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法
可以用于类或方法。
用于类,表示类中所有响应请求方法都是以该地址作为父路径
测试结论:我们就把上面的使用注解@Controller的基础上【用于方法】只修改编写控制类,然后启动测试【用于类和方法】看结果在这里插入图片描述

三.RestFul风格
概念:就是一个资源定位及操作的风格。 非标准非协议,只是一种风格。
基于这风格设计的软件可以更简洁、更有层次、更易实现缓存机制。
功能:资源:互联网所有事物都可以被抽象被为资源
资源操作:使用POST、DELETE、PUT、GET对资源进行操作
增 删 改 查
传统方法操作资源:通过不同参数来实现不同的效果!方法单一 POST和GET
http://127.0.0.1/item/saveItem.action 增 POST
http://127.0.0.1/item/queryItem.action?id=1 查 GET
http://127.0.0.1/item/deleteItem.action?id=1 删 POST或GET
http://127.0.0.1/item/updateItem.action 改 POST
RestFul风格操作资源:通过不同请求方式实现不同的效果!地址一样!功能不一样!
http://127.0.0.1/item/1 查 GET
http://127.0.0.1/item 增 POST
http://127.0.0.1/item 改 PUT
http://127.0.0.1/item/1 删 DELETE
①学习测试:
=>步骤:1.新建项目 这跟配置版本一样
2.添加依赖 这跟配置版本一样【若是父项目已经引入,那么就不用再 引入】
3.配置web.xml 这跟配置版本一样
4.配置SpringMVC配置文件在这里插入图片描述
5.创建视图层在这里插入图片描述
6.编写控制类和配置tomcat 启动测试 tomcat的application context为/在这里插入图片描述
7.结果在这里插入图片描述

8.发现:·使路径更加简洁
·获得参数更加方便,框架会自动进行类型转换
·通过路径变量类型可以约束访问参数,若类型不一样,则访问不到对应的请求方法,如下图路径跟方法不匹配,而不会是参数转换失败在这里插入图片描述

9.对于8.发现 不匹配的错误。我们接下来修改对应参数类型,再次测试在这里插入图片描述
测试结果在这里插入图片描述

②使用method属性指定请求的类型
用于约束请求类型,可以收窄请求范围。
指定请求谓词的类型如GET、POST、PUT、DELETE、HEAD、OPTIONS、PATCH、TRACE在这里插入图片描述
测试
1.在RestuFulController增加一个新方法 【POST】在这里插入图片描述
2.测试在这里插入图片描述
3.再增加一个新方法 【GET】在这里插入图片描述
4.测试在这里插入图片描述

5.小结:我们使用的浏览器地址栏进行访问默认是GET请求,所以上面会报错405
所有的地址栏请求默认都回事HTTP GET类型

6.方法级别的注解变体有如下:组合注解
@GetMapping =>@RequestMapping(method=RequestMethod.GET)的一个快捷方式
@PostMapping =>@RequestMapping(method=RequestMethod.POST)的一个快捷方式
@PutMapping =>@RequestMapping(method=RequestMethod.PUT)的一个快捷方式
@DeleteMapping =>@RequestMapping(method=RequestMethod.DELETE)的一个快捷方式
@PatchMapping 是PUT的一种扩充方式。 PUT是全部更新,而这个是局部更新。

五、数据处理及跳转

1.结果跳转方式

这里新建项目和导入依赖 web.xml就不做赘述了 JSP跟之前一样,不做赘述了

①ModelAndView

设置ModelAndView对象,根据view名称和视图解析器跳到指定页面
页面:{视图解析器前缀}+viewName+{视图解析器后缀}
配置文件在这里插入图片描述
对应的Controller类在这里插入图片描述

②ServletAPI(无需视图解析器)

吧配置文件中的视图解析器给注释掉在这里插入图片描述
对应的类在这里插入图片描述
分别测试其结果 Application context为/在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

③SpingMVC(同样无需视图解析器)

方式一:转发和重定向JSP页面 【无视图解析器】

控制类在这里插入图片描述
tomcat配置 启动测试结果在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

为何重定向会出现404错误???=>为何这样呢?=>看下图,重定向是客户端级别的,而客户端是无法访问到WEB-INF目录。而②ServletAPI的重定向不是访问WEB-INF目录,所以②可以重定向! 【想访问,可以利用Servelet-mapping,下面的例子会用到】在这里插入图片描述

方式二:利用Servlet-Mapping 【无视图解析器】

Web.xml在这里插入图片描述
控制类在这里插入图片描述
Tomcat启动 测试在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
发现:这样虽然能到WEB-INF目录的JSP页面,但是会发现无法传递参数

方式三:转发和重定向请求 【有视图解析器-只能适用于默认转发】

Web.xml跟之前方式二一样
控制类在这里插入图片描述
测试结果在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.数据处理

①处理提交数据

控制类在这里插入图片描述

1.提交数据 【提交的域名和处理方法的参数名一致】

在这里插入图片描述
后台输出结果在这里插入图片描述

2.提交数据 【提交的域名和处理方法的参数名不一致】

在这里插入图片描述
后台输出结果在这里插入图片描述

3.提交数据 【提交的是一个对象】 【参数必须一致】

在这里插入图片描述
后台输出结果在这里插入图片描述
其中实体类在这里插入图片描述

②数据显示到前端

第一种:通过ModelAndView【前面使用的一直如此】【这里就只截图前面的例子】

在这里插入图片描述

第二种:通过ModelMap

在这里插入图片描述
在这里插入图片描述

第三种:通过Model

在这里插入图片描述
在这里插入图片描述
对比:Model只有寥寥几个方法只适用于存储数据,简化了新手对于Model对象操作和理解
ModelMap集成LinkedMAP,除实现自身的一些方法,同样集成LinkedMap方法和特性
ModelAndView可以在存储数据同时,也可进行设置返回的逻辑视图,进行控制层跳转。
以后不仅于此!更多要考虑性能和优化方面!!

③乱码问题

测试步骤:1.我们可以在首页编写一个提交的表单在这里插入图片描述
2.后台编写对应的处理类在这里插入图片描述
3.输入中文测试,发现乱码在这里插入图片描述
不得不说乱码在我们开发中十分常见的问题,以前乱码问题通过过滤器解决,而SpringMVC给我们提供了一个过滤器,可以在web.xml中配置。
解决办法:修改web.xml文件需要重启服务器!在这里插入图片描述
测试结果在这里插入图片描述
但是我们发现,有些极端情况下,这个过滤器对get的支持不好。
对于上面的弊端,我们还有其他的处理办法=>
步骤:1.修改tomcat的配置文件:设置编码!在这里插入图片描述
2.自定义过滤在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.在web.xml配置自定义过滤器
在这里插入图片描述
测试结果在这里插入图片描述

这个也是网上一些大神写的,一般情况下,SpringMVC默认的乱码处理就能很好处理。乱码问题需要平时多注意,在尽可能设置编码的地方都设置为统一编码UTF-8!!

六、JSON

1.什么是JSON?

在这里插入图片描述

2.JSON与JavaScript对象互转

在这里插入图片描述
在这里插入图片描述

3.Controller返回JSON数据

Jackson是目前比较好的json解析工具。
当然还有阿里巴巴的fastjson等等。

<dependencies>
    <!--导入Jackson导入包-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.9.8</version>
    </dependency>
</dependencies>

还要导入JavaWeb相关及springMVC及lombok的依赖
同时注册Dispatcher和自定义过滤器
在这里插入图片描述
Springmvc-servlet.xml
在这里插入图片描述
编写一个实体类和Controller层
在这里插入图片描述
@ResponseBody不会走视图解析器,会直接返回一个字符串
在这里插入图片描述

4.代码优化

如果每次都要写乱码处理的代码,返回json字符串就很麻烦
这里进行优化,统一解决这两个问题
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5.测试集合输出

添加一个新方法
在这里插入图片描述
在这里插入图片描述

6.输出时间对象

在这里插入图片描述
在这里插入图片描述
取消timestamps形式,自定义时间格式
在这里插入图片描述
在这里插入图片描述

7.抽取为工具类

对于经常使用的代码,可以将这些代码封装到一个工具类,方便复用。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8.FastJson[阿里巴巴]

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这种工具类,只要掌握使用就好了,使用时 根据具体业务去找对应实现。

七、Ajax

1.简介

在这里插入图片描述

2.伪造Ajax

可以使用前端iframe标签来伪造Ajax的样子。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.jQuery.ajax

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3.编写一个index.jsp测试
在这里插入图片描述
4.启动测试
在这里插入图片描述
springmvc实现
①实体类和控制类
在这里插入图片描述
②前端页面
在这里插入图片描述
③测试
在这里插入图片描述

4.注册提示效果

测试一个小Demo,我们平时注册时,输入框后面的实时提示怎么做到的?
①控制类
在这里插入图片描述
②前端页面
在这里插入图片描述
在这里插入图片描述
③测试
在这里插入图片描述
④其中乱码处理
在这里插入图片描述

5.获取baidu接口Demo

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

八、拦截器

1.概述

在这里插入图片描述

2.自定义拦截器

在这里插入图片描述
在这里插入图片描述
4.在spiringmvc配置文件中 配置拦截器
在这里插入图片描述
5.编写一个控制类
在这里插入图片描述
6.前端
在这里插入图片描述
7.测试
在这里插入图片描述
点击后出现
在这里插入图片描述

3.验证用户是否登录【认证用户】

在这里插入图片描述
①编写一个登录页面
在这里插入图片描述
②编写一个Controller处理请求
在这里插入图片描述
③编写一个登录成功的页面
在这里插入图片描述
在这里插入图片描述
④在index.jsp测试跳转! 启动测试=>发现未登录也可以进入登录成功的主页
在这里插入图片描述
在这里插入图片描述
⑤编写用户登录拦截器
在这里插入图片描述
⑥配置文件配置拦截器
在这里插入图片描述
⑦再次启动测试
测试成功

九、文件上下传

1.文件上传

①准备工作

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

②文件上传

1.导入文件上传的jar包
在这里插入图片描述
2.配置bean:multipartResolver [必须是这个 否则会报404]
在这里插入图片描述
3.编写前端
在这里插入图片描述
4.控制类Controller
在这里插入图片描述
在这里插入图片描述
5.测试
6.如果出现404:可能是lib包没有添加好依赖

2.文件下载

步骤:1.设置response响应头
2.读取文件-InputStream
3.写出文件-OutputStream
4.执行操作
5.关闭流【先开后关】
在这里插入图片描述
前端
在这里插入图片描述
测试,文件下载OK,大家可以和我们之前学习的JavaWeb原生的方式对比一下,就可以知道这个便捷多了

知识复习图

在这里插入图片描述

总结:参考bilibili狂神说

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值