SpringMVC(1): @RequestMapping详解

本文深入探讨了SpringMVC框架中@RequestMapping注解的使用,包括路径映射、请求参数处理、方法调用及响应视图解析等内容。通过具体代码示例,详细解释了类级与方法级映射的区别,以及如何利用参数属性细化请求处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 一. RequestMapping路径详解                                      

   (1)首先springDispatcherServlet-servlet.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/context
                           http://www.springframework.org/schema/context/spring-context.xsd
                           http://www.springframework.org/schema/mvc
                           http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.atguigu.springmvc"/>

    <!-- 配置视图解析器:如何把handler方法返回值解析为实际的物理视图
        通俗的讲就是:配置一个前缀“prefix”和一个后缀“suffix”,到时候与处理方法返回的
                     变量的值“returnVal”组成 “prefix + returnVal + suffix”(URI) -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

</beans>

 

(2)Controller 类

@Controller
@RequestMapping("/springmvc")
public class HelloWord {
    /**
     * 1. 使用@RequestMapping注解来映射请求的URL
     * 2. 返回值会通过视图解析器解析为实际的物理视图,对于 InternalResourceViewResolver视图解    
     *    析器会做如下解析: 通过prefix + returnVal + 后缀 这样的方式得到实际的物理实物图
     *    然后做转发操作
     * @return  returnVal
     */
    @RequestMapping("/hello")
    public String hello() {
        System.out.println("Hello SpringMVC...");
        return "success";
    }
}
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
@RequestMapping("/jsp")
public class RequestController {

    public static final String  SUCCESS="success";    
    
    @RequestMapping("/login1")    
    public void hello(){
        System.out.println("hello world");
    }

    /*第一点
     *1:@RequestMapping定义在类上,那就相当于根目录
     *2:@RequestMapping定义在方法上,那就相当于相对于类定义处的URL。
     * 上面代码在类定义处指定映射为"/jsp",在hello()方法处指定为"/login1"。
     * 那么hello()方法的URL映射地址为:http://localhost:8080/ssm/jsp/login1
     * ssm指的是你项目的名称
     */

    /*第二点
     * 1.@RequestMapping在类上定义不是必须的,如上如果我只在方法上定义@RequestMapping("/jsp/login1")
     * 那么它同样能访问上面的URL映射地址。
     * 2.@RequestMapping的默认属性为value,所以@RequestMapping(value="/login1")和@RequestMapping("/login1")是等价的。
     */

    @RequestMapping("/login2")    
    public String getModel(){
        System.out.println("hello world");
        return SUCCESS;
    }
    /*第三点:需要返回界面
     *1.这个return success;加上springMVC配置的路径 
     * 那么它返回的路径是:
     * http://localhost:8080/ssm/WEB-INF/jsp/success.jsp
     */

    @RequestMapping(value="/jsp/login3")
    public ModelAndView paramBind(){        
        ModelAndView modelAndView = new ModelAndView(); 
        //传到界面的数据
        modelAndView.addObject("date", "nihao");
        modelAndView.setViewName(SUCCESS);  
        return modelAndView;
    }
    
    /*第四点:返回界面同时带上数据
     * 1.好多时候,我们要的不是跳转界面,而是能够把后台的数据传到前端去
     * modelAndView.addObject放的就是你要传的数据
     * modelAndView.setViewName返回路径名称
     * 所以它的返回路径和上面一样
     */
    
    /*第五点:void类型无返回值跳转
     * 1.根据上面无返回值那么它最终会跳转到
     * http://localhost:8080/ssm/WEB-INF/jsp/jsp/login1.jsp
     * 原则:
     * prefix+类路径(类级别的mapping注解)+方法路径(方法级别的mapping注解)+prefix
     */
    
}

 

二.RequestMapping参数详解                                     

    请求参数的作用是使得请求的映射更加精细。

    RequestMapping注解有六个属性,下面我们把她分成三类进行说明

       value:定义处理方法的请求的 URL 地址。(重点)

  method:定义处理方法的 http method 类型,如 GET、POST 等。(重点)

  params:   定义请求的 URL 中必须包含的参数。或者不包含某些参数。(了解)

  headers: 定义请求中 Request Headers 必须包含的参数。或者不包含某些参数。(了解)

  下面也用个Controller 类来说明

  1.  Controller 

@Controller
@RequestMapping("/hello")
public class TestController {
    
    public static final String  SUCCESS="success";            
    
        /**
         * 通过method属性指定请求方式
         * @return SUCCESS
         */
        @RequestMapping(method=RequestMethod.POST,value="/login1")
        public String testMethodPost(){
          
            return SUCCESS;
        }
        
        /**
         * 测试url中带参数(未测试请求头信息)
         * param1 : 表示请求必须包含名为param1的请求参数
         * !param1 : 表示请求不能包含名为param1的请求参数
         * param1 != value1 : 表示请求必须包含名为param1的请求参数,但其值不能为value1
         * {"param1=value1", "param2"} 表示请求必须包含名为param1和param2的两个请求参数,且 
            param1的参数的值必须为value1
         * headers与params同理
         */
    // url http://localhost:8080/hello/login2?username=zhangsan&password=123&sex=2
    @RequestMapping(value="/login2",
            params={"username","sex!=1","password=123"},
            method=RequestMethod.GET)
    public String testHeadersAndParams(){

        return SUCCESS;
    }
       
        /**
         * PathVariable 映射 URL 绑定占位  ( 映射URL路径里面的变量)
         * 
         * 用Integer会比int严谨
         */

   /**
     * @PathVariable 可以映射URL中的占位符到目标方法的参数中(映射URL路径里面的变量)
     *  用Integer会比int严谨
     * @param id
     * @return SUCCESS
     */
    //http://localhost:8080/hello/3
    @RequestMapping("/testPathVariable/{id}")
    public String testPathVariable(@PathVariable("id") Integer id) {
        System.out.println("testPathVariable:" + id);
        return SUCCESS;
    }

        // http://localhost:8080/hello/login4/str
        @RequestMapping(value="/login4/{name}",method=RequestMethod.GET)
        public String testPathVariable2(@PathVariable("name") String name){
            System.out.println("name :"+name);
          
          return SUCCESS;
        }
       
        /**
         * 如果在方法上@RequestMapping()没有任何参数,那它就代表类上的value请求地址
         * 
         */
       // http://localhost:8080/hello.jsp
        @RequestMapping()
        public String test(){
             return SUCCESS;
        }
}

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值