Spring MVC-Controller和@RequestMapping ModelAndView配置和用法-restful风格

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。

 

原文出自:http://www.cnblogs.com/leiOOlei/p/3658076.html 

 

 

补充web.xml的Spring MVC配置:

 <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>

 



相关视频课程推荐《站长必修课:网站是怎样做出来的?》https://edu.51cto.com/sd/3be5b

网站是怎样做出来的?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值