springmvc Controller详解
简介
在springmvc 中,控制器controller 负责处理由dispatcherservlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个model ,然后再把该model 返回给对应的view 进行展示。
示例
不适用注解修饰
返回modelandview
controller方法中定义modelandview对象并返回,对象中可添加model数据、指定view。
package com.cyb.ssm.controller; import java.util.arraylist; import java.util.list; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.stereotype.service; import org.springframework.web.bind.annotation.requestmapping; import org.springframework.web.servlet.modelandview; import com.cyb.ssm.po.item; import com.cyb.ssm.service.itemservice; @controller public class itemcontroller { @autowired private itemservice service; @requestmapping("queryitem") public modelandview queryitem() { list<item> itemlist = service.queryitemlist(); modelandview mvandview = new modelandview(); mvandview.addobject("itemlist", itemlist); mvandview.setviewname("item/item-list"); return mvandview; } }
返回void
在controller方法形参上可以定义request和response,使用request或response指定响应结果:
void service(httpservletrequest request,httpservletresponse response){}
1、使用request转发向页面,如下:
request.getrequestdispatcher("页面路径").forward(request, response);
2、也可以通过response页面重定向:
response.sendredirect("url")
3、也可以通过response指定响应结果,例如:
response.setcharacterencoding("utf-8"); response.setcontenttype("application/json;charset=utf-8"); response.getwriter().write("json串");
返回字符串
逻辑视图名
return "item/item-list";
redirect重定向
return "redirect:testredirect";
redirect:
相当于“response.sendredirect()”
游览器url发生改变
request域不能共享
forward转发
return "forward:testforward";
forward:
相当于“request.getrequestdispatcher().forward(request,response)”
浏览器url不发送改变
request域可以共享
使用注解修饰
返回带responsebody注解的值
@responsebody注解和@requestbody注解介绍
@responsebody的作用:
responsebody注解可以通过内置9种httpmessageconverter,匹配不同的controller返回值类型,然后进行不同的消息转换处理
将转换之后的数据放到httpservletresponse对象的响应体返回到页面,
不同的httpmessageconverter处理的数据,指定的contenttype值也不同。
@requestbody注解的作用和@responsebody注解正好相反,它是处理请求参数的http消息转换的。
常用的 httpmessageconverter
mappingjacksonhttpmessageconverter处理pojo类型返回值
mappingjacksonhttpmessageconverter是专门处理pojo类型的。
默认使用mappingjackson的json处理能力,将后台返回的java对象(pojo类型),转为json格式输出到页面。
将响应体的content-type设置为application/json;charset=utf-8
stringhttpmessageconverter处理string类型返回值
stringhttpmessageconverter是专门处理string类型的。
调用response.getwriter()方法将string类型的字符串写回给调用者。
将响应体的content-type设置为text/plain;charset=utf-8
@requestmapping
通过requestmapping注解可以定义不同的处理器映射规则
url路径映射
@requestmapping(value="/item")或@requestmapping("/item")
value的值是数组,可以将多个url映射到同一个方法
@requestmapping(value={"/item","/queryitem"})
窄化请求映射
在class上添加@requestmapping(url)指定通用请求前缀,限制此类下的所有方法的访问请求url必须以请求前缀开头,通过此方法对url进行模块化分类管理。
example
商品模块
/item/add
/item/update
/item/delete
用户模块
/user/add
/user/update
/user/delete
请求方法限定
限定get方法
@requestmapping(method=requestmethod.get)
如果通过post访问则报错:
http status 405 - request method 'post' not supported
例如:
@requestmapping(value="/edititem",mtthod=requestmethod.get)
限定post方法
@requestmapping(method=requestmethod.post)
如何通过post访问则报错:
http status 405 - request method 'get' not supported
get和post都可以
@requestmapping(mthod={requestmethod.get,requestmethod.post})