?
?
@Controller
?
???????? 标注在Bean的类定义处
?
@RequestMapping
?
真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解
?
@RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;
?
还可以标注在方法签名处,以便进一步对请求进行分流
?
?
?
?? 配套的属性有:
?
?? value 需要跳转的地址
?
?? method 基于RestFul的跳转参数,有RequestMethod.get ?post? put? delete等
?
? ?params 符合某个参数的时候才调用该方法
?
? ?Headers 符合头信息的时候才调用
?
?
?
@SessionAttributes
?
???????? 将结果放入session内
?
@ModelAttribute
?
存储在响应内容ModelMap或者ModelAndView进行保存值传到前台,当如果你需要保存值比较少
?
的时候可以采用这种方式进行保存值并且保存到前台显示
?
?
?
在默认情况下,ModelMap 中的属性作用域是 request 级别,相当于HttpServletRequest中的request.setAttribute() 一样, 在 JSP 视图页面中通过 request.getAttribute(“attribute name”) 或者通过
?
${ attribute name } EL 表达式访问模型对象中的 属性对象
?
?
如果希望在ModelMap 的作用域范围为 session,可以有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes注解来实现如:
?
?
?
@Controller
?
@RequestMapping("/login.do")
?
@SessionAttributes("currUser") ??
?
public class BbtForumController {。。。。。}
?
?
?
?
?
@ResponseBody
?
???????? 标注后? 返回String对象的结果为response内容体,不标注的话? 作为dispatcher url使用
?
?
?
@PathVariable
?
?? 允许将请求路径的制定内容当做求情的参数使用
?
?
请求处理方法入参的可选类型??? ?????????????????????????????????????????????? 说明
?
void? ???????????????????????????????????? 此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:
?
@RequestMapping("/welcome.do")
?
public void welcomeHandler() {
?
}
?
对应的逻辑视图名为“welcome”
?
?
?
String??????? ??????????????????????????? 此时逻辑视图名为返回的字符,如以下的方法:
?
@RequestMapping(method = RequestMethod.GET)
?
public String setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {
?
???? Owner owner = this.clinic.loadOwner(ownerId);
?
???? model.addAttribute(owner);
?
???? return "ownerForm";
?
}
?
????????????????????????????????????????????? 对应的逻辑视图名为“ownerForm”
?
?
?
ModelMap???????? ?????????????????? 和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL,
?
如下面的例子:
?
@RequestMapping("/vets.do")
?
public ModelMap vetsHandler() {
?
???? return new ModelMap(this.clinic.getVets());
?
}
?
?
?
对应的逻辑视图名为“vets”,返回的 ModelMap 将被作为请求对应的模型对象,
?
可以在 JSP 视图页面中访问到。
?
ModelAndView????????? ???? ???
?
?
1 使用无返回方法跳转,如果使用返回方法进行跳转的话,则会通过视图解析器进行以
?
prefix(前缀)+方法名+suffix(后缀)组成的页面文件名称.
?
?
?
2 使用一个返回的字符串方法作为跳转,使用字符串跳转的话好处就是在return的时候可
?
以自己指定返回的名字,JSP组成是prefix(前缀)+返回的字符串+suffix(后缀)
?
?
?
3 返回一个ModelAndView类型,使用setViewName方法则可以跳转到指定的页面.
?
?
?
?
???????? 1、单一Controller?? 对应 单一的请求路径
?
?????????????????? ?
?
2、单一Controller?? 对应多个请求路径
?
?
?
3、单一Controller? 对应多个请求路径,且路径内可以含有参数的形式
?
?
@Controller
?
@RequestMapping("/login.do")
?
public class SinglePathWithController {}
?
?
?
@Controller
?
@SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})
?
public class AdapterMultiPathController {}
?
?
?
@Controller
?
@RequestMapping(value = "/rest")
?
public class RestWithController {}
?
?
//无返回值? 无参数返回的是根据 prefix前缀+@RequestMapping value +suffix
?
后缀组成
?
??? ? @RequestMapping("/springmvc/common")
?
??? ? public voidnovoid(HttpServletRequest request) {
?
?????? ? request.setAttribute("message", "novoid方法被调用");
?
??? ? }
?
?
?
?
1、? 作为视图路径方式
?
?
?
//根据路径直接匹配
?
@RequestMapping("/springmvc/multiReqPath1.do")
?
??? public String multiReqPath1(HttpServletRequest request){
?
?????? request.setAttribute("message", "multiReqPath1方法被调用");
?
?????? return "springmvc/common";
?
??? }
?
?
?
??? @RequestMapping("/springmvc/multiReqPath2.do")
?
??? public String multiReqPath2(HttpServletRequest request){
?
?????? request.setAttribute("message", "multiReqPath2方法被调用");
?
?????? return "/springmvc/common";
?
??? }
?
?
?
//根据参数匹配
?
??? @RequestMapping(params = "m=method1",method = RequestMethod.GET)
?
??? public String method1(){
?
?????? return "login/success";
?
}
?
?
?
//有参数? 参数名和请求url内的变量名一致
?
??? @RequestMapping(params = "m=method2")
?
??? public String method2(String name,String pwd){
?
?????? return name;
?
}
?
//有参数 参数名和请求url内的变量名不一致
?
??? @RequestMapping(params = "m=method3",method = RequestMethod.GET)
?
??? public String method3(@RequestParam("loginName")String name,@RequestParam("loginPwd")String pwd,HttpServletRequest request){
?
?????? request.setAttribute("message",(name + " " + pwd));
?
?????? return "login/"+name;
?
??? }
?
?
?
2、? 作为Response内容方式
?
//无参数
?
??? @ResponseBody
?
??? @RequestMapping(params = "m=method4")
?
??? public String method4(){
?
?????? return "hello,guys";
?
}
?
?
?
//处理方法入参如何绑定 URL 参数
?
??? @ResponseBody
?
??? @RequestMapping(params = "m=method5",method = RequestMethod.GET)
?
??? public String method5(String name,String pwd,int delay){
?
?????? return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay;
?
}
?
?
?
@ResponseBody
?
??? @RequestMapping(params = "m=method6",method = RequestMethod.GET)
?
??? public String method6(@RequestParam("userName")String name,DnTest test){
?
?????? return "DnTest:"+test.toString();
?
??? }
?
?
?
URL 参数: userName参数将绑定到name上? 其他与DnTest类内属性名称一致的参数将绑定到test的对应的属性上,如果参数不全? 也不会报错
?
?
@RequestMapping("/springmvc/modelAndView")
?
??? public ModelAndView modelAndView(){
?
?????? ModelAndView mav = new ModelAndView();
?
?????? mav.setViewName("/springmvc/common");
?
?????? mav.addObject("message", "modelAndView 方法被调用");
?
?????? return mav;
?
??? }
?
?
??? @RequestMapping("/springmvc/modelMap")
?
??? public ModelMap modelMap(ModelMap modMap){
?
?????? List<String> names = new ArrayList<String>();
?
?????? names.add("Rick");
?
?????? names.add("Austin");
?
??????? modMap.put("names", names);
?
???????
?
??????? modMap.put("message", "hello guys");
?
??????? modMap.put("comment", "hello guys");
?
???????
?
??????? return modMap;
?
??? }
?
?
@RequestMapping("/springmvc/modelMap")
?
??? public ModelMap modelAndView(ModelMap modMap){
?
?????? List<String> names = new ArrayList<String>();
?
?????? names.add("Rick");
?
?????? names.add("Austin");
?
??????
?
??????? modMap.put("hello", "hello guys");
?
??????? modMap.put("names", names);
?
??????? return modMap;
?
??? }
?
?
//注解方式
?
@Controller
?
@SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})
?
public class AdapterMultiPathController {}
?
?
?
//方法体
?
@RequestMapping("/springmvc/modelMap2")
?
??? public ModelMap modelMapWithSession(ModelMap modMap,HttpServletRequest request){
?
?????? List<String> names = new ArrayList<String>();
?
?????? names.add("Rick");
?
?????? names.add("Austin");
?
?????? modMap.put("names",names);
?
??????
?
??????? modMap.put("message", "hello guys");
?
??????? modMap.put("comment", "hello guys");
?
???????
?
??????? UserBean user = new UserBean();
?
??????? user.setName("Rick");
?
??????? user.setMobile("18938900256");
?
??????? user.setTelephone(request.getParameter("userPhone"));
?
??????? user.setNumber(request.getParameter("userNumber"));
?
??????? modMap.put("currentUser", user);
?
???????
?
??????? return modMap;
?
??? }??
?
//初次请求
?
?
@ResponseBody
?
??? @RequestMapping(params = "m=method7",method = RequestMethod.GET)
?
??? public String method7(String name,String pwd,int delay,HttpServletRequest req){
?
?????? req.startAsync();
?
??????
?
?????? Date startTime = new Date();
?
?????? try {
?
?????????? Thread.currentThread().sleep(delay);
?
?????? } catch (InterruptedException e) {
?
?????????? e.printStackTrace();
?
?????? }
?
?????? Date entTime = new Date();
?
??????
?
?????? return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay+",startTime:"+
?
????????????? DateUtils.formatDate(startTime, "yyyy-MM-dd HH:mm:ss:SSS")+",endTime:"+
?
????????????? DateUtils.formatDate(entTime, "yyyy-MM-dd HH:mm:ss:SSS");
?
??? }
?
?
?
?
@Controller
?
@RequestMapping(value = "/rest")
?
public class RestWithController {}
?
?
?
@ResponseBody
?
??? @RequestMapping(value = "/{msg}", method = RequestMethod.GET)
?
??? public String restString(@PathVariable String msg) {
?
?????? return msg;
?
??? }
?
?
?
??? @ResponseBody
?
??? @RequestMapping(value = "/{path}/{value}", method = RequestMethod.GET)
?
??? public String restXml(@PathVariable String path,@PathVariable String value) {
?
?????? return "path:"+path+",value:"+value;
?
??? }
?
??? @ResponseBody
?
??? @RequestMapping(value = "/xml/{filename}", method = RequestMethod.GET)
?
??? public String restFile(@PathVariable String filename) {
?
?????? if (filename!=null) {
?
?????????? ProjectInits init = ProjectInits.getInstance();
?
?????????? String dir = init.get("resource.dir", "C:/Projects/VoyagerWeb/resources");
?
?????????? FileUtility fUtil = new FileUtility();
?
?????????? String content = fUtil.readFile(dir+"/"+filename+".xml");
?
?????????? return content;
?
?????? }
?
?????? else
?
?????????? return "Invalid xml file name ["+filename+"]";
?
??? }
?
?
?
?
?
?
?
//验证 是否支持Overload
?
??? @ResponseBody
?
??? @RequestMapping(value = "/validate/overload1", method = RequestMethod.GET)
?
??? public String overloadMethod(String name){
?
?????? return name;
?
??? }
?
??? @ResponseBody
?
??? @RequestMapping(value = "/validate/overload2", method = RequestMethod.GET)
?
??? public String overloadMethod(String name,DnTest test){
?
?????? return "DnTest:"+test.toString();
?
??? }
?
?
?
?
/验证 是否支持Overload
?
??? ??? @ResponseBody
?
??? ??? ?@RequestMapping(params = "m=method11")
?
?????? public String method11(String name){
?
?????????? return name;
?
?????? }
?
??? ???
?
??? ??? @ResponseBody
?
??? ??? ?@RequestMapping(params = "m=method11")
?
?????? public String method11(int age,DnTest test){
?
?????????? return "DnTest:"+test.toString();
?
?????? }
?
?
SpringMVC+mybatis HTML5 全新高大尚后台框架_集成代码生成器
?
原文:http://fuyi68615.iteye.com/blog/2180109