"页面跳转"实例详解"SpringMVC注解"的作用与用法

来源:互联网 发布:美国国籍 知乎 编辑:程序博客网 时间:2024/06/09 14:20

SpringMVC中常常需要有页面之间的跳转操作,
本文旨在,不懂的扫盲,懂得的巩固(其实是我自己怕忘了,doge脸…)
直接上个例子,在注释里解释吧


ps.例中的解释,多为网上释意加本人见解,本人文笔一般实在不好意思,若是不好理解,请自行详细搜索.
ps.例子中的一些跳转操作等,需要使用上下文配置文件才可以
(Maven管理,SpringMVC+Spring+Mybatis环境整合,http://blog.csdn.net/peng_666666/article/details/77416780)这是我的一篇搭建SSM环境的博文,其中包括Spring例子的上下文配置,供大家参考

//假设所有包都已经import@Controller//设置一个根路径,该类中的网页映射都是以此为根路径@RequestMapping("/example")public class Controller {    //本方法将处理 /example/view1?id=123 形式的URL    /*    @RequestMapping(),参数value不多说吧,就相当于映射的网址    参数method,其包括GET、POST、PUT、DELETE等    */    @RequestMapping(value="/view1", method=RequestMethod.GET)    /*    这是经常使用的接收Parameter的方法之一,    如同通过Request.getParameter()获取的String一样,可直接转换为简单类型(String与其它简单类型的转换操作由ConversionService配置的转换器来完成);    也正是使用了request.getParameter()方式获取参数,    所以可以处理Get方式中queryString的值,也可以处理Post方式中body data的值    */    public String viewId1(@RequestParam("id") Integer id, Model model) {        /*        一般这里会使用"id"来进行查询之类的操作,        然后再用addAttribute()方法操作,这里我就假装操作过啦        */        model.addAttribute(id);        //字符串中就是"你的配置文件中的指定目录为根目录,再输入你需要访问网页的文件路径"        return "view1";    }    //本方法将处理 /example/view2?id=123 形式的URL    @RequestMapping("/view2")    /*    HttpServletRequest,学servlet时候的老朋友,我就不介绍了    */    public String viewId2(HttpServletRequest request) {        //这里是先取得request中的id        Integer id = Integer.valueOf(request.getParameter("id"));               /*        一般这里会使用"id"来进行查询之类的操作,        然后再用setAttribute()方法操作,这里我就假装操作过啦        */        request.setAttribute("id",id);        return "view2";    }    //本方法将处理 /example/view3/123 形式的URL    @RequestMapping("/view3/{id}")    /*    当使用/view3/{id}这种形式时, 这时的id可通过@PathVariable注解绑定它传过来的值到方法的参数上    注意!@PathVariable("")中的参数需要与@RequestMapping("/{}")中的{}中的参数保持对应    */    public String viewId3(@PathVariable("id") Integer id, Map<String, Object> model) {        /*        一般这里会使用"id"来进行查询之类的操作,        然后再用addAttribute()方法操作,这里我就假装操作过啦        */        model.put("id",id);        return "view3";    }    /*    参数params:指定request中必须包含某些参数值是,才让该方法处理.    例中仅处理请求中包含值为"add"的请求;    params也可以键值对形式表现,例如"params="key=value",仅处理请求中包含了名为"key",值为"value"的请求;    */    @RequestMapping(value="/admin", method=RequestMethod.GET, params="add")    public String createId(){        return "createId";    }    /*    参数headers:指定request中必须包含某些指定的header值,才能让该方法处理请求    仅处理request的header中包含了指定"Refer"请求头和对应值为"http://csdn.blog.net/"的请求        */    @RequestMapping(value="/admin", method=RequestMethod.GET, headers="Referer=http://csdn.blog.net/")    public String  delId(){             return "delId";    }    @RequestMapping(value="/do1", method=RequestMethod.GET)    /*    与上面的@RequestParam()不同,该注解有两个属性:value、required.    'value'用来指定要传入值的id名称,'required'用来指示参数是否必须绑定    参数是否绑定的意思是,当它为false时使用这个注解可以不传这个参数,不报错;它为true时必须传,没传就会报错(默认是true)    */    public String do1(@RequestParam(value="id", required=false) Integer id) {        return "do1";           }    @RequestMapping(value="/do2", method=RequestMethod.POST)    /*    @ModelAttribute,该注解有两个用法,一个是用于方法上,一个是用于参数上    用于方法上时:通常用来在处理@RequestMapping之前,为请求绑定需要从后台查询的model;    用于参数上时:用来通过名称对应,把相应名称的值绑定到注解的参数bean上.要绑定的值来源于:    1)@SessionAttributes启用的attribute对象上;    2)@ModelAttribute用于方法上时指定的model对象;    3)上述两种情况都没有时,new一个需要绑定的bean对象,然后把request中按名称对应的方式把值绑定到bean中.    简单提一下@SessionAttributes:    该注解用来绑定HttpSession中的attribute对象的值,便于在方法中的参数里使用。    该注解有value、types两个属性,可以通过名字和类型指定要使用的attribute对象;    */    public String do2(@ModelAttribute Integer id) {        /*        redirect是重定向,重转发是forward:        */        return "redirect:view3/"+id;    }    @RequestMapping(value="/{id}",method=RequestMethod.GET)    /*    @ResponseBody,该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。    什么时候该使用它呢?返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用.    @PathVariable,    若方法参数名称和需要绑定中变量名称一致,就不需要在@PathVariable加上参数了(可与上文的@PathVariable对比)    */    public @ResponseBody Course getIdInJson(@PathVariable Integer id){        return id;    }}



希望能为大家扫到一两个盲点,哈哈
加油,与大家共勉

原创粉丝点击