您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

SpringMVC常用注解

Spring MVC环境搭建 运行Hello,World

Spring常用的注解

1.RequestMapping注解

  • 1. RequestMapping注解的作用是建立请求URL和处理方法之间的对应关系
  • 2. RequestMapping注解可以作用在方法和类上
    • 1. 作用在类上:第一级的访问目录
    • 2. 作用在方法上:第二级的访问目录
    • 3. 细节:路径可以不编写 / 表示应用的根目录开始
    • 4. 细节:${ pageContext.request.contextPath }也可以省略不写,但是路径上不能写 /
  • 3. RequestMapping的属性
    • 1. path 指定请求路径的url
    • 2. value value属性和path属性是一样的
    • 3. mthod 指定该方法的请求方式
    • 4. params 指定限制请求参数的条件
    • 5. headers 发送的请求中必须包含的请求头
  • 上代码:

1.在com.spring包下创建AnnoController类

package com.spring;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 常用的注解
 */
@Controller
@RequestMapping("anno")
public class AnnoController {

    @RequestMapping(path = "/hello")
    public String sayHello(){
        System.out.println("hello world");
        return "success";
    }

}

2.在webapp - WEB-INF 包下创建 pages包 -  success.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>This is success</h1>

</body>
</html>

3.在webapp 包下创建annotation.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

    <h1>This is anntation</h1>
    <!-- 常用注解 -->
    
<a href="anno/hello"> Hello,World </a>

</body>
</html>

4.运行Tomcat服务器 - 点击 Hello,World


2.RequestParam注解

  • 作用:把请求中的指定名称的参数传递给控制器中的形参赋值
  • 属性
    • value:请求参数中的名称
    • required:请求参数中是否必须提供此参数,默认值是true,必须提供
  • 上代码:

    • 在annotation.jsp加上一个a标签链接

    • 在AnnoController类中加上一个方法

<a href="anno/testRequestParam?name=hh">RequestParam</a>
@RequestMapping("/testRequestParam")
    public String testRequestParam(@RequestParam(name="name") String username){
        System.out.println("Run RequestParam...");
        System.out.println(username);
        return "success";
    }

运行:

点击RequestParam链接


3. RequestBody注解

  • 1. 作用:用于获取请求体的内容(注意:get方法不可以)
  • 2. 属性
    • 1. required:是否必须有请求体,默认值是true
  • 上代码

  • 在annotation.jsp加上一个form表单

  • 在AnnoController类中加上一个方法

<form action="anno/testRequestBody" method="post">
        name:<input type="text" name="username" placeholder="enter one user name..."> </br>
        age:<input type="password" name="age" placeholder="enter one user age..."> </br>
        <input type="submit" value="提交" ><br/>
    </form>
/**
     * 获取请求体的内容
     * @return
     */
    @RequestMapping("/testRequestBody")
    public String testRequestBody(@RequestBody String body){
        System.out.println("Run RequestBody...");
        System.out.println(body);
        return "success";
    }

运行 - 输入内容 - 提交:


4. PathVariable注解

  • 1. 作用:拥有绑定url中的占位符的。例如:url中有/delete/{id},{id}就是占位符
  • 2. 属性
    • 1. value:指定url中的占位符名称
  • 3. Restful风格的URL
    • 1. 请求路径一样,可以根据不同的请求方式去执行后台的不同方法
    • 2. restful风格的URL优点
      • 1. 结构清晰
      • 2. 符合标准
      • 3. 易于理解
      • 4. 扩展方便

上代码:

  • 在annotation.jsp加上一个a标签

  • 在AnnoController类中加上一个方法

<a href="anno/testPathVariable/1">PathVariable</a>
/**
     * PathVariable注解
     * @return
     */
    @RequestMapping(value = "/testPathVariable/{sid}",method = RequestMethod.GET)
    public String testPathVariable(@PathVariable(name = "sid") String id){
        System.out.println("Run...");
        System.out.println(id);
        return "success";
    }

运行 - 点击PathVariable链接:

如果将method = RequestMethod.GET 的GET改为POST将会报错


5. RequestHeader注解

  • 1. 作用:获取指定请求头的值
  • 2. 属性
    • 1. value:请求头的名称

上代码:

  • 在annotation.jsp加上一个a标签

  • 在AnnoController类中加上一个方法

  • 并不是只能获取Cookie值,Seesion Accept等等都是可以的

<a href="anno/testRequestHeader">RequestHeader</a>
 /**
     *获取请求头的值
     * @return
     */
    @RequestMapping(value = "/testRequestHeader")
    public String testRequestHeader(@RequestHeader(value = "Cookie") String haader){
        System.out.println("Run...");
        System.out.println(haader);
        return "success";
    }

运行 - 点击RequestHeader链接


6.CookieValue注解:

  • 1. 作用:用于获取指定cookie的名称的值
  • 2. 属性
    • 1. value:cookie的名称

