spring注解

1.注解

  • @Controller控制器定义

    和Struts1一样,Spring的Controller是Singleton的。这就意味着会被多个请求线程共享。因此,我们将控制器设计成无状态类。

    在spring 3.0中,通过@controller标注即可将class定义为一个controller类。为使spring能找到定义为controller的bean,需要在spring-context配置文件中增加如下定义:

<context:component-scan base-package="com.sxt.web"/>

注:实际上,使用@component,也可以起到@Controller同样的作用。

  • @RequestMapping

  在类前面定义,则将url和类绑定。

      在方法前面定义,则将url和类的方法绑定,如下所示:

 1 package com.sxt.web;
 2 
 3 import javax.annotation.Resource;
 4 import org.springframework.stereotype.Controller;
 5 import org.springframework.web.bind.annotation.RequestMapping;
 6 import com.sxt.service.UserService;
 7 
 8 @Controller
 9 @RequestMapping("/user.do")
10 public class UserController  {
11 
12     @Resource
13     private UserService userService;
14     
15     //http://localhost:8080/springmvc02/user.do?method=reg&uname=zzzz
16     @RequestMapping(params="method=reg") 
17     public String reg(String uname) {
18         System.out.println("HelloController.handleRequest()");
19         userService.add(uname); 
20         return "index";
21     }
22     
23     public UserService getUserService() {
24         return userService;
25     }
26     public void setUserService(UserService userService) {
27         this.userService = userService;
28     }
31 }
  • @RequestParam 

    一般用于将指定的请求参数付给方法中形参。示例代码如下:

1 @RequestMapping(params="method=reg5")
2     public String reg5(@RequestParam("name")String uname,ModelMap map) { 
3         System.out.println("HelloController.handleRequest()");
4         System.out.println(uname); 
5         return "index";
6     }

  这样,就会将name参数的值付给uname。当然,如果请求参数名称和形参名称保持一致,则不需要这种写法。

  • @SessionAttributes

      将ModelMap中指定的属性放到session中。示例代码如下:

 1 @Controller
 2 @RequestMapping("/user.do")
 3 @SessionAttributes({"u","a"})   //将ModelMap中属性名字为u、a的再放入session中。这样,request和session中都有了。
 4 public class UserController  {
 5     @RequestMapping(params="method=reg4")
 6     public String reg4(ModelMap map) {          System.out.println("HelloController.handleRequest()");
 7         map.addAttribute("u","uuuu");  //将u放入request作用域中,这样转发页面也可以取到这个数据。
 8         return "index";
 9     }
10 }
1 <body>
2    <h1>**********${requestScope.u.uname}</h1>
3    <h1>**********${sessionScope.u.uname}</h1>
4   </body>

  注:名字为”user”的属性再结合使用注解@SessionAttributes可能会报错。

  • @ModelAttribute

      这个注解可以跟@SessionAttributes配合在一起用。可以将ModelMap中属性的值通过该注解自动赋给指定变量。

    示例代码如下:

 1 package com.sxt.web;
 2 import javax.annotation.Resource;
 3 import org.springframework.stereotype.Controller;
 4 import org.springframework.ui.ModelMap;
 5 import org.springframework.web.bind.annotation.ModelAttribute;
 6 import org.springframework.web.bind.annotation.RequestMapping;
 7 import org.springframework.web.bind.annotation.SessionAttributes;
 8 @Controller
 9 @RequestMapping("/user.do")
10 @SessionAttributes({"u","a"})  
11 public class UserController  {
12     
13     @RequestMapping(params="method=reg4")
14     public String reg4(ModelMap map) {
15         System.out.println("HelloController.handleRequest()");
16         map.addAttribute("u","尚学堂高淇");
17         return "index";
18     }
19     
20     @RequestMapping(params="method=reg5")
21 public String reg5(@ModelAttribute("u")String uname ,ModelMap map) { 
22         System.out.println("HelloController.handleRequest()");
23         System.out.println(uname); 
24         return "index";
25     }
26     
27 }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏编程坑太多

springboot (四)spring data jpa

1514
来自专栏后端之路

数据校验之Spring和Hibernate validate

目前系统中使用校验的地方比较多,前端校验&后端校验是绕不开的两个话题。 通常来说对于开发来说:后端校验是必备,前端校验是可选 1.前端验证可以没有,但后端验证必...

2365
来自专栏屈定‘s Blog

IDEA插件ASM Bytecode Outline

这款插件对于我学习JVM上的其他语言帮助非常大,很多高级语法糖反编译之后能够明白背后的原理,目前插件已经上传到JetBrains官方仓库,欢迎试用。 插件地址:...

4015
来自专栏向治洪

史上最强Spring mvc入门

一、SpringMVC基础入门,创建一个HelloWorld程序   1.首先,导入SpringMVC需要的jar包。 ?   2.添加Web.xml配置...

33310
来自专栏Ryan Miao

SpringMVC中@RequestBody引起的400异常处理,返回校验失败具体信息

问题 使用@RequestBody接收一个json数据的时候,如果传入的参数不符合条件,就会直接返回400的error page. 但究竟是为什么会400并没有...

4397
来自专栏林欣哲

Spring Boot 知识点速记

本文是学习2小时学会Spring Boot和Spring Boot进阶之Web进阶的SpringBoot常用知识点速记。 SpringBoot前置知识: Spr...

3347
来自专栏菩提树下的杨过

spring-boot 速成(9) druid+mybatis 多数据源及读写分离的处理

按上节继续学习,稍微复杂的业务系统,一般会将数据库按业务拆开,比如产品系统的数据库放在product db中,订单系统的数据库放在order db中...,然后...

7575
来自专栏一个会写诗的程序员的博客

Kotlin集成 SpringBoot 混合Java库开发

apply plugin: 'org.springframework.boot' apply plugin: 'kotlin'

601
来自专栏py+selenium

pip install xxxx报错(一大堆红色exception)【解决】

  File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 215, in main

2141
来自专栏F_Alex

(四)SpringBoot2.0基础篇- 多数据源,JdbcTemplate和JpaRepository

3164

扫码关注云+社区