对SpringMVC中的以下几个常用注解进行简单的实验测试:

1、@RequestParam

2、@PathVariable

3、@RequestBody

4、@RequestHeader

5、@CookieValue

6、@ModelAttribute

7、@SessionAttributes

具体内容详见代码:

1、annotationTest.jsp页面代码如下:  

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/12/6
Time: 11:02
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<%--@RequestParam注解的测试--%>
<a href="testRequestParam?uname=lisi">testRequestParam</a><br> <%--@PathVariable注解的测试,注意不是?键=值的形式传参了--%>
<a href="testPathVariable/wangwu">testPathVariable</a> <%--@RequestBody注解的测试,不能用在get请求中--%>
<form action="testRequestBody" method="post">
姓名:<input type="text" name="username"/><br>
年龄:<input type="text" name="age"/><br>
<input type="submit" value="提交"/>
</form> <%--@RequestHeader测试--%>
<a href="testRequestHeader">testRequestHeader</a><br> <%--@CookieValue测试--%>
<a href="testCookieValue">testCookieValue</a><br> <%--@ModelAttribute测试--%>
<form action="testModelAttribute" method="post">
姓名:<input type="text" name="name"/><br>
年龄:<input type="text" name="age"/><br>
<input type="submit" value="提交"/>
</form> <%--@SessionAttributes测试--%>
<a href="testSessionAttributes">testSessionAttributes</a><br>
<%--controller的方法中从session作用域取值--%>
<a href="getSessionAttributes">getSessionAttributes</a><br>
<%--测试controller的方法中清除session作用域中的内容--%>
<a href="deleteSessionAttributes">deleteSessionAttributes</a><br> </body>
</html>

2、AnnotationController代码如下:

package com.example.controller;

