SpringMVC(二)——【数据响应与获得请求数据】

SpringMVC的数据响应方式

(一)页面跳转

1、直接返回字符串

2、通过ModelAndView对象返回

3、向request域存储数据

(二)   回写数据

1、直接返回字符串

2、返回对象或集合

SpringMVC获得请求数据

获得请求参数

(1)获得基本类型参数

(2)获得POJO类型参数

(3)获得数组类型参数

(4)获得集合类型的参数

请求数据乱码问题

参数绑定注解@requestParam

获得Restful风格的参数

自定义类型转换器

获得Servlet相关API

获得请求头

@RequestHeader

@CookieValue

文件上传

文件上传客户端三要素

文件上传原理

单文件上传步骤

多文件上传实现


SpringMVC的数据响应方式

=================

(一)页面跳转


1、直接返回字符串

直接返回字符串:此种方式会将返回的字符串与视图解析器的前后缀拼接后跳转。

 返回带有前缀的字符串:

转发: forward:/WEB-INF/views/index.jsp

重定向: redirect:/index.jsp

2、通过ModelAndView对象返回

@RequestMapping(value=“/quick2”)

public ModelAndView save2(){

/*

Model:模型 作用封装数据

View:视图 作用展示数据

*/

ModelAndView modelAndView = new ModelAndView();

//设置模型数据

modelAndView.addObject(“username”,“longdi”);

//设置视图名称

modelAndView.setViewName(“success”);

return modelAndView;

}

@RequestMapping(value=“/quick3”)

public ModelAndView save3(ModelAndView modelAndView){

modelAndView.addObject(“username”,“longdi”);

modelAndView.setViewName(“success”);

return modelAndView;

}

//和quick2效果一样,下面这个是分开的(字符串和视图)

@RequestMapping(value=“/quick4”)

public String save4(Model model){

model.addAttribute(“username”,“龍弟”);

return “success”;

}

3、向request域存储数据


在进行转发时,往往要向request域中存储数据,在jsp页面中显示,那么Controller中怎样向request域中存储数据呢?

(1)通过SpringMVC框架注入的request对象setAttribute()方法设置

@RequestMapping(value=“/quick5”)

public String save5(HttpServletRequest request){

request.setAttribute(“username”,“龍弟”);

return “success”;

}

(2)通过ModelAndView的addObject()方法设置

@RequestMapping(value=“/quick3”)

public ModelAndView save3(ModelAndView modelAndView){

modelAndView.addObject(“username”,“longdi”);

modelAndView.setViewName(“success”);

return modelAndView;

}

(二)   回写数据


1、直接返回字符串

Web基础阶段,客户端访问服务器端,如果想直接回写字符串作为响应体返回的话,只需要使用response.getWriter().print(“hello world”)即可,那么在Controller中想直接回写字符串该怎样呢?

(1)通过SpringMVC框架注入的response对象,使用response.getWriter().print(“hello world”)回写数据,此时不需要视图跳转,业务方法返回值为void。

@RequestMapping(value=“/quick6”)

public void save6(HttpServletResponse response) throws IOException {

response.getWriter().print(“hello longdi”);

}

(2)将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。

@RequestMapping(value=“/quick7”)

@ResponseBody //告知SpringMVC框架 不进行视图跳转 直接进行数据响应

public String save7() throws IOException {

return “hello longdi”;

}

在异步项目中,客户端与服务器端往往要进行json格式字符串交互,此时我们可以手动拼接json字符串返回。

@RequestMapping(value=“/quick8”)

@ResponseBody

public String save8() throws IOException {

return “{“username”:“zhangsan”,“age”:18}”;

}

上述方式手动拼接json格式字符串的方式很麻烦,开发中往往要将复杂的java对象转换成json格式的字符串,我们可以使用web阶段学习过的json转换工具jackson进行转换,导入jackson坐标。

com.fasterxml.jackson.core

jackson-core

2.9.0

com.fasterxml.jackson.core

jackson-databind

2.9.0

com.fasterxml.jackson.core

jackson-annotations

2.9.0

通过jackson转换json格式字符串,回写字符串。

@RequestMapping(value=“/quick9”)

@ResponseBody

public String save9() throws IOException {

User user = new User();

user.setUsername(“lisi”);

user.setAge(30);

//使用json的转换工具将对象转换成json格式字符串在返回

ObjectMapper objectMapper = new ObjectMapper();

String json = objectMapper.writeValueAsString(user);

return json;

}

2、返回对象或集合

通过SpringMVC帮助我们对对象或集合进行json字符串的转换并回写,为处理器适配器配置消息转换参数,指定使用jackson进行对象或集合的转换,因此需要在spring-mvc.xml中进行如下配置:

@RequestMapping(value=“/quick10”)

@ResponseBody

//期望SpringMVC自动将User转换成json格式的字符串

public User save10() throws IOException {

User user = new User();

user.setUsername(“lisi2”);

user.setAge(32);

return user;

}

在方法上添加@ResponseBody就可以返回json格式的字符串,但是这样配置比较麻烦,配置的代码比较多,因此,我们可以使用mvc的注解驱动代替上述配置。

<mvc:annotation-driven / >

