Spring MVC 常用注解@Controller和@RequestMapping简介

时间:2023-01-23 21:55:47

首先了解一下什么是 Java Bean

关于JavaBean有一个小故事:

Java语言欠缺属性、事件、多重继承功能。所以,如果要在Java程序中实现一些面向对象编程的常见需求,只能手写大量胶水代码。Java Bean正是编写这套胶水代码的惯用模式或约定。这些约定包括getXxx、setXxx、isXxx、addXxxListener、XxxEvent等。遵守上述约定的类可以用于若干工具或库。
举个例子,假如有人要用Java实现一个单向链表类,可能会这样写:

// 编译成 java-int-list_1.0.jar
public final class JavaIntList {
  static class Node {
    public Node next;
    public int value;
  }
  public Node head;
  public int size;
}

上述实现为了能够快速获取链表的大小,把链表大小缓存在size变量中。用法如下:

JavaIntList myList = new JavaIntList();
System.out.println(myList.size);

JavaIntList的作者很满意,于是开源了java-int-list库的1.0版。文件名是java-int-list_1.0.jar。发布后,吸引了许多用户来使用java-int-list_1.0.jar。有一天,作者决定要节省内存,不要缓存size变量了,把代码改成这样:

// 编译成 java-int-list_2.0.jar
public final class JavaIntList {
  static final class Node {
    public Node next;
    public int value;
  }
  public Node head;
  public int getSize() {
    Node n = head;
    int i = 0;
    while (n != null) {
      n = n.next;
      i++;
    }
    return i;
  }
}

然后发布了2.0版:java-int-list_2.0.jar。发布后,原有java-int-list_1.0.jar的用户纷纷升级版本到2.0。这些用户一升级,就发现自己的程序全部坏掉了,说是找不到什么size变量。于是这些用户就把作者暴打一顿,再也不敢用java-int-list库了。

这个故事告诉我们,如果不想被暴打致死,你就必须保持向后兼容性。太阳公司在设计Java语言时,也懂得这个道理。所以Java标准库中,绝对不会出现public int size这样的代码,而一定会一开始就写成:

private int size;
public int getSize() { return size; }

让用户一开始就使用getSize,以便有朝一日修改getSize实现时,不破坏向后兼容性。这种public int getSize() { return size; }的惯用手法,就是 Java Bean

这么讲你应该知道了什么Java Bean了吧!

JavaBean是使用Java语言开发的一个可重用的组件,在JSP的开发中可以使用JavaBean减少重复代码,使整个JSP代码的开发更简洁。

javabean.核心就是赋值(set)和取值(get).

如果需要用到读写硬盘的缓存,需要网络传输,则需要序列化这个javabean.实现Serializable接口

JavaBean有如下优点:

  • 1.可将HTML和Java代码分离,这主要是为了日后维护的方便。如果把所有的程序代码(HTML和Java)写到JSP页面中,会使整个程序代码又多又复杂,造成日后维护上的困难。

  • 2.可利用JavaBean的优点。将日常用到的程序写成JavaBean组件,当在JSP要使用时,只要调用JavaBean组件来执行用户所要的功能,不用再重复写相同的程序,这样以来也可以节省开发所需的时间。

Spring MVC 常用的注解有:

  • @Controller
  • @ResquestMapping 用来定义访问URL,可以为整个类定义,也可以单个的为每个方法定义一个
  • @PathVariable
  • @ModelAttribute 获取页面参数
  • @ResquestParam
  • @ResponseBody
  • @SessionAttributes session管理
  • @CookieValue 获取cookie信息

我们重点了解常用的注解@Controler和@ResquestMapping

@Controller:表明某个类是一个controller
@ResquestMapping:请求路径映射,常常标注在一个类的方法上,也可以标注在整个类上,表明某个具体的方法来接受处理某次请求,标注在类上,表明访问此类路径下的方法(方法要单独标注配置路径,也就是请求路径,同上

@Controller
@RequestMapping("/")
public class HomeController extends BaseControlier {
    static final Logger logger = LogManager.getLogger(HomeController.class);
    @Autowired
    private ArticleService articleService;
    @RequestMapping("/index")
    public String index(ModelMap modelMap) {
        BizQuery articleInfo = new BizQuery();
        List<BizQuery> article = articleService.getByArticle(articleInfo);
        modelMap.addAttribute("article",article);
        return "/index-doctor";
    }
}

@RequestMapping(“/”):注解是标注在类上的,所以相关路径都要加上“ / ”,例如:“ http://127.0.0.1:8080/index ”

@RequestMapping("/index/{Id}")
    public String index(@PathVariable String Id,ModelMap modelMap) {
        BizQuery articleInfo = new BizQuery();
        List<BizQuery> article = articleService.getByArticle(articleInfo);
        modelMap.addAttribute("article",article);
        return "/index-doctor";
    }

@RequestMapping(“/index/{Id}”)路径中的{Id}是变量,@PathVariable String Id,可以提供Id值的

@RequestMapping的属性:
- value:指定请求的实际URL
- method:指定请求的method类型(GET,POST,PUT,DELECT )等
- params(参数):@RequestMapping(params=”action=del”),请求参数包含“action=del”,如:http://localhost:8080/book?action=del
- headers:@RequestMapping(value=”/header/id”, headers = “Accept=application/json”):表示请求的URL必须为“/header/id 且 请求头中必须有“Accept =application/json”参数即可匹配。