import com.example.bean.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.support.SessionStatus; import java.util.Date;
import java.util.Map; @Controller
/*该注解只能写在类上,@SessionAttributes(value={"msg"})只的是从request作用域中取msg的值存入session作用域中*/
@SessionAttributes(value={"msg"})
public class AnnotationController {
public static final String SUCCESS = "success";
@RequestMapping("/testRequestParam")
public String testRequestParam(@RequestParam("uname") String name){
System.out.println("执行了 testRequestParam...");
System.out.println(name);
return SUCCESS;
} //相当于路径中的值封装到username中,再用@PathVariable("username")取出值传给参数
@RequestMapping("/testPathVariable/{username}")
public String testPathVariable(@PathVariable("username") String name){
System.out.println("执行了 testPathVariable...");
System.out.println(name);
return SUCCESS;
} /*@RequestBody可以以字符串的形式接收页面中的表单的数据*/
@RequestMapping("/testRequestBody")
public String testRequestBody(@RequestBody String body){
System.out.println("执行了 testRequestBody...");
System.out.println(body);
return SUCCESS;
} /*@RequestHeader可用于获取请求头中的信息赋值给方法参数*/
@RequestMapping("/testRequestHeader")
public String testRequestHeader(@RequestHeader("accept") String accept){
System.out.println("执行了 testRequestHeader...");
System.out.println(accept);
return SUCCESS;
} /*@RequestHeader可用于获取cookie中的信息赋值给方法参数*/
@RequestMapping("/testCookieValue")
public String testCookieValue(@CookieValue("JSESSIONID") String jsessionid){
System.out.println("执行了 testCookieValue...");
System.out.println(jsessionid);
return SUCCESS;
} /*@ModelAttribute加在方法上,该方法会被先执行, 该注解注释的方法在所在controller的每个方法被调用之前都会被调用一次,所以要慎用*/
    /*@RequestMapping("/testModelAttribute")
public String testModelAttribute(User user){
System.out.println("执行了 testModelAttribute...");
System.out.println(user);
return SUCCESS;
}*/ /*该方法返回的User对象会被contrller中的参数接收,但是只接收页面没有传递的参数,
* 比如date,即使在该方法中改了name属性的值,但是也是以页面传递的name的值为准,
* 即由于页面给user对象传递了name属性,但是没有传递date属性,
* 所以该方法修改的name属性不会生效,只有date属性会生效*/
/*@ModelAttribute
public User getUser(User user){
user.setDate(new Date());
user.setName("haha");
System.out.println("执行了返回对象的getUser...");
return user;
}*/ /*多个@ModelAttribute方法都会执行,且该方法返回的date不会被封装进Controller的参数中*/
/*@ModelAttribute
public Date printAnother(User user){
System.out.println("执行了printAnother...");
Date date =new Date();
return date;
}*/ @RequestMapping("/testModelAttribute")
public String testModelAttribute(@ModelAttribute("abc") User user){
System.out.println("执行了 testModelAttribute...");
System.out.println(user);
return SUCCESS;
} /*没有返回值的@ModelAttribute修饰的方法
将对象封装到map中,在controller中通过 @ModelAttribute("abc")形式从map中取key是abc对应的user对象
该注解注释的方法在所在controller的每个方法被调用之前都会被调用一次,所以要慎用*/
@ModelAttribute
public void queryUser(Map<String,User> map){
System.out.println("执行了返回空值的测试");
User user = new User();
user.setName("哈哈");
user.setDate(new Date());
map.put("abc",user);
} /*存入Model对象中的值默认是会存入request作用域中的,可从request作用域中直接取值
* 配合类上注解的@SessionAttributes(value={"msg"})可将msg信息存入session作用域中*/
@RequestMapping("testSessionAttributes")
public String testSessionAttributes( Model model){
System.out.println("执行了testSessionAttributes");
model.addAttribute("msg","sessionAttributes测试");
return SUCCESS;
} /*通过方法从Session作用域中取值,Model中没有取值的get方法,可通过ModelMap取值*/
@RequestMapping("getSessionAttributes")
public String getSessionAttributes( ModelMap modelMap){
System.out.println("执行了getSessionAttributes");
String msg = (String)modelMap.get("msg");
System.out.println("session中取的值为:" + msg);
return SUCCESS;
} /*从session作用域中删除数据,删除后再从session作用域中取值就取不到了*/
@RequestMapping("deleteSessionAttributes")
public String deleteSessionAttributes(SessionStatus sessionStatus){
System.out.println("执行了deleteSessionAttributes");
sessionStatus.setComplete();
return SUCCESS;
}
}

3、success.jsp代码如下:

<%--
Created by IntelliJ IDEA.
User: Administrator
Date: 2019/12/4
Time: 14:07
To change this template use File | Settings | File Templates.
--%>
<%--为了使el表达式生效,需要在此写上isELIgnored="false"--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<h3>入门成功</h3>
<%--如下两行仅用于测试@SessionAttributes注解时使用--%>
${ requestScope.get("msg") }<br>
${ sessionScope.get("msg") }
</body>
</html>

如有理解不到之处,望指正!

