@RequestMapping注解是每一个SpringMVC控制层的方法必须带有的注解,配置该注解可帮助SpringMVC映射器找到相应的执行方法。在@RequestMapping注解中有以下几个属性:
value:该属性指定了URL路径映射,可以配置到方法上,也可以配置到类上,当配置到类上时,URL路径为 类上的value+具体某个方法上的value。当一个类中所有方法都URL路径都有共同路径时可以把这段共同路径配置到类上。
method:该属性指定了客户端请求的方法,如@RequestMapping(method = RequestMethod.POST)(限定post请求方法访问)。如果通过GET访问则报错:HTTP Status 405 - Request method 'GET' not supported。
Controller方法返回值
1.void类型:大多用于ajax请求,因为ajax不用服务器跳转页面,只需要数据,我们只需通过在参数上绑定默认的response参数调用getwrite方法返回数据即可。也可用request和response实现页面跳转和转发。
2.String类型:controller方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。我们还可以在返回值中设定转发和重定向
重定向
@RequestMapping("updateItem")
public String updateItemById(Item item) {
// 更新商品
this.itemService.updateItemById(item);
// 修改商品成功后,重定向到商品编辑页面
// 重定向后浏览器地址栏变更为重定向的地址,
// 重定向相当于执行了新的request和response,所以之前的请求参数都会丢失
// 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数
return "redirect:/itemEdit.action?itemId=" + item.getId();
}
转发
@RequestMapping("updateItem")
public String updateItemById(Item item) {
// 更新商品
this.itemService.updateItemById(item);
// 修改商品成功后,重定向到商品编辑页面
// 重定向后浏览器地址栏变更为重定向的地址,
// 重定向相当于执行了新的request和response,所以之前的请求参数都会丢失
// 如果要指定请求参数,需要在重定向的url后面添加 ?itemId=1 这样的请求参数
// return "redirect:/itemEdit.action?itemId=" + item.getId();
// 修改商品成功后,继续执行另一个方法
// 使用转发的方式实现。转发后浏览器地址栏还是原来的请求地址,
// 转发并没有执行新的request和response,所以之前的请求参数都存在
return "forward:/itemEdit.action";
}
3.ModelAndView:类中封装了request域和显示页面的物理地址,直接返回ModelAndView类对象,Spring可以从中解析数据和显示界面物理地址。缺点是把数据和页面放到了一起,耦合性较大。
@RequestMapping("/find.action")
public ModelAndView finduser(String username, HttpServletRequest request, HttpServletResponse response) throws ClassNotFoundException, SQLException {
//从service层获取数据
User u = ud.finduser(username);
ModelAndView mav = new ModelAndView();
//把数据添加到request域
mav.addObject("user",u);
//设置转发页面
mav.setViewName("/WEB-INF/displayuser.jsp");
return mav;
}