对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. Matlab使用新发现1(小技巧:shell 命令、工程工作目录设置相关)

    最近在调试一个基于Matlab的程序,在偶然间发现了几个比较有趣的技巧,给大家分享一下(很可能是太菜鸟了,没有涉及这方面,大方之家请勿见笑,对您有所帮助请点赞!) 1. Matlab语言是一种解释型语 ...

  2. Android中的算法

    算法是思想的体现形式,常见的算法做一些总结 算法简介 算法-Algorithm 解题方案的准确而完整的描述,是一系列解决问题的清晰指令 特征 有穷性,确切性,输入项,输出项,可行性 算法运算要素 算术 ...

  3. 【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】

    给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...

  4. 用Python实现扑克牌面试题思路

    据说是腾讯的面试题,以下是要求: 一副从1到n的牌,每次从牌堆顶取一张放桌子上,再取一张放牌堆底,直到手中没牌.根据桌上的牌堆顺序,输出原先手中牌堆的顺序数组. 实现思路: 1.首先定义一个2维数组, ...

  5. array_walk、array_map、array_filter 的用法

    array_walk.array_map.array_filter  和 foreach 都有循环对数组元素进行处理的功能. 一.array_walk 用法 1.循环数组,回调处理(并不修改数组元素的 ...

  6. Log4J对系统性能的影响

    Log4J对系统性能的影响 主要体现: 1.日志输出的目的地,输出到控制台的速度比输出到文件系统的速度要慢. 2.日志输出格式不一样对性能也会有影响,如简单输出布局(SimpleLayout)比格式化 ...

  7. ArcGIS JS 使用Proxy之 Printing Tools unable to connect to mapServer

    ArcGIS JS使用Proxy.ashx将地图服务隐藏,并在微博服务器端增加了地图服务权限判断. Proxy.ashx做了如下设置, <serverUrl url="http://l ...

  8. 终于明白六大类UML类图关系了

    UML,全称Unified Modeling Language,统一建模语言.而UML图分为用例图.类图.对象图.状态图.活动图.时序图.协作图.构件图.部署图等9种图. 在面向对象语言中,我们经常看 ...

  9. Appium_Xpath定位详解

    做的笔记比较乱,定位过程中,发现很多开发小哥的代码命名问题,怕被怼,这里说说算了. 恩..这是我最常用,也是最熟悉的定位方法之一,这次趁着UI交换变更的机会,整理一下Xpath的定位方法,喜欢可以收藏 ...

  10. Crontab详细用法-定时任务详解

    crontab是linux系统或unix系统中常用的定时命令,使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux/unix命令.例如系统管理员安排一个备份任务使其每天都运行 ...