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:因作者能力有限,如有误还请谅解;

  • 相关阅读:
    oracle 10g 共享服务器搭建
    Oracle:10053事件简述
    Asktom Oracle: Partition table and index .
    Oracle shared server配置
    Oracle:物化视图语法
    Asktom:Thanks for the question regarding "consistent gets Very puzzling".
    oracle嵌套表整理的学习资料
    非空闲等待事件之:db file sequential read(转)
    Asktom Oracle:How to multiplex single row into multiple rows
    Oracle:Not exists
  • 原文地址:https://www.cnblogs.com/WHL5/p/9088009.html
Copyright © 2011-2022 走看看