在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。使用mvc:annotation-driven自动加载RequestMappingHandlerMapping (处理映射器)和RequestMappingHandlerAdapter(处理适配器),可用在Spring-xml.xml配置文件中使用替代注解处理器和适配器的配置。 同时使用默认底层就会集成jackson进行对象或集合的json格式字符串的转换

SpringMVC获得请求数据

===============

获得请求参数


客户端请求参数的格式是: name=value&name=value… …

服务器端要获得请求的参数,有时还需要进行数据的封装,SpringMVC可以接收如下类型的参数:

(1)获得基本类型参数

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配。

http://localhost:8080/quick11?username=zhangsan&age=12

@RequestMapping(value=“/quick11”)

@ResponseBody

public void save11(String username,int age) throws IOException {

System.out.println(username);

System.out.println(age);

}

(2)获得POJO类型参数

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配。

http://localhost:8080/quick12?username=zhangsan&age=12

public class User {

private String username;

private int age;

public String getUsername() {

return username;

}

public void setUsername(String username) {

this.username = username;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “User{” +

“username='” + username + ‘’’ +

“, age=” + age +

‘}’;

}

}

@RequestMapping(value=“/quick12”)

@ResponseBody

public void save12(User user) throws IOException {

System.out.println(user);

}

(3)获得数组类型参数

Controller中的业务方法数组名称与请求参数的name一致,参数值会自动映射匹配。

http://localhost:8080/quick13?username=zhangsan&age=12

@RequestMapping(value=“/quick13”)

@ResponseBody

public void save13(String[] strs) throws IOException {

System.out.println(Arrays.asList(strs));

}

(4)获得集合类型的参数

获得集合参数时,要将集合参数包装到一个POJO中才可以。

<%–表明是第几个User对象的username age–%>





public class VO {

private List userList;

public List getUserList() {

return userList;

}

public void setUserList(List userList) {

this.userList = userList;

}

@Override

public String toString() {

return “VO{” +

“userList=” + userList +

‘}’;

}

@RequestMapping(value=“/quick14”)

@ResponseBody

public void save14(VO vo) throws IOException {

System.out.println(vo);

}

当使用ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接收集合数据而无需使用POJO进行包装。

@RequestMapping(value=“/quick15”)

@ResponseBody

public void save15(@RequestBody List userList) throws IOException {

System.out.println(userList);

}

注意:通过谷歌开发者工具抓包发现,没有加载到jquery文件,原因是SpringMVC的前端控制

器DispatcherServlet的url-pattern配置的是/,代表对所有的资源都进行过滤操作,我们可以通过以下两种方式指定放行静态资源:

1、在spring-mvc.xml配置文件中指定放行的资源**<mvc :resources mapping=" /js/**“location=”/js/"/>**

2、使用****标签

请求数据乱码问题


当post请求时,数据会出现乱码,我们可以设置一个过滤器来进行编码的过滤。

CharacterEncodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

CharacterEncodingFilter

/*

参数绑定注解@requestParam


当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定。


@RequestMapping(value=“/quick16”)

@ResponseBody

public void save16(@RequestParam(“name”) String username) throws IOException {

System.out.println(username);

}

注解@RequestParam还有如下参数可以使用:

value: 与请求参数名称

required:此在指定的请求参数是否必须包括,默认是true,提交时如果没有此参数则报错

defaultValue:当没有指定请求参数时,则使用指定的默认值赋值

@RequestMapping(value=“/quick16”)

@ResponseBody

public void save16(@RequestParam(value=“name”,required = false,defaultValue = “longdi”) String username) throws IOException {

System.out.println(username);

}
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)

img

《MySql面试专题》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySql性能优化的21个最佳实践》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

《MySQL高级知识笔记》

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

全网火爆MySql 开源笔记,图文并茂易上手,阿里P8都说好

关注我,点赞本文给更多有需要的人
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
外链图片转存中…(img-tJiucX5c-1713330767409)]

《MySql性能优化的21个最佳实践》

[外链图片转存中…(img-ONI5wmBo-1713330767409)]

[外链图片转存中…(img-nKBjDp9R-1713330767409)]

[外链图片转存中…(img-y3PiD8bv-1713330767410)]

[外链图片转存中…(img-x0hCnI59-1713330767410)]

《MySQL高级知识笔记》

[外链图片转存中…(img-nafHR2BU-1713330767410)]

[外链图片转存中…(img-Jp9eLwE2-1713330767410)]

[外链图片转存中…(img-cHCVOO5q-1713330767411)]

[外链图片转存中…(img-QFs8L5DZ-1713330767411)]

[外链图片转存中…(img-gPtx8rac-1713330767411)]

[外链图片转存中…(img-SallNB6s-1713330767411)]

[外链图片转存中…(img-N4s95HCz-1713330767411)]

[外链图片转存中…(img-FU6RTlRC-1713330767412)]

[外链图片转存中…(img-17FxPuKV-1713330767412)]

[外链图片转存中…(img-BCgjDFeF-1713330767412)]

文中展示的资料包括:**《MySql思维导图》《MySql核心笔记》《MySql调优笔记》《MySql面试专题》《MySql性能优化的21个最佳实践》《MySq高级知识笔记》**如下图

[外链图片转存中…(img-kMgdz00M-1713330767412)]

关注我,点赞本文给更多有需要的人
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值