SpringMVC(三)@RequestMapping请求路径与Controller返回值

    通过 RequestMapping 注解可以定义不同的处理器映射规则。
  1. URL路径映射
@RequestMapping( value= "/item") @RequestMapping("/item
value 的值是数组,可以将多个 url 映射到同一个方法

  1. 窄化请求映射
class 上添加 @RequestMapping(url) 指定通用请求前缀  限制此类下的所有方法请求 url 必须以请求前缀开头,通过此方法对 url 进行分类管理。

如下:
@RequestMapping 放在类名上边,设置请求前缀
@Controller
@ RequestMapping ("/item")

方法名上边设置请求映射 url
@RequestMapping 放在方法名上边,如下:
@RequestMapping("/queryItem ")

访问地址为: /item/queryItem


  1. 请求方法限定
  • 限定GET方法
@RequestMapping (method = RequestMethod. GET )

如果通过 Post 访问则报错:
HTTP Status 405 - Request method 'POST' not supported

例如:
@RequestMapping(value="/editItem",method=RequestMethod.GET)
  • 限定POST方法

@RequestMapping (method = RequestMethod. POST )

如果通过 Post 访问则报错:
HTTP Status 405 - Request method 'GET' not supported

  • GETPOST都可以
@RequestMapping (method={RequestMethod.GET,RequestMetho       

  
------------------------------------------------------------------------------------------  分割线

controller 方法返回值
  1. 返回ModelAndView
controller 方法中定义 ModelAndView 对象并返回,对象中可添加 model 数据、指定 view

  1. 返回void
          controller 方法形参上可以定义 request response ,使用 request response 指定响应结果:
1 、使用 request 转向页面,如下:
request.getRequestDispatcher(" 页面路径 ").forward(request, response);

2 、也可以通过 response 页面重定向:
response.sendRedirect("url")

3 、也可以通过 response 指定响应结果,例如响应 json 数据如下:
response.setCharacterEncoding("utf-8");
response.setContentType("application/json;charset=utf-8");
response.getWriter().write("json串");

默认情况下,访问的是视图解析器的前缀+请求名称+后缀

  1. 返回字符串
    1. 逻辑视图名

controller 方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
// 指定逻辑视图名,经过视图解析器解析为 jsp 物理路径: /WEB-INF/ jsp /item/editItem.jsp
return  "item/editItem" ;

  1. Redirect重定向
Contrller 方法返回结果重定向到一个 url 地址,如下商品修改提交后重定向到商品查询方法,参数无法带到商品查询方法中。
// 重定向到 queryItem.action 地址 ,request 无法带过去
return  "redirect:/queryItem.action" ;


redirect 方式相当于 “response.sendRedirect()” 转发后浏览器的地址栏变为转发后的地址,因为转发即执行了一个新的 request response
由于新发起一个 request 原来的参数在转发时就不能传递到下一个 url ,如果要传参数可以 /item/queryItem.action 后边加参数,如下:
/item/queryItem?...&…..

如果想携带model数据,必须使用它的一个子类 model下的xxxxx类
注意:不使用 视图解析器的前缀+请求名称+后缀

注意:如果是重定向到不同类的前面必须加"/",否则会重定向的位置出错!!


  1. forward转发
controller 方法执行后继续执行另一个 controller 方法,如下商品修改提交后转向到商品修改页面,修改商品的 id 参数可以带到商品修改方法中。
// 结果转发到 editItem.action request 可以带过去
return  "forward:editItem.action" ;

forward 方式相当于 “request.getRequestDispatcher().forward(request,response)” ,转发后浏览器地址栏还是原来的地址。转发并没有执行新的 request response ,而是和转发前的请求共用一个 request response 。所以转发前请求的参数在转发后仍然可以读取到。

注意:不使用 视图解析器的前缀+请求名称+后缀



  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值