通过
RequestMapping
注解可以定义不同的处理器映射规则。
- URL路径映射
@RequestMapping(
value=
"/item")
或
@RequestMapping("/item
)
value
的值是数组,可以将多个
url
映射到同一个方法
- 窄化请求映射
在
class
上添加
@RequestMapping(url)
指定通用请求前缀,
限制此类下的所有方法请求
url
必须以请求前缀开头,通过此方法对
url
进行分类管理。
如下:
@RequestMapping
放在类名上边,设置请求前缀
@Controller
@
RequestMapping
("/item")
方法名上边设置请求映射
url
:
@RequestMapping
放在方法名上边,如下:
@RequestMapping("/queryItem ")
访问地址为:
/item/queryItem
- 请求方法限定
- 限定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
- GET和POST都可以
@RequestMapping
(method={RequestMethod.GET,RequestMetho
------------------------------------------------------------------------------------------ 分割线
controller
方法返回值
- 返回ModelAndView
controller
方法中定义
ModelAndView
对象并返回,对象中可添加
model
数据、指定
view
。
- 返回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串");
默认情况下,访问的是视图解析器的前缀+请求名称+后缀
- 返回字符串
- 逻辑视图名
controller
方法返回字符串可以指定逻辑视图名,通过视图解析器解析为物理视图地址。
//
指定逻辑视图名,经过视图解析器解析为
jsp
物理路径:
/WEB-INF/
jsp
/item/editItem.jsp
return
"item/editItem"
;
- 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类
注意:不使用
视图解析器的前缀+请求名称+后缀
注意:如果是重定向到不同类的前面必须加"/",否则会重定向的位置出错!!
- forward转发
controller
方法执行后继续执行另一个
controller
方法,如下商品修改提交后转向到商品修改页面,修改商品的
id
参数可以带到商品修改方法中。
//
结果转发到
editItem.action
,
request
可以带过去
return
"forward:editItem.action"
;
forward
方式相当于
“request.getRequestDispatcher().forward(request,response)”
,转发后浏览器地址栏还是原来的地址。转发并没有执行新的
request
和
response
,而是和转发前的请求共用一个
request
和
response
。所以转发前请求的参数在转发后仍然可以读取到。
注意:不使用
视图解析器的前缀+请求名称+后缀