• (转)SpringMVC常用基础知识


    源地址:http://blog.sina.com.cn/s/blog_a43be7b001011lx9.html

    常用注解元素

    @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  对应多个请求路径,且路径内可以含有参数的形式

    Demo code and UseCase

    @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")Stringname,@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的对应的属性上,如果参数不全  也不会报错

    返回ModelAndView

    @RequestMapping("/springmvc/modelAndView")

        public ModelAndView modelAndView(){

           ModelAndView mav = new ModelAndView();

           mav.setViewName("/springmvc/common");

           mav.addObject("message""modelAndView 方法被调用");

           return mav;

        }

    返回ModelMap

        @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;

        }

    返回ModelMap

    @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;

        }

    @SessionAttribute & 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;

        }  

    //初次请求

    spring mvc & reverse ajax

    @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");

        }

     

    RestFull

    @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

    方式一

    //验证 是否支持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();

           }

  • 相关阅读:
    分析存储过程重编译的起因以及避免
    存储过程重编译的优点、缺点、确定引发语句
    运用计划缓冲的建议
    查询计划Hash和查询Hash
    执行计划的重用
    执行计划组件、组件、老化
    执行计划的生成
    统计的基本操作语法 <第五篇>
    javascript 之 location.href、跨窗口调用函数
    git 删除远程分支和本地分支
  • 原文地址:https://www.cnblogs.com/romanhzzz/p/4414992.html
Copyright © 2020-2023  润新知