上代码
 

  • 在annotation.jsp加上一个a标签

  • 在AnnoController类中加上一个方法

<a href="anno/testCookieValue">CookieValue</a>
/**
     *获取Cookie的值
     * @return
     */
    @RequestMapping(value = "/testCookieValue")
    public String testCookieValue(@CookieValue(value = "JSESSIONID") String cookieValue){
        System.out.println("Run...");
        System.out.println(cookieValue);
        return "success";
    }

运行


7. ModelAttribute注解

  • 1. 作用
    • 1. 出现在方法上:表示当前方法会在控制器方法执行前线执行。
    • 2. 出现在参数上:获取指定的数据给参数赋值。
  • 2. 应用场景
    • 1. 当提交表单数据不是完整的实体数据时,保证没有提交的字段使用数据库原来的数据。

上代码:

在com.sprng的包下创建domain包User类

package com.spring.domain;

import java.io.Serializable;
import java.util.Date;

public class User implements Serializable {

    private String uname;
    private Integer age;

    private Date date;

    @Override
    public String toString() {
        return "User{" +
                "uname='" + uname + '\'' +
                ", age=" + age +
                ", date=" + date +
                '}';
    }

    public Date getDate() {
        return date;
    }

    public void setDate(Date date) {
        this.date = date;
    }

    public String getUname() {
        return uname;
    }

    public void setUname(String uname) {
        this.uname = uname;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
  • 在annotation.jsp加上一个form表单

  • 在AnnoController类中加上两个方法

<form action="anno/testModelAttribute" method="post">
        name:<input type="text" name="uname" placeholder="enter one user name..."> </br>
        age:<input type="password" name="age" placeholder="enter one user age..."> </br>
        <input type="submit" value="提交" ><br/>
    </form>
/**
     *ModelAttribute注解
     * @return
     */
    @RequestMapping(value = "/testModelAttribute")
    public String testModelAttribute(@ModelAttribute(value = "aaa") User user){
        System.out.println("Hello,ModelAttribute!!!");
        System.out.println(user);
        return "success";
    }

/**
     * 该方法会先执行
     */
     @ModelAttribute
     public User hello(String uname){
     System.out.println("Hello,World!!!");
     // 通过用户查询数据库(模拟操作)
     User user = new User();
     user.setUname("aaa");
     user.setAge(20);
     user.setDate(new Date());
     return user;
     }

运行 - 输入内容 - 运行:

可看到 Hello,World先执行

另一种写法

    @ModelAttribute
    public void hello(String uname, Map<String,User> map){
        System.out.println("Hello,World!!!");
        // 通过用户查询数据库(模拟操作)
        User user = new User();
        user.setUname("aaa");
        user.setAge(20);
        user.setDate(new Date());
        map.put("aaa",user);
    }

 


8.SessionAttributes注解

  • 1. 作用:用于多次执行控制器方法间的参数共享
  • 2. 属性
    • 1. value:指定存入属性的名称

上代码:

  • 在annotation.jsp加上三个a标签

  • 在AnnoController类中加上三个方法

  • 在类public class AnnoController {上加注解
    @SessionAttributes(value = {"msg"})   //将 msg=马云 存入session域中
  • 在success.jsp中写上EL表达式
    <a href="anno/testSessionAttributes">SessionAttributes</a>

    <hr>

    <a href="anno/getSessionAttributes">getSessionAttributes</a>

    <hr>

    <a href="anno/delSessionAttributes">delSessionAttributes</a>
    /**
     *SessionAttributes注解
     * @return
     */
    @RequestMapping(value = "/testSessionAttributes")
    public String testSessionAttributes(Model model){
        System.out.println("Hello,SessionAttributes!!!");
        //存储到Request域中
        model.addAttribute("msg","马云");
        return "success";
    }

    /**
     * 获取值
     * @param getModel
     * @return
     */
    @RequestMapping(value = "/getSessionAttributes")
    public String getSessionAttributes(ModelMap getModel){
        System.out.println("Hello,getSessionAttributes!!!");
        String msg = (String) getModel.get("msg");
        System.out.println(msg);
        return "success";
    }

    /**
     * 清除值
     * @param status
     * @return
     */
    @RequestMapping(value = "/delSessionAttributes")
    public String delSessionAttributes(SessionStatus status){
        System.out.println("Hello,delSessionAttributes!!!");
        status.setComplete();
        return "success";
    }
<!-- 页面会显示域对象中所有的内容 -->
<%--    ${ requestScope }--%>

${ msg }

${ sessionScope }

运行

点击SessionAttributes getSessionAttributes delSessionAttributes

依次为储存对象到域中 获取对象 在域中 删除对象在域中

Tomcat控制台:

Hello,SessionAttributes!!!
Hello,getSessionAttributes!!!
马云
Hello,delSessionAttributes!!!


 


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进