0024SpringMVC中几个常见注解的实验的更多相关文章

  1. English - 英文写作中的最常见“十大句式”

    英文写作中的最常见“十大句式” from 小木虫论坛 一.否定句 许多否定句不含not的否定结构.如果论文作者能正确使用他们,就会增加写作的闪光点,使文章显得生动活泼. 1.Instead of in ...

  2. Spring RestTemplate中几种常见的请求方式

    https://github.com/lenve/SimpleSpringCloud/tree/master/RestTemplate在Spring Cloud中服务的发现与消费一文中,当我们从服务消 ...

  3. SpringMVC Controller介绍及常见注解

    一.简介 在SpringMVC中,控制器Controller负责处理由DispatcherServlet分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model,然后再把该Model返 ...

  4. Spring RestTemplate中几种常见的请求方式GET请求 POST请求 PUT请求 DELETE请求

    Spring RestTemplate中几种常见的请求方式 原文地址: https://blog.csdn.net/u012702547/article/details/77917939   版权声明 ...

  5. 小记----------lombok插件idea的安装&常见注解解释及小案例

    Lombok安装插件 软件:idea 2018.3.6版本 1.打开settings

  6. JAVA中如何定义自定义注解

    了解注解 注解是Java1.5,JDK5.0引用的技术,与类,接口,枚举处于同一层次 .它可以声明在包.类.字段.方法.局部变量.方法参数等的前面,用来对这些元素进行说明,注释 . 在Java中,自带 ...

  7. Guava中Predicate的常见用法

    Guava中Predicate的常见用法 1.  Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...

  8. 今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在Win中见过的/r回车符号。由于编辑软件的编码问题,某些IDE的编辑器在编辑完文件之后会自动加上这个^M符号。看起来对我们的源代码没有任何影响,其实并不然,当我们把源代码文件Check In到svn之类

    今天在Mac机器上使用了Flex Builder编辑了一个源代码文件,保存后使用vim命令去打开时发现系统自动在每一行的结尾添加了^M符号,其实^M在Linux/Unix中是非常常见的,也就是我们在W ...

  9. 【转】Eclipse中设置ButterKnife进行注解式开发步骤 -- 不错

    原文网址:http://www.bubuko.com/infodetail-974262.html 最近在进行Android注解式开发的学习,正在尝试用ButterKnife.ButterKnife的 ...

随机推荐

  1. 在ensp上配置Hybrid接口

    Hybrid接口是华为特有的一种接口 Hybrid接口是既可以连接普通终端的接入链路,又可以连接交换机间的干道链路. 简单说就是Hybrid接口既能实现Access的功能又能实现Trunk接口的功能. ...

  2. Linux08 文件系统

    对于磁盘等各类存储设备中所有的数据都以0和1的概念,但对于用户来说,0和1是没有任何意义的,这时候就需要一种类似于“翻译”的机制存在于用户和磁盘之间,Linux中采用的是文件系统+虚拟文件系统(Vir ...

  3. Android--卸载应用

    获取应用列表: List<PackageInfo> packages = getPackageManager().getInstalledPackages(0); for (Package ...

  4. PHP写入文件

    file_put_contents('log.txt',PHP_EOL.'zhangsan'.$time.'查看了数据', FILE_APPEND);

  5. js获取项目名称

    //获取路径 var pathName=window.document.location.pathname; //截取,得到项目名称 var projectName=pathName.substrin ...

  6. MySQL事务和事务隔离级别

    1.概述 事务就是对数据库数据进行更改(包括insert.update.delete等)操作的一个执行单元,通常有一条或多条更改语句组成.在同一个事务中的更改操作要么同时成功,要么同时失败. 事务具有 ...

  7. 定时任务 Quarzt

    Quartz.Net是一个从java版的Quartz移植过来的定时任务框架,可以实现异常灵活的定时任务. Quartz 有三个概念分别是 计划者(ISchedeler).工作(IJob).触发器(Tr ...

  8. 【转载】 C#中List集合使用First方法查找符合条件的第一个元素

    在C#的List集合相关操作中,很多时候需要从List集合中查找出符合条件的第一个元素对象,如果确认在List集合中一定存在符合条件的元素,则可以使用First方法来查找,First方法调用格式为Fi ...

  9. canvas教程(三) 绘制曲线

    经过 canvas 教程(二) 绘制直线 我们知道了 canvas 的直线是怎么绘制的 而本次是给大家带来曲线相关的绘制 绘制圆形 在 canvas 中我们可以使用 arc 方法画一个圆 contex ...

  10. 通过Git和GitHub项目管理

    用Git来管理代码文件 安装环境 windows 首先是安装git: 1.到git官网下载一个安装包 2.安装git,详细过程略 3.打开项目文件夹,并鼠标右击,打开git bash 4.从未使用过g ...