SpringMvc(二)()

  本篇文章为你整理了SpringMvc(二)()的详细内容,包含有springmvc二级联动 SpringMvc(二),希望能帮助你了解 SpringMvc(二)。

  请求参数处理,不使用参数注解:
 

  1.如果请求参数名和请求处理的形参名一致,springMvc 框架会自动将你的请求参数名对应的参数值,绑定到请求方法的形参中,方法内就可以直接使用,不用手动获取;

  2.如果你的请求没有携带参数,不会报错,只不过,请求处理方法的形参值都是null或其他值,如果请求处理方法形参是一个实体参数,原理和单个类型参数一致(只要请求参数名和实体名一致也可以自动绑定);

  测试不使用 @RequestParam 注解

  

@RequestMapping("/testSpringMvcNoRequestParam")

 

  public String testSpringMvcNoRequestParam( String userId,String userName){

   System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s------",userId,userName));

   return "success";

  

 

  测试 请求不带参数

  测试 请求带参数

  1.1.3 使用 @RequestParam 注解

  @RequestParam 只能写在请求方法的形参上;
 

  required = false 设置参数不是必传;
 

  defaultValue 默认值;

  1.如果请求处理方法,形参前,只增加了此注解,没有指定任何属性:

  作用:当前形参必传,且参数名与形参名必须一致,如果不一致,参数绑定失败,请求直接报400错误,提示你的参数没有提供;

  
作用:请求的参数名必须和value属性指定的名称一致,此value属性可以省略(只写 请求参数别名时,如果有其他的属性,value属性必须指定);

  
3.如果要取消每个参数的必传校验,可以给此注解增加属性 required=false(默认是true,必传),参数可以不传,不需要参数值的绑定;

  4.如果某个参数必传,但是为了防止请求没有携带此参数,可以通过指定属性defaultValue增加默认值,如果调用当前请求方法处理,没有提供参数,自动使用默认值,绑定到方法的对应形参中;

  测试

  

@RequestMapping("/testSpringMvcRequestParam")

 

  public String testSpringMvcRequestParam(@RequestParam("uid") String userId,

   @RequestParam(value = "uname",required = false,defaultValue = "KH96-mvc") String userName,

   @RequestParam String userPwd){

   System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s,uPwd:%s------",userId,userName,userPwd));

   return "success";

  

 

  测试结果

  1.2 请求头参数 @RequestHeader

  请求头参数@RequestHeader:

  处理请求头携带参数;

  作用:从请求头中获取参数,根据别名或者参数形参名,将请求头对应参数值,绑定到请求处理方法的形参中,直接使用,用法跟@RequestParam类似,也可以指定是否必传,默认值;

  测试

  

@RequestMapping("/testSpringMvcNoRequestHeader")

 

  public String testSpringMvcNoRequestHeader(@RequestHeader(value = "token",required = false,defaultValue = "KH96_mvc") String token){

   System.out.println(String.format("------ 请求头参数:token :%s ------",token));

   return "success";

  

 

  测试结果

  1.3 Cookie 参数 @CookieValue

  @CookieValue:

  从cookie中获取参数,根据别名或者参数形参名,将请求头对应参数值,绑定到请求处理方法的形参中,直接使用,用法跟@RequestParam,@RequestHeader类似,也可以指定是否必传,默认值;

  测试

  

@RequestMapping("/testSpringMvcCookieValue")

 

  public String testSpringMvcCookieValue(@CookieValue("JSESSIONID") String sessionId){

   System.out.println(String.format("------ 请求cookie参数:JSESSIONID :%s ------",sessionId));

   return "success";

  

 

  测试结果:

  1.4 实体参数

  请求参数处理 实体参数:
 

  自动将请求参数自动将实体的属性名与形参绑定,原理和单个参数类型一致;

  测试

  

@RequestMapping("/testSpringMvcBeanParam")

 

  public String testSpringMvcBeanParam(UserVO userVO){

   System.out.println(String.format("------ 请求实体参数:userVO :%s ------",userVO));

   return "success";

  

 

  测试结果

  1.5 原生servlet的API接口作为请求参数

  用法和javaWeb截断学习的用法完全一致;

  

@RequestMapping("testSpringMvcServletAPI")

 

  public void testSpringMvcServletAIP(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException, ServletException {

   //获取请求方式

   System.out.println(String.format("------ 请求方式:%s ------",request.getMethod()));

   //获取请求参数

   System.out.println(String.format("------ 请求参数:%s ------",request.getParameter("userTel")));

   //手动转发

   // request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response);

   //获取session对象

   //手动添加参数

   HttpSession sessionHad = request.getSession();

   //sessionHad.setAttribute("userTel",request.getParameter("userTel"));

   //方式2;直接将HttpSession对象声明在请求处理方法的形参中,可以自动获取 session

   //重定向到

   // response.sendRedirect("http://www.baidu.com");

  

 

  2、响应数据处理

  2.1 ModelAndView

  ModelAndView 的数据模型放在request的作用域中,视图模型,放在request.getRequestDispatcher(前缀+视图名字+后缀);

  结论:SpringMVC框架的前端核心控制器,会自动将返回的ModelAndView对象中的数据模型,添加到request作用域中使用内部转发方式,转发到目标视图;

  测试

  

@RequestMapping("/testSpringMvcModelAndView")

 

  public ModelAndView testSpringMvcModelAndView(String userEmail){

   //创建一个 ModelAndView 对象

   ModelAndView mav = new ModelAndView();

   //添加模型数据

   mav.addObject("uemail",userEmail);

   //可以添加多个模型数据,内部使用ModelMap集合存放的

   mav.addObject("uage",18);

   //设置目标视图

   mav.setViewName("ok");

   //返回 ModelAndView 对象

   return mav;

  

 

  测试结果

  2.2 Map

  要求:使用map返回模型数据,必须将map声明在请求处理方法的形参中,定义在方法的内部是无效的;

  总结:

  1.springMVC底层在调用目标请求处理方法前,会自动创建一个Model接口的隐含对象作为模型数据的存储对象,如果目标请求处理方法定义了一个map接口,自动将隐含对象使用引用传递方式传递到目标请求处理方法中,方法体内就可以直接添加模型数据;

  2.SpringMvc底层,在调用完你的请求处理方法后,不管返回什么类型,都会被转换为一个ModelAndView对象;

  测试

  

@RequestMapping("/testSpringMvcMap")

 

  public String testSpringMvcMap(String userEmail, Map String,Object map){

   //输出map的目标类型

   System.out.println(map.getClass().getName());

   //org.springframework.validation.support.BindingAwareModelMap

   //添加模型数据

   map.put("uemail",userEmail);

   //返回目标视图名称

   return "ok";

  

 

  测试结果

  2.3 Model

  Model,可以添加模型数据;
 

  必须将 Model 声明在请求处理方法的形参中,定义在方法的内部是无效的,用法跟Map 一致;

  测试

  

@RequestMapping("/testSpringMvcModel")

 

  public String testSpringMvcModel(String userEmail, Model model){

   //添加模型数据

   model.addAttribute("uemail",userEmail);

   //返回目标视图名称

   return "ok";

  

 

  测试结果

  2.4 forward: 转发 和 redirect: 重定向

  2.4.1forward 转发

  只需要在返回的视图名称前,增加一个前缀:forward 即可,直接转发到目标资源;
 

  当前请求处理方法中的模型对象可以带走;

  

@RequestMapping("/testSpringMvcForward")

 

  public String testSpringMvcForward(Map String,Object map){

   //转发页面跳转

   //return "forward:/forward.jsp";

   //转发到其他请求中

   //return "forward:/testSpringMvcModel?userEmail=123@qq.com";

   //自定义转发,携带模型数据

   map.put("uaddr","nj_wd_kh96");

   return "forward:/testSpringMvcModel?userEmail=123@qq.com";

  

 

  2.4.2 redirect 重定向

  只需要在返回的视图名称前,增加一个前缀:redirect 即可,不做视图解析器,直接重定向

  注意,重定向,当前请求处理方法中的模型对象不能带走

  

@RequestMapping("/testSpringMvcRedirect")

 

  public String testSpringMvcRedirect(){

   //重定向页面跳转

   //return "redirect:/redirect.jsp";

   //重定向 可以重定向到 其他请求中

   return "redirect:/testSpringMvcModel?userEmail=123@qq.com";

  

 

  2.5 @ResponseBody

  返回JSON数据;

  注意:返回不需要手动转换为json字符串,直接返回对象;

  @ResponseBody 将返回请求处理方法返回的源对象数据,直接转换为json格式字符串,返回,不走视图解析;

  注意:必须增加Jackson依赖的jar包,否者报错,且必须要增加注解扫描 mvc:annotation-driven /mvc:annotation-driven 才可以;

  位置:可以写在请求处理方法上或者类上,写在类上,就是对当前类中所有请求处理方法生效,写在方法上,只有对当前方法生效;

  2.5.1 jar包

  

 !-- JSON begin -- 

 

   !--jackson--

   dependency

   groupId com.fasterxml.jackson.core /groupId

   artifactId jackson-core /artifactId

   version 2.8.4 /version

   /dependency

   dependency

   groupId com.fasterxml.jackson.core /groupId

   artifactId jackson-databind /artifactId

   version 2.8.4 /version

   /dependency

   dependency

   groupId com.fasterxml.jackson.core /groupId

   artifactId jackson-annotations /artifactId

   version 2.8.4 /version

   /dependency

   !--jackson--

   !-- JSON end --

  

 

  2.5.2 配置

  

 beans xmlns=

 

   xmlns:mvc="http://www.springframework.org/schema/mvc"

   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd

   !-- 开启MVC 的注解扫描 --

   mvc:annotation-driven /mvc:annotation-driven

   /beans

  

 

  2.5.3 测试

  

@RequestMapping("/testSpringMvcJson")

 

  @ResponseBody

  public UserVO testSpringMvcJson(){

   //模拟获取去用户详情对象

   UserVO userVO = new UserVO();

   userVO.setUserId("KH96_01");

   userVO.setUserName("GKC");

   userVO.setUserPwd("123");

   return userVO;

  

 

  测试结果

  以上就是SpringMvc(二)()的详细内容,想要了解更多 SpringMvc(二)的内容,请持续关注盛行IT软件开发工作室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: