springMVC 常见功能

303 阅读3分钟

这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战

1. SpingMvc中的控制器的注解一般用那个,有没有别的注解可以替代?

  1. 一般使用@Controller注解标识控制器。
  2. 也可以使用@RestController注解替代@Controller注解,@RestController相当于@ResponseBody+@Controller,表示控制器中所有的方法都返回JSON格式数据,一般不使用其他注解标识控制器。

2. 如果在拦截请求中,想拦截get方式提交的方法,怎么配置?

  • 可以在@RequestMapping注解里面加上method=RequestMethod.GET。
@RequestMapping(value="/toLogin",method = RequestMethod.GET)
public ModelAndView toLogin(){}
  • 可以使用@GetMapping注解。
@GetMapping(value="/toLogin")
public ModelAndView toLogin(){}

3. 怎样在控制器方法里面得到request或者session?

直接在控制器方法的形参中声明request,session,SpringMvc就会自动把它们注入。

@RequestMapping("/login")
public ModelAndView login(HttpServletRequest request, HttpSession session){}

4. 如果想在拦截的方法里面得到从前台传入的参数,怎么得到?

直接在控制器方法的形参里面声明这个参数就可以,但名字必须和传过来的参数名称一样,否则参数映射失败。
下面方法形参中的userId,就会接收从前端传来参数名称为userId的值。

@RequestMapping("/deleteUser")
public void deleteUser(Long userId){
    //删除用户操作...
}

5. 前台传入多个参数,并且这些参数都是一个对象的属性,怎么进行参数绑定?

直接在控制器方法的形参里面声明这个参数就可以,SpringMvc就会自动会请求参数赋值到这个对象的属性中。
下面方法形参中的user用来接收从前端传来的多个参数,参数名称需要和User实体类属性名称一致。

@RequestMapping("/saveUser")
public void saveUser(User user){
    //保存用户操作...
}
@Data
public class User {
    private Long userId;
    private String username;
    private String password;
    //...
}

6.SpringMVC用什么对象从后台向前台传递数据的?

  • 使用Map、Model和ModelMap的方式,这种方式存储的数据是在request域中

**

@RequestMapping("/getUser")
public String getUser(Map<String,Object> map,Model model,ModelMap modelMap){
    //1.放在map里  
    map.put("name", "xq");
    //2.放在model里,一般是使用这个
    model.addAttribute("habbit", "Play");
    //3.放在modelMap中 
    modelMap.addAttribute("city", "gd");
    modelMap.put("gender", "male");
    return "userDetail";
}
  • 使用request的方式
@RequestMapping("/getUser")
public String getUser(Map<String,Object> map,Model model,ModelMap modelMap,HttpServletRequest request){
    //放在request里  
    request.setAttribute("user", userService.getUser());
    return "userDetail";
}
  1. 使用ModelAndView
@RequestMapping("/getUser")  
public ModelAndView getUser(ModelAndView modelAndView) {
    mav.addObject("user", userService.getUser());  
    mav.setViewName("userDetail");  
    return modelAndView;  
}  

7.怎么样把ModelMap里面的数据放入session里面?

在类上添加@SessionAttributes注解将指定的Model数据存储到session中。

  • @SessionAttributes
  1. 默认情况下Spring MVC将模型中的数据存储到request域中。当一个请求结束后,数据就失效了。如果要跨页面使用。那么需要使用到session。而@SessionAttributes注解就可以使得模型中的数据存储一份到session域中。
  2. @SessionAttributes只能定义在Class,interface enum上,作用是将指定的Model中的键值对添加至session中,方便在一个会话中使用。
  • @SessionAttributes参数
  1. names:这是一个字符串数组。里面应写需要存储到session中数据的名称。
  2. types:根据指定参数的类型,将模型中对应类型的参数存储到session中。
  3. value:其实和上面的names是一样的。
@SessionAttributes(value={"names"},types={Integer.class})
@Controller
public class session{

    @RequestMapping("/session")
    public String session(Model model){
        model.addAttributes("names", Arrays.asList("caoyc","zhh","cjx"));
        model.addAttributes("age", 22);
        return "/session";
    }
}

在上面代码中,在类上添加@SessionAttributes注解,并指定将names名称的Model数据存储到session域中,以及将Integer类型的Model数据存储到session域中。