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

posted @ 2018-05-25 13:09  IVEGOTNOIDEA  阅读(245)  评论(0编辑  收藏  举报