springMVC获取请求参数--给出响应数据

01-SpringMVC的数据响应-数据响应方式
响应数据的两种分类?
页面跳转:
响应字符串:

02-SpringMVC的数据响应-页面跳转-返回字符串形式
/直接返回字符串,那么会跳转指定的视图/
@RequestMapping("/method1")
public String test1() {
return “hello”;
}

03-SpringMVC的数据响应-页面跳转-返回ModelAndView形式1
ModelAndView如何设置视图?
setViewName(String viewName)
ModelAndView如何设置数据?
addObject(String key,Object value)
@RequestMapping("/method3")
public ModelAndView test3(){
// 自定义一个ModelAndView对象
ModelAndView mv = new ModelAndView();
// 设置存储的数据
mv.addObject(“username”,“gaoning”);
// 设置跳转的视图 会在我们的内部资源解析中自动的拼接字符串 变为 /jsp/hello.jsp
mv.setViewName(“hello”);
return mv;
}
*************************
明确:
Controller中的方法都是SpringMvc调用的;
因此这些方法的返回值SpringMvc都可以拿到;

SpringMVC拿到目标方法的返回的ModelAndView对象之后:
	1.从ModelAndView对象中取出数据,把这些数据放入到request域中;
	2.从ModelAndView对象中取出视图名称,把请求转发到该视图资源上;

04-SpringMVC的数据响应-页面跳转-返回ModelAndView形式2
public ModelAndView save3(ModelAndView mv){
//mv对象谁来创建并注入?
mv对象是springMVC创建的并注入的
return null;
}

public String save4(Model m){
   //m对象谁来创建?有什么作用?
   由springMVC创建的,封装数据
    return "视图的名称";
}

/可以通过传递ModelAndView的方式,让springMVC帮我们创建ModelAndView对象,然后给对象的视图和数据赋值/
@RequestMapping("/method4")
public ModelAndView test4(ModelAndView mv){
// 设置存储的数据
mv.addObject(“username”,“流年”);
// 设置跳转的视图 会在我们的内部资源解析中自动的拼接字符串 变为 /jsp/hello.jsp
mv.setViewName(“hello”);
return mv;
}

// 返回值为需要跳转的视图,springMVC帮我们创建model对象,用来在request域中传递数据
@RequestMapping("/method5")
public String test5(Model model) {
// 通过传参的方式 让springMVC帮我们创建model对象,我们进行赋值,传递数据
model.addAttribute(“username”,“2019/12/4”);
// 验证model中的数据存放在request域中
// return “redirect:/jsp/hello.jsp”;
return “hello”;
}

********************************
	1.从Model对象中取出数据,把这些数据放入到request域中;
	2.得到方法的返回值,也就是视图名称,转发到对应的视图上;

05-SpringMVC的数据响应-页面跳转-返回ModelAndView3
Controller中如何获取request对象?
// 返回值为需要跳转的视图,springMVC帮我们创建request对象,用request对象在域中存储数据
// 在springMVC框架中不介意使用一些web的Api
@RequestMapping("/method6")
public String test6(HttpServletRequest request) {
request.setAttribute(“username”,“我饿了”);
return “hello”;
}

*************************************
	在使用spingMVC框架时,Controller方法中,大部分情况下,你需要什么东西,只需要在方法的参数列表中声明即可;

06-SpringMVC的数据响应-回写数据-直接回写字符串
Controller中如何获取Response对象?
如何告诉springmvc,不进行视图跳转,把返回的字符串直接响应给浏览器?
需要在方法上加@ResponseBody注解;
@ResponseBody // 配置ResponseBody注解,告诉springMVC回写的数据为字符串,不进行视图跳转
@RequestMapping("/method7")
public String test7() {
return “hello”;
}

07-SpringMVC的数据响应-回写数据-直接回写json格式字符串

08-SpringMVC的数据响应-回写数据-返回对象或集合(了解)
如何告诉springmvc,把方法的返回值转成json字符串响应给浏览器?
1.去spring-mvc.xml中配置处理器适配器;






	2.在Controller的方法上加@ResponseBody

09-SpringMVC的数据响应-回写数据-返回对象或集合2(掌握!!!!!!!!!!!!!!!!!!!!!!!!!!!)
如何替换处理器适配器的配置?
mvc:annotation-driven/:开启mvc的注解驱动;
底层会自动的配置处理器映射器和处理器适配器(就包含了对象转json字符串的转换器)

10-SpringMVC的数据响应-知识要点小结
1) 页面跳转
直接返回字符串
通过ModelAndView对象返回

2) 回写数据
直接返回字符串
HttpServletResponse 对象直接写回数据,HttpServletRequest对象带回数据,Model对象带回数据或者@ResponseBody将字符串数据写回
返回对象或集合
@ResponseBody+mvc:annotation-driven/

11-SpringMVC的请求-获得请求参数-请求参数类型
请求参数分为哪几类?
简单类型:
javaBean对象;
数组;
集合;

12-SpringMVC的请求-获得请求参数-获得基本类型参数
方法的参数名称和请求参数的名称有什么要求?
必须要一致;

***************************
	springMVC调用Controller中的方法时,会自动从request中获取对应名称的参数,传递

13-SpringMVC的请求-获得请求参数-获得POJO类型参数
参数对应的实体类的成员变量名称和请求参数的名称有什么要求?
一致

14-SpringMVC的请求-获得请求参数-获得数组类型参数
数组的名称和请求参数的名称有什么要求?
一致
/*

  • 数组的名称和请求参数的名称要求一致
  • */
    @ResponseBody
    @RequestMapping("/method12")
    public void test12(String[] users) {
    System.out.println(Arrays.toString(users));
    }

