zoukankan      html  css  js  c++  java
  • Spring3系列13-Controller和@RequestMapping

    Spring3系列13-Controller和@RequestMapping

    Controller返回值,String或者ModelAndView

    @RequestMapping关联url

    @RequestMapping的属性

    一、      Controller返回值,String或者ModelAndView

    首先看一下spring的配置文件,如下

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans     
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context-3.0.xsd">
            
        <context:component-scan base-package="com.lei.demo.controller" />
        
        <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="prefix">
                <value>/WEB-INF/user/</value>
            </property>
            <property name="suffix">
                <value>.jsp</value>
            </property>
        </bean>    
    </beans>

    第一种,返回类型为String,Controller中的方法如下

        @RequestMapping(value="welcome",method=RequestMethod.GET)
        public String printMessage(ModelMap model) {
     
            model.addAttribute("message", "返回类型String");
            return "users";
        }

    根据spring配置文件和以上controller,访问“/welcome”时,对应的返回页面为“/WEB-INF/user/users.jsp”

    第二种,返回类型为ModelAndView,Controller中的方法如下

        @RequestMapping("/welcome")
        public ModelAndView printMessage (){
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", "返回类型ModelAndView ");
            mv.setViewName("users");
            return mv;
        }

    两种方法返回的页面相同,不同的是第二种方法将model和view整合成ModelAndView实例,方法中不需要再加入model参数。

    二、      @RequestMapping关联url

    @RequestMapping可以是类级别和方法级别。

    1.        类级别,类前有@RequestMapping

    @Controller
    @RequestMapping("/user")
    public class UserController {
        
        //访问此方法的url为“/user/manager”,url前要加入类级别的路径/user
        @RequestMapping(value="/manager",method=RequestMethod.GET)
        public ModelAndView printMessage(){
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", "MVC");
            mv.setViewName("users");
            return mv;
        }
    
    //访问此方法的url为“/user/hello”,url前要加入类级别的路径/user
        @RequestMapping(value="/hello",method=RequestMethod.GET)
        public ModelAndView hello(){
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", "hello");
            mv.setViewName("users");
            return mv;
        }
    }

     

    2.        方法级别,类前没有@RequestMapping

    @Controller
    public class UserController {
        
        //没有类级别的@RequestMapping,访问此方法的url为“/manager”
        @RequestMapping(value="/manager",method=RequestMethod.GET)
        public ModelAndView printMessage(){
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", "MVC");
            mv.setViewName("users");
            return mv;
        }
    
    //没有类级别的@RequestMapping,访问此方法的url为“/hello”
        @RequestMapping(value="/hello",method=RequestMethod.GET)
        public ModelAndView hello(){
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", "hello");
            mv.setViewName("users");
            return mv;
        }
    }

    3.        @RequestMapping支持多个映射路径映射到同一个controller

        @RequestMapping(value={"/hello","/foo"})
        public ModelAndView hello(){
            ModelAndView mv = new ModelAndView();
            mv.addObject("message", "hello");
            mv.setViewName("users");
            return mv;
        }

    以上“/hello”和“/foo”映射到同一个函数处理。

    三、      @RequestMapping的属性

    @RequestMapping有如下几个属性:value、method、params、headers

    这几个属性用法如下

    1.      @RequestMapping中的value属性

    通过value属性,表达主要的映射,在Servlet环境中,映射路径(如,/myPath.do),也支持Any风格的(如,/myPath/*.do)。在方法级别中的相对路径需要类级别的主路径支持。

    @RequestMapping("/user")等同于@RequestMapping(value="/user")

    2.      @RequestMapping中的method属性

    通过HTTP请求的method来缩小主映射的范围。GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE。支持定义在类级别或方法级别。

    3.      @RequestMapping中的params属性

    格式为“paramname=paramvalue” 或 “paramname!=paramvalue”。不带参数则表示paramvalue可以为任意值。

    例如,params =  {"param1=1","param2!=2","param3"},表示对应的url必须包括param1,param2,param3三个参数,其中param1的值必须为1,param2的值不能为2,param3的值可以为任意值。

    4.      @RequestMapping中的headers属性

    headers用来限定对应的reqeust请求的headers中必须包括的内容,例如

    headers={"Connection=keep-alive"}, 表示请求头中的connection的值必须为keep-alive。

  • 相关阅读:
    七、AOP统一处理以及日志打印
    六、spring Boot项目表单验证(最小值为例)以及spring的常用注解
    五、spring-data-Jpa 数据库操作
    四、spring Boot项目中Controller的使用
    三、SpringBoot的常用配置(.yml通过配置文件和注解进行属性注入,以及分别配置生产、开发环境)
    机器学习中的 上采样 下采样 过采样 欠采样
    Mac 安装/卸载 brew
    Keras 训练自己的人脸特征点提取模型的坑
    Keras 使用自己编写的数据生成器
    iPhone 设备管理在哪(已解决)
  • 原文地址:https://www.cnblogs.com/leiOOlei/p/3658076.html
Copyright © 2011-2022 走看看