Controller层注解
@Controller: 控制器(注入服务) @Service: 服务(注入dao) @Repository:(实现dao访问) @Component: 以上4个注解都是实例化bean的功能,相当于配置文件中的<bean id="" class=""/>,后期spring可能会扩展其他功能。
@RequestMapping:
url映射
定义controller方法对应的url,进行处理器映射使用。
窄化请求映射
在controller上加上该注解,方便对url分类管理。
限制http请求方法
出于安全性考虑,对http的链接进行方法限制。
如果限制请求为post方法,进行get请求就会报错:
@RequestMapping(value = "/editItems", method = { RequestMethod.POST,RequestMethod.GET })
Controller方法的返回值
1、返回ModelAndView
需要方法结束时,定义ModelAndView,将model和view分别进行设置。
ModelAndView modelAndView = new ModelAndView(); // 相当 于request的setAttribut,在jsp页面中通过itemsList取数据 modelAndView.addObject("itemsList", itemsList); // 指定视图 // 如果在视图解析器中没有配置jsp路径的前缀和jsp路径的后缀,则为 modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); // 配置了jsp路径的前后缀,则为 modelAndView.setViewName("items/itemsList");
2、返回string
如果controller方法返回string,
(1)表示返回逻辑视图名。
真正视图(jsp路径)=前缀+逻辑视图名+后缀
@RequestMapping(value = "/editItems", method = { RequestMethod.POST,RequestMethod.GET }) public String editItems(Model model)throws Exception { // 调用service根据商品id查询商品信息 ItemsCustom itemsCustom = itemsService.findItemsById(1); model.addAttribute("items", itemsCustom); return "items/editItems"; }
(2)redirect重定向
商品修改提交后,重定向到商品查询列表。
redirect重定向特点:浏览器地址栏中的url会变化。修改提交的request数据无法传到重定向的地址。因为重定向是发送了两次请求(request无法共享)
return "redirect:/items/queryItems.action";
(3)forward页面转发
通过forward进行页面转发,浏览器地址栏url不变,request可以共享。
return "forward:/items/queryItems.action";
3、返回void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
(1)使用request转向页面,如下:
request.getRequestDispatcher("页面路径").forward(request, response);
request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response);
(2)也可以通过response页面重定向:
response.sendRedirect("url");
response.sendRedirect("/WEB-INF/jsp/items/itemsList.jsp");
也可以通过response指定响应结果,例如响应json数据如下:
response.setCharacterEncoding("utf-8"); response.setContentType("application/json;charset=utf-8"); response.getWriter().write("json串");