/*

  • 参数对应的实体类的成员变量名称和请求参数的名称要求一致
  • */
    @ResponseBody
    @RequestMapping("/method11")
    public void test11(User user) {
    System.out.println(user);
    }

/*获取请求参数时

  • 简单的数据类型参数,传递响应类型的参数即可,springMVC会自动帮我们截取请求的url中的参数的值
  • springMVC调用Controller中的方法时,会自动从request中获取对应名称的参数,传递
  • */
    @ResponseBody
    @RequestMapping("/method10")
    public void test10(String username) {
    System.out.println(username);
    }

15-SpringMVC的请求-获得请求参数-获得集合类型参数1
能不能把集合直接声明到方法的参数位置?
通常情况下不可以

16-SpringMVC的请求-获得请求参数-获得集合类型参数2(了解)
请求参数上需要做什么处理?
在方法的参数上添加了@RequestBody;
如果浏览器传递给服务器的是json字符串,那么需要通过@RequestBody注解,告诉SpringMVC,把json字符串转换成一个对象完成注入

/* alert(person1);
alert(person2);*/

/*
* 全局对象window中有一个内置的对象叫JSON,这个对象可以完成json对象和字符串之间的相互转换:
*   JSON.stringify(JSON对象)就可以把JSON对象转换成字符串;
*
*   JSON.parse(json字符串)就可以把json字符串转换成JSON对象。
*
* */

/*var jsonStr = JSON.stringify(person1);
alert(jsonStr)*/
var jsonObject = JSON.parse(person2);
alert(jsonObject);

17-SpringMVC的请求-获得请求参数-静态资源访问的开启
放行静态资源?
第一种:

		/*:
			只放行当前目录下的资源
		/**
			放行当前目录及其子目录
		
	第二种:
		
		放行所有的静态资源;
		
		
***********************************************
	localhost:8080/js/jquery.js
	是因为在web.xml中,我们配置的DispatcherServlet的访问路径是/,会拦截静态资源
		拦截下来的路径,默认情况下,springMVC都把它当做是一个Controller的方法去处理,但是匹配不到,匹配不到就报错了!
	
	如果我们放行了静态资源:
		我们配置的DispatcherServlet的访问路径是/,会拦截静态资源
			拦截下来的路径,默认情况下,springMVC都把它当做是一个Controller的方法去处理,但是匹配不到,此时,如果匹配不到,springMVC会把这个资源交给tomcat处理;

18-SpringMVC的请求-获得请求参数-配置全局乱码过滤器
在web.xml中配置:

CharacterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
UTF-8



CharacterEncodingFilter
/*

只能解决post请求乱码;

19-SpringMVC的请求-获得请求参数-参数绑定注解@RequestParam
@RequestParam解决的是什么问题?
方法的参数名称和请求的参数名称不一致的问题;
required属性和default属性分别什么意思?
required:
标识当前参数是否必须携带:默认是true;
default:
设置一个默认值,如果浏览器没有携带,则使用这个默认值;

@ResponseBody
@RequestMapping("/method15")
public void test15(@RequestParam(value = “name”,required = false,defaultValue = “张三”) String username) {
System.out.println(username);
}
20-SpringMVC的请求-获得请求参数-Restful风格的参数的获取(了解)
普通形式传递参数?
localhost:8080/user/quick17?username=zhangsan&password=123
restful风格传递参数?
localhost:8080/user/zhangsan

@PathVariable注解的作用?
	在获取请求路径中某个变量的值;

Restful是一种软件架构风格、设计风格,而不是标准,只是提供了一组设计原则和约束条件。
主要用于客户端和服务器交互类的软件,基于这个风格设计的软件可以更简洁,
更有层次,更易于实现缓存机制等。
Restful风格的请求是使用“url+请求方式”表示一次请求目的的,
HTTP 协议里面四个表示操作方式的动词如下:
GET:用于获取资源
POST:用于新建资源
PUT:用于更新资源
DELETE:用于删除资源
例如:
/user/1 GET : 得到 id = 1 的 user
/user/1 DELETE: 删除 id = 1 的 user
/user/1 PUT: 更新 id = 1 的 user
/user POST: 新增 user
上述url地址/user/1中的1就是要获得的请求参数,
在SpringMVC中可以使用占位符进行参数绑定。
地址/user/1可以写成/user/{id},占位符{id}对应的就是1的值。
在业务方法中我们可以使用@PathVariable注解进行占位符的匹配获取工作。
http://localhost:8080/itheima_springmvc1/quick17/zhangsan

21-SpringMVC的请求-获得请求参数-自定义类型转换器
实现自定义转换器的步骤?
1.自定义类,实现Converter接口,重写converte方法
2.在spring-mvc.xml核心配置文件中配置类型转换器:






	3.在mvc:annotation-driven中引用类型转换器
		

22-SpringMVC的请求-获得请求参数-获得Servlet相关API(了解)
想要啥?去参数列表中声明即可;

23-SpringMVC的请求-获得请求参数-获得请求头信息
@RequestHeader注解的作用?
@CookieValue注解的作用?

/使用@CookieValue可以获得指定Cookie的值/
@ResponseBody
@RequestMapping("/method20")
public void test20(@CookieValue(value = “JSESSIONID”,required = false) String jsessionId) {
System.out.println(jsessionId);
}
/使用@RequestHeader可以获得请求头信息,相当于web阶段学习的request.getHeader(name)/
@ResponseBody
@RequestMapping("/method19")
public void test19(@RequestHeader(value = “User-Agent”,required = false) String user_agent) {
System.out.println(user_agent);
}

springMVC获取请求参数--给出响应数据_第1张图片

你可能感兴趣的:(springMVC)