zoukankan      html  css  js  c++  java
  • Spring框架深入(四)--SpringMVC配置详解

    一、SpringMVC web模型

      

    二、@RequestMapping参数说明

      1、value:定义处理方法的请求的URL地址;

      2、method:定义处理的方法的http method类型,如GET/POST方法;不指定的时候,可以处理任何方式的http请求;

      3、params:定义请求的URL中必须包含的参数,用于窄化请求;

      4、headers:定义请求的request headers 中必须包含的参数,与params类似;

      5、consums:指定处理请求的提交类型(content-type),application/json,用于窄化请求;

      6、produces:指定返回的内容类型,仅当request请求头中的类型包含指定类型才返回;

      params的使用

      用于前台向后台的参数的传递;通过判断传递的参数中有或者没有“target”,来判断是否进入该方法;

    //请求中有target参数时,才能进入
    @RequestMapping(value="/find1.action",params="target")
    public String find1(String target) {
        System.out.println("find1");
        System.out.println(target);
        return "result";
    }
        
    //请求中不能有target参数
    @RequestMapping(value="/find1.action",params="!target")
    public String find2() {
        System.out.println("find2");
        return "result";
    }
        
    //请求中target值等于test时,进入find3
    @RequestMapping(value="/find1.action",params="target=test")
    public String find3(String target) {
        System.out.println("find3");
        System.out.println(target);
        return "result";
    }

      value配置详解

      value支持通配符的使用;

       ?:代表匹配文件名中的一个字符;

       *:代表匹配文件名中的任意字符;

       **:代表匹配多层路径;

      示例:

      有这样几个跳转链接,

    <a href="find.action">find.action</a><br>
    <a href="find/id.action">find/id.action</a><br>
    <a href="find/ida.action">find/ida.action</a><br>
    <a href="find/idaa.action">find/idaa.action</a><br>
    <a href="find/id/abc.action">find/id/abc.action</a><br>
    <a href="find/id/abc/abc.action">find/id/abc/abc.action</a><br>

      分别对应到的controller方法:

    @RequestMapping("/find/id?.action")
    public String match1() {
        System.out.println("match1:"+"/find/id?.action");
        return "result";
    }
    @RequestMapping("/find/id*.action")
    public String match2() {                
       System.out.println("match2:"+"/find/id*.action"); return "result"; } @RequestMapping("/find/id/*.action") public String match3() { System.out.println("match3:"+"/find/id/*.action"); return "result"; } @RequestMapping("/find/id/**/abc.action") public String match4() { System.out.println("match4:"+"/find/id/**/abc.action"); return "result"; } @RequestMapping("/find.action") public String match5() { System.out.println("match5:"+"/find.action"); return "result"; }

      运行结果:

      

      或关系

      一个value的配置可以支持两个URL路径的映射;通过这两个路径,可以同时访问到这个方法;

    @RequestMapping(value= {"/get.action","/fetch.action"})
    public String get() {
        System.out.println("get");
        return "result";
    }

      正则表达式

      页面链接:

    <a href="get/2-b.action">reg</a>

      controller代码:

    @RequestMapping("get/{\d+}-{[a-z]}")
    public String regularExpression() {
        System.out.println("regularExpression");
        return "result";
    }

      通过正则表达式还可以实现路径参数的获取;

    @RequestMapping("get/{number:\d+}-{text:[a-z]}")
    public String regularExpression2(@PathVariable String number,@PathVariable String text) {
        System.out.println("regularExpression");
        System.out.println("number:"+number);
        System.out.println("text:"+text);
        return "result";
    }

      先在路径中接收正则表达式的值,再通过@PathVariable获取值;

      运行结果:

      

      RESTFUL支持

      1、restful:轻量级的SOA(面向服务)的实现,将一个个的请求做出的相应以资源的形式返回;

      2、请求资源:

       以前:userServlet?type=”add”;

       Restful:URL风格:将参数通过URL传递到服务器端;

      3、SpringMVC支持restful风格,可以通过URL进行参数的传递;

      示例:

    <a href="user/add.action">add</a>
    @RequestMapping(value="/user/{type}.action")
    public String userMgr(@PathVariable("type") String initParam) {
        System.out.println("userMgr:"+initParam);
        return "result";
    }

      路径中的值add,就会作为参数被type接收;  

      先使用@PathVariable(“type”)中的type来接收通过URL路径传递的type值,再给InitParam初始化参数;

    三、基于注解的参数绑定

      1、@RequestParam:设置绑定的参数名和传入的参数名的值;

    <a href="param.action?param=paramTest">测试</a><br>
    @RequestMapping("/param.action")
    public String param(@RequestParam("param")String value) {
        System.out.println("param:"+value);
        return "result";
    }

      2、@ PathVariable

    四、数据回显深入理解

      数据回显的方法:

       (1)、原生servlet的方式:

       (2)、ModelAndView

       (3)、Model/ModelMap:默认在request作用域实现数据传递

    @RequestMapping("/back.action")
    public String back(Model model) {
        String msg="this is msg;";
        model.addAttribute("msg", msg);//默认的作用域范围是request
        return "result";
    }

        在前台页面可直接通过EL表达式获取值;

       (4)、ModeAtrribute

        可以用于方法的返回值:用来在处理@RequestMapping之前,为请求绑定需要从后台查询到的model;

        将数据绑定到request作用域,每个请求都可以从作用域中拿出数据;

        当前@RequestMapping的每一个返回都可以携带ModelAttribute中的属性和属性值;

    @ModelAttribute("list")
    public List<User> findAllUser(){
        User user1=new User(1,"admin","admin");
        User user2=new User(2,"test","test");    
        List<User> list=new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        return list;
    }

        在前台页面通过request.getAttribute获取值;

       (5)、@SessionAttributes:用于类和接口

        将与ModelAttribute中的key相同的属性值也放到session作用域中;

    @Controller
    @SessionAttributes(value= {"list","msg"})
    public class ParamController {
        @RequestMapping("/param.action")
        public String param(@RequestParam("param")String value) {
            System.out.println("param:"+value);
            return "result";
        }
        @ModelAttribute("list")
        public List<User> findAllUser(){
            User user1=new User(1,"admin","admin");
            User user2=new User(2,"test","test");
            
            List<User> list=new ArrayList<User>();
            list.add(user1);
            list.add(user2);
            return list;
        }
    }

        在前台页面通过session可以同时获取到list和msg;

    PS:因作者能力有限,如有误还请谅解;

  • 相关阅读:
    第一节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
    Tensorflow 错误:Unknown command line flag 'f'
    Python 多线程总结
    Git 强制拉取覆盖本地所有文件
    Hive常用函数 傻瓜学习笔记 附完整示例
    Linux 删除指定大小(范围)的文件
    Python 操作 HBase —— Trift Trift2 Happybase 安装使用
    梯度消失 梯度爆炸 梯度偏置 梯度饱和 梯度死亡 文献收藏
    Embedding 文献收藏
    深度学习在CTR预估中的应用 文献收藏
  • 原文地址:https://www.cnblogs.com/WHL5/p/9088009.html
Copyright © 2011-2022 走看看