今日的无语大bug
忘记倒入mybatis和spring整合大包,如果没导包,在运行时并不会报错,但是扫描不出来mapper
1 Handler方法的形参
执行Handler方法是通过反射来执行
method.invoke(object,args);
形参主要是请求参数
1.1 ★★★请求参数接收
localhost:8080/user/register?username=songge&password=niupi&age=30&gender=male
这个请求它的请求参数是谁?
username、password、age、gender
1.1.1 直接在形参中接收
请求参数名和Handler方法的形参名一致
1.1.1.1 基本类型、包装类、字符串
建议:基本类型的值建议使用对应的包装类来进行接收,避免没有传入参数,导致null值转换异常
接收指定形参名的请求参数 → 直接先接收到字符串,然后将字符串转换为对应的类型
是因为提供了转换器: Converter
1.1.1.2 数组
?hobbys=sing&hobbys=dance&hobbys=rap&hobbys=basketball
构造一个数组请求参数:多个请求参数名相同
请求参数名和Handler方法的形参名一致
1.1.1.3 Date(引出转换器)
1、直接接收:yyyy/MM/dd
2、使用指定格式的转换器:@DateTimeFormat(pattern=“日期格式”)
3、自定义转换器,自己来写转换
自定义转换器 → Converter接口
将转换器配置给SpringMVC的转换服务conversionService
1、 注册转换器组件
2、 注册一个conversionService,并且配置自定义转换器
3、 通知SpringMVC做了转换服务
后续在JavaConfig和SpringBoot使用过程中都会简化这个过程
1.1.1.4 文件
文件上传
1.1.1.4.1 引入依赖
commons-io\commons-fileupload
1.1.1.4.2 注册multipartResolver组件
根据组件id来进行使用:注册这个组件的时候需要指定特定的组件id 👉multipartResolver
1.1.1.4.3 构造请求(表单)
enctype=multipart/form-data
method=post
1.1.1.4.4 Handler方法
1.1.2 以Pojo类来接收
原先在Handler方法中的这些形参,作为JavaBean的成员变量名
1.1.3 混合方式
直接接收请求参数和Pojo类接收的混合
1.1.4 ★★★Json请求参数的接收
1.1.4.1 Json请求
请求方法:POST
Content-Type:application/json
data:Json字符串
1.1.4.2 接收Json请求参数
参数比较少,可以直接用Map来接收;如果需要固定参数类型,建议以JavaBean来接收
1.1.5 小结
先看请求URL 👉 @RequestMapping
请求方法:
GET,一定不会使用到@RequestBody注解
POST:判断请求参数中是否包含{}或[]
1.2 其他参数
1.2.1 HttpServletRequest和HttpServletResponse
当前的请求的request和response
用法就和你在servlet中的doGet和doPost
1.2.2 Model
Handler方法的返回值为字符串,作为viewName;Model是放在形参中的
1.2.3 Cookie(不能直接放在形参中)
通过request获得cookie
1.2.4 Session
可以直接以HttpSession放在形参中;
也可以通过request来获得
1.2.5 代码
2 RESTful(一种风格)
表述性状态传递
user相关的请求:新增、修改、删除、查询
/user GET 查询
/user POST 新增
/user DELETE删除
/user PUT 修改
根据请求方法的不同做不同的请求
现在我们不用了,主流做的是前后端分离,请求方法主要就是GET或POST
/user/list
/user/update
/user/delete
/user/add
请求URL是具备一些特征的,资源+操作
方便我们去设计拦截器(过滤器),窄化请求
最重要的点:响应JSON数据
再讲几个注解:获得请求的组成部分,作为Handler方法的形参,让你的Handler方法能够拿到这一些
2.1 请求URL → @PathVariable
用户名/article/details/文章id
2.2 请求参数 → @RequestParam
没啥用,脱裤子放屁
2.3 请求头 → @RequestHeader
获得指定请求头的值,根据key获得对应的value
2.4 Cookie → @CookieValue
根据cookie的name获得对应的value
构造cookie:songge=niupi
2.4.1 浏览器
2.4.2 postman
2.4.3 获得cookiename对应的value
2.5 Session → @SessionAttribute
根据attributeName,拿到对应的value
3 静态资源处理
之前JavaEE应用我们放在web资源路径的下静态资源可以直接访问到,整合SpringMVC之后发现访问不了
DispatcherServlet的servlet-mapping = /
3.1 default这个servlet 分流
3.2 default-servlet-handler
前面这两种方式,处理的都是web资源根路径下的静态资源
3.3 静态资源映射
根据url找到对应的resourceHandler的location,输出对应的静态资源
配置ResourceHandler,配置的就是mapping、location
<mvc:resources mapping location/>
4 filter
filter是在进入到servlet之前过滤
非常重要的一件事情,对request和response做通用的处理
要解决一个通用的编码问题 CharacterEncodingFilter
5 全局搜索
ctrl+shift+f →通常和你的输入法的简繁体转换的快捷键冲突(把输入法的这个快捷键关掉)
ctrl+shift+r 全局替换
双击shift
6 附录
为什么我们要引入servlet-api → 编译的时候需要(scope=provided)