------------------------ SpringMVC------------------
-
- @CookieValue
作用: 用于指定 cookie 名称的值传入控制器方法的参数 属性: value 指定 cookie 的名称 required:是否必须有请求头 |
-
- @RequestHeader
作用: 获取请求头消息 属性: value 指定请求头的名称 required:是否必须有请求头 |
-
- @ModelAttribute
作用:该注解时 springmvc4.x 以后新增的,它可以用于修饰方法和参数 出现在方法上,表示当前方法会在控制器的方法执行前,先执行。它可以修饰没有返 回值的方法,也可以修饰有返回值的方法。 出现在参数上,获取指定的数据给参数赋值 属性: value 用于获取数据的 key。key 可以是 pojo 的属性名称,也可以是 map 的 key 什么时候使用? 当表单提交数据不是完成的实体类数据时,保证没有提交数据的字段使用数据原有 的值或者默认值 @ModelAttribute public void display(User user){ user.setUserName("小花"); System.out.println("=========先执行 display 方法========="+user); } |
-
- @SessionAttribute
作用: 用于会话直接参数的共享(如果多次执行控制器方法,而且需要参数共享) 属性: value:用于指定存入的属性名称 type:用于指定存入的数据类型 <h3>注解@SessionAttribute</h3> <a href="testSession">放入数据</a> <a href="getSession">取出数据</a> ============================================================= @Controller @SessionAttributes(value = {"userName","age"},types = {String.class,Integer.class}) public class RestfulControllerDemo { /** * 把数据存入 sessionattribute 中 * @param model Model 是 spring 提供的一个接口,该接口有一个实现类 ExtendedModelMap,该类继承了 ModelMap * ,而 ModelMap 就是 LinkedHashMap 的子类 * @return */ @RequestMapping("/testSession") public String testSession(Model model){ model.addAttribute("userName","博道 IT"); model.addAttribute("age",2); return "success"; } /** * 获取 sessionAttribute 中的值 * @param map * @return */ @RequestMapping("/getSession") public String getSession(ModelMap map){ System.out.println(map.get("userName")); System.out.println(map.get("age")); return "success"; } |
- 响应数据和视图
4.1 返回字符串结果
控制器方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址 |
4.2 无返回值 void
@Controller public class ResultController { @RequestMapping("/testResult") public void testReturnMethod(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //请求分派转向页面 request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request,response); //重定向是无法访问/WEB-INF 目录下的资源的,可以访问 web 根目录下的资源 response.sendRedirect(""); } } |
4.3 ModelAndView
ModelAndView 是 SpringMVC 提供的一个对象,该对象也可以用作控制器方法的返回值, 该对象中有两个方法: public ModelAndView testMav(){ ModelAndView mav=new ModelAndView(); //指定响应的数据 mav.addObject("name","zhangsan"); mav.addObject("age",22); //指定要跳转页面的逻辑视图名称 mav.setViewName("success"); return mav; } 在页面中,可以通过 EL 表达式获取值,实际上 ModelAndView 默认也是采用的请求分派进行资源的跳转。 <h2>ModelAndView</h2> 姓名:${name},年龄:${age} |
4.4 重定向和请求分派
1 如果使用了 forward,则路径必须写成实际视图 URL,不能写逻辑视图名 它相当于: request.getRequestDispatcher("/WEB[1]INF/pages/success.jsp").forward(request,response); 使用请求分派,既可以转发到 jsp,也可以转发到控制器。 //请求分派 @RequestMapping("/testForward") public String testForward(HttpServletRequest request){ //指定响应的数据 request.setAttribute("name","小明"); request.setAttribute("age",26); return "forward:/WEB-INF/pages/success.jsp"; }
* 不能位于/WEB-INF/目录下,否则无法找到 //重定向 @RequestMapping("/testRedirect") public String testRedirect(){ return "redirect:reset.jsp"; } |
来源:oschina
链接:https://my.oschina.net/u/4244602/blog/3196115