天天看点

@RequestMapping注解@RequestMapping注解

@RequestMapping注解

这一次我们要学习的是

@RequestMapping

的相关注解

1、@RequestMapping注解出现的位置

@RequestMapping注解主要定义于处理器对请求的映射规则。首先我们可以将其定义在类上,也可以定义到方法上。当然其中的含义也会不同。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.stereotype;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.springframework.core.annotation.AliasFor;

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface Controller {
    @AliasFor(
        annotation = Component.class
    )
    String value() default "";
}
           

首先我们用

Ctrl

点进注解下,一个@Controller所注解的是可以定义多个处理器方法。只不过我们自然会让不同的处理器所匹配的URL不同罢了。这些不同的 URI 被指定在注解于方法之上的@RequestMapping 的value 属性中。

如果出现请求相同的URL部分,这些相同的部分将被抽取到注解在类之上的RequestMapping 的 value 属性中。(这里注意的是:我们说的请求相同的URL部分指的是处理器—即业务方法,而抽取于类上的RequestMapping是在类上的value属性中)。此时这个URL表示模块的名称。

URI 的请求是相对于 Web 的根目录。在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一 步指定到处理方法的映射关系。

1.1 示例

1.首先在你的控制层下写入处理器(这里的update方法为了方便测试也跟add同样的内容):

@RequestMapping("hello.do")
    public ModelAndView add(){
        System.out.println("TeamController-add");
        teamService.add();
        ModelAndView mv = new ModelAndView();
        mv.addObject("teamName","湖人");
        mv.setViewName("Team/add");
        return mv;
    }
    @RequestMapping("hi.do")
    public ModelAndView update(){
        System.out.println("TeamController-update");
        teamService.update();
        ModelAndView mv1 = new ModelAndView();
        mv1.addObject("teamName","热火");
        mv1.setViewName("Team/update");
        return mv1;
    }
           

此时创建

ModelAndView

类中,设置了View窗口即如下两行代码:

mv.setViewName("Team/add");
        mv1.setViewName("Team/update");
/*此时默认设置为localhost:8080/Team/add.jsp 
或者是:localhost:8080/Team/update.jsp */
           

2.目录路径设置成如下:

(这里我创建的是Maven项目,在webapp下创建一个Team包后再创建两个jsp文件而后用插件Tomcat编译运行。)

@RequestMapping注解@RequestMapping注解

3.运行后应该会出现如下结果:

@RequestMapping注解@RequestMapping注解
@RequestMapping注解@RequestMapping注解

此时输入一下@RequestMapping下的value值后试一试。

@RequestMapping注解@RequestMapping注解
@RequestMapping注解@RequestMapping注解

这就是@RequestMapping的基本原理,即将其

value

映射成物理地址,物理地址即为

setViewName()

下的路径。

2、指定请求提交方式

每个网页请求数据方式各个不一。

当你在@RequestMapping中添加Method属性后如下所示。

@RequestMapping注解@RequestMapping注解

点击后进入前面的置顶注解(下面的代码块),发现有什么不同吗?

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
           

对,当你设置新的属性后,你的注解会(对编译器)说明添加的注解信息。其中,对于method属性,用来对被注解方法所处理请求的提交方式进行限制,即只有满足 method 属性指定的提交方式的请求,才会执行该被注解方法。

如上图所示,Method 属性的取值为

RequestMethod

枚举常量。常用的为

RequestMethod.GET 与 RequestMethod.POST

,分别表示提交方式的匹配规则为GET 与 POST 提交。

设置了对应的处理请求后,后续的编译服务器只会请求该方式的请求。

请求方式 提交方式
地址栏请求 get请求
超连接请求 get请求
表单请求 默认get,可以指定post
AJAX请求 默认get,可以指定post

2.1 示例

1.首先添加method属性:

@RequestMapping注解@RequestMapping注解

2.编译结果参考:

@RequestMapping注解@RequestMapping注解

此时报405的错误,即不支持请求GET。

以上就是

@RequestMapping

注解的基本介绍,谢谢大家的阅读,另外对于java的学习请各位关注我,大家一起学习呀谢谢!