目录
五、SpringMVC的视图
2、转发视图
3、重定向视图
六、HttpMessageConverter
1、@RequestBody
2、RequestEntity
3、@ResponseBody
4、SpringMVC处理json(浅析)
五、SpringMVC的视图
2、转发视图
SpringMVC中默认的转发视图是InternalResourceView SpringMVC中创建转发视图的情况: 当控制器 方法中所设置的视图名称以"forward:"为前缀时,创建InternalResourceView视图,此时的视 图名称不 会被SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"forward:"去掉,剩余部 分作为最 终路径通过转发的方式实现跳转
例如"forward:/","forward:/employee"employee是另一个请求的路径对应的方法用视图解析器解析跳 转到页面
@RequestMapping("/testForward")
public String testForward(){
return "forward:/testHello";}
3、重定向视图
当控制器方法中所设置的视图名称以"redirect:"为前缀时,创建RedirectView视图,此时的视图名称不会被 SpringMVC配置文件中所配置的视图解析器解析,而是会将前缀"redirect:"去掉,剩余部分作为最终路径
通过重定向的方式实现跳转
例如"redirect:/","redirect:/employee
转发一次请求 浏览器发送 服务器内部 重定向两次请求 一次servlet 一个重定向的地址
转发可以获取请求域中的数据 重定向不可 因为转发一次请求requezt对象是同一个
request.getdispatcher().forward()将当前的请求和响应传递到下一个资源继续处理,所以可以获取请求 域中的数据。重定向两次请求就相当于两个request对象
转发能访问webinf下的资源,重定向不可以
webinf下资源具有安全性隐藏性 只能通过服务器内部访问,不能通过浏览器访问
转发不能跨域,重定向可以跨域 转发只能在内部服务器访问 重定向两次请求可以跨域到百度
"redirect:/"------重定向到首页 有用
六、HttpMessageConverter
报文有三部分组成:请求头 请求空行 请求体(只有post请求才会有 里面放的是请求参数 而get直接拼接 地址 而post放到请求体中)
报文信息转换器 报文两个 一个是请求报文 一个是响应报文,从浏览器发送到服务器就是request对象 把请求报文转换成一个java中的对象
浏览器只能接受响应报文,将java对象转换为响应报文
HttpMessageConverter,报文信息转换器,将请求报文转换为Java对象,或将Java对象转 换为响应报文
HttpMessageConverter提供了两个注解和两个类型:@RequestBody将当前请求报文中的请求体转换为java数据
@ResponseBody将java对象转化为响应体
RequestEntity请求实体,实体可以接受整个报文,没有@ResponseEntity类型 当设置了 将这个对象转换为响应报文
1、@RequestBody
@RequestBody可以获取请求体,需要在控制器方法设置一个形参,使用@RequestBody进 行标识,当 前请求的请求体就会为当前注解所标识的形参赋值
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String requestBody){
try {
System.out.println("requestBody"+ URLDecoder.decode(requestBody,"UTF8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "success";
2、RequestEntity
RequestEntity封装请求报文的一种类型,需要在控制器方法的形参中设置该类型的形参, 当前请求的 请求报文就会赋值给该形参,可以通过getHeaders()获取请求头信息,通过 getBody()获取请求体信息
@RequestMapping("testRequestEntity")
public String testRequestEntity(RequestEntity<String> requestEntity){
// 当前requestEntity表示整个请求报文的信息
System.out.println("请求头:"+requestEntity.getHeaders());
System.out.println("请求体:"+requestEntity.getBody());return "success";
}
<form th:action="@{/testRequestEntity}" method="post" enctype="text/plain">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" name="测试@RequestEntity">
</form>
3、@ResponseBody
还有一种方式响应浏览器数据:response.getwriter().writer()
response.getwriter().print()是什么意思
将当前打印的内容直接作为响应报文的响应体响应到浏览器 所以响应体是什么就在浏览器看到什么
为什么通过转发和重定向能够看到页面因为此时请求所对应的响应的响应体就是一个完整的页面所以才 能看到一个页面
真实开发时,前后端分离,那么往往是前端传一个JSON过来,用RequestBody接受 处理完之后再返回 一个json,返回用的@Response 这两个学会就可
4、SpringMVC处理json(浅析)
springMVC使用什么方式来响应浏览器数据的
加了这个注解@ResponseBody 表示当前方法的返回值就是我们要响应到浏览器的数据
如果响应对象可不可以
返回new User()只能返回字符串一个文本 不能一个对象 因为浏览器不认识java对象 浏览器不知道你 服务器用的什么语言 http协议统一规范 和浏览器编程语言服务器语言没有关系
只要按照请求报文响应报文发送请求和响应就好别的不管了
加入jackson依赖 json对象转换
输出内容:{"id":1001,"username":"admin","password":"123","age":23,"sex":"男"}
java对象自动转化为json 控制器方法转化为json
四个步骤:加入依赖、开启mvc注解驱动()
@ResponseBody处理json的步骤:
1>导入jackson的依赖
2>在SpringMVC的核心配置文件中开启mvc的注解驱动,此时在HandlerAdaptor中会自动装配一个消息转换器:MappingJackson2HttpMessageConverter,可以将响应到浏览器的 Java对象转换为Json格 式的字符串
3>在处理器方法上使用@ResponseBody注解进行标识
4>将Java对象直接作为控制器方法的返回值返回,就会自动转换为Json格式的字符串
欢迎大家指点评论~ 点赞+关注⭐⭐⭐