Spring MVC学习篇(一):一步一个小脚印

先了解Spring MVC架构,总分总

基于Servlet的MVC模式:
Spring MVC学习篇(一):一步一个小脚印_第1张图片
Spring MVC工作流程:
Spring MVC学习篇(一):一步一个小脚印_第2张图片
SpringMVC

两种创建SpringMVC工程的方法

  • Maven工程上add framework support:这个方法试了一下,很难完成,后面有机会再弄,推荐下面一种。
  • SpringMVC工程上导入jar包:SpringMVC

参考教程

找到了一个教程,学习Spring MVC:http://c.biancheng.net/view/4399.html


问题记录

Spring MVC 几种接收参数方式

通过@ModelAttribute接收请求参数,没有办法直接使用user定义的属性名称
Spring MVC学习篇(一):一步一个小脚印_第3张图片
通过@PathVariable接收url中的请求参数,请求404(忽略大大的波浪线)
请求地址:http://localhost:80/SpringMVCHello_war_exploded/paramPathVariable/XiXi/123
Spring MVC学习篇(一):一步一个小脚印_第4张图片
结合界面,验证获取参数

在jsp代码中,教程给出的是核心代码,css、HTML、image都没有给出,所以这边一直运行不出来,可以等前端知识学习了,回头再看看
Spring MVC学习篇(一):一步一个小脚印_第5张图片

重定向与转发理解

return "forward:/index/isLogin" //转发到isLogin方法
return "redirect:/index/isLogin" //重定向到isLogin方法

转发是服务端的行为[用户无感知],重定向是客户端的行为[用户可见,响应码302]
下面的例子表现出来,重定向/index/login -->/index/isLogin、转发/index/login,两者最终转发到视图"main"
Spring MVC学习篇(一):一步一个小脚印_第6张图片
两者的区别:(1)request存放的信息,转发不会失效、重定向会失效;(2)转发的路径必须是同一个 Web 容器下的 URL,其不能转向到其他的 Web 路径上,中间传递的是自己的容器内的 request,重定向因为request信息的清除,所以可以定向到任意url。
所以这边的Web容器具体指的是啥?

@Autowired与@Service
Spring MVC学习篇(一):一步一个小脚印_第7张图片
在这里插入图片描述
@ModelAttribute 教程中太笼统了,且脚本不是很准确 找了一个详细版的:https://www.cnblogs.com/jasonZh/p/8761432.html
参考之后转变成自己现在正在设计的业务思路:
(1)@ModelAttribute与执行的方法写在一起
Spring MVC学习篇(一):一步一个小脚印_第8张图片
Spring MVC学习篇(一):一步一个小脚印_第9张图片
(2)写一个BaseController,所有需要控制权限的类继承。同样的可以将验证权限的方法写成BaseController,UserController继承该类,但我们之前继承之后,所有的方法之前之前需要验证该权限,对于注册来说,验证有没有登陆显然是没有必要的,可以将其拆成两个Controller。
Spring MVC学习篇(一):一步一个小脚印_第10张图片
类型转换:Formatter 与 Converter 一样,也是一个可以将一种数据类型转换成另一种数据类型的接口。不同的是,Formatter 的源数据类型必须是 String 类型,而 Converter 的源数据类型是任意数据类型。

Converter:输入类型与参数类型不匹配,报错400,后面会有办法解决—输入校验
Spring MVC学习篇(一):一步一个小脚印_第11张图片
Spring MVC学习篇(一):一步一个小脚印_第12张图片
Converter:自定义类型转换–补一下调用GoodsConverter逻辑
Spring MVC学习篇(一):一步一个小脚印_第13张图片
Formatter:配置有点不对,网上找了一个

			 <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
			 	<property name="formatters">
			 		<set>
			 			<bean class="com.springmvc.book.convert.MyFormatter"></bean>
			 		</set>
			 	</property>
			 </bean> 
			 
			<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

页面中文乱码问题
在这里插入图片描述
Spring MVC学习篇(一):一步一个小脚印_第14张图片
解决:jsp文件设置规范
在这里插入图片描述
Formatter的Locale类型的参数自定义问题,比如:2020-06-28
Spring MVC学习篇(一):一步一个小脚印_第15张图片
非Maven项目管理:手动导入jstl相关jar包,userList.jsp狂飘红,但不影响正常使用
Spring MVC学习篇(一):一步一个小脚印_第16张图片
导入jar包参考:https://blog.csdn.net/qq_39445165/article/details/84107885

JSON数据交互,前端代码没有调通。没有找到源程序,之后学了js等前端技术再补。–待解决

导入json相关jar包
在这里插入图片描述

拦截器两种实现方式

  • 一种是通过实现 HandlerInterceptor 接口或继承 HandlerInterceptor 接口的实现类来定义;
  • 另一种是通过实现 WebRequestInterceptor 接口或继承 WebRequestInterceptor 接口的实现类来定义。
    Spring MVC学习篇(一):一步一个小脚印_第17张图片
    多个拦截器的执行流程:在 Web 应用中通常需要有多个拦截器同时工作,这时它们的 preHandle 方法将按照配置文件中拦截器的配置顺序执行,而它们的 postHandle 方法和 afterCompletion 方法则按照配置顺序的反序执行。

数据验证
数据验证分为客户端验证和服务器端验证,客户端验证主要是过滤正常用户的误操作,通过 JavaScript 代码完成。服务器端验证是整个应用阻止非法数据的最后防线,通过在应用中编程实现。

从测试角度看及输入参数边界值、参数类型的有效验证。

客户端验证暂时不管,我们先看看服务端验证:

  • 利用 Spring 自带的验证框架。
  • 利用 JSR 303 实现。

在 Spring MVC 框架中先进行数据类型转换,再进行服务器端验证。

实现 org.springframework.validation.Validator 接口,达到接口验证的目的,遇到了问题
问题1:
Spring MVC学习篇(一):一步一个小脚印_第18张图片
解决:
在这里插入图片描述
问题2:运行Tomcat报错
Spring MVC学习篇(一):一步一个小脚印_第19张图片
解决:
参考文章:https://blog.csdn.net/weixin_42634260/article/details/89931226

问题3:SpringMVC去处理数据验证一直不成功,实现Validator 接口卡在读取错误信息配置上,注解卡在jar包导入。。。。–待解决

文件上传:上传之后的文件去哪儿了?

文件下载:文件名是中文,下载报错

further occurrences of HTTP header parsing errors...;
Invalid character found in the request target

参考文章:https://blog.csdn.net/a1104004650/article/details/83651159

你可能感兴趣的:(SSM)