springmvc4 相关注解的详细讲解
首先我是一个初学springmvc,抱着去加深印象的目的去整理相关springmvc4的相关注解,同时也希望给需要相关查阅的读者带来帮助。
1.@Controller
Controller控制器是通过服务接口定义的提供访问应用程序的一种行为,它解释用户的输入,将其转换成一个模型然后将试图呈献给用户。Spring MVC 使用 @Controller 定义控制器,它还允许自动检测定义在类路径下的组件并自动注册。如想自动检测生效,需在xml头文件下引入 spring-context:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd">
<context:component-scan base-package="com.chen" />
</beans>
2.@RequestMapping
RequestMapping 注解将类似 "/admin"这样的URL映射到整个类或特定的处理方法上。一般来说,类级别的注解映射特定的请求路径到表单控制器上,而方法级别的注解只是映射 为一个特定的HTTP方法请求("GET","POST"等)或HTTP请求参数。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; @Controller
@RequestMapping("admin")
public class LoginController { @RequestMapping(value = "login" , method = RequestMethod.GET , consumes = "text/html")
public String toLoginPage(){
return "/WEB-INF/jsp/login.jsp";
}
}
上述url的访问地址应该是:localhost:8080/proj/admin/login.html
consumes-指定处理请求的提交内容类型Content-Type,例如 application/json,text/html。
produces-指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。
value-指定请求的实际地址,指定的地址可以是URI Template 模式
A) 可以指定为普通的具体值;
B) 可以指定为含有某变量的一类值(URI Template Patterns with Path Variables);
C) 可以指定为含正则表达式的一类值( URI Template Patterns with Regular Expressions);
如下示例:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; @Controller
public class BlogController { @RequestMapping(value = "blog/{nick}/{year:20\\d{2}}/{month:1|1[0-2]}/{day:[12][0-9]|30|[1-9]}" , method = RequestMethod.GET)
public String toBlogPage(@PathVariable String nick,
@PathVariable Integer year,@PathVariable Integer month,@PathVariable Integer day){
return "/WEB-INF/jsp/blog.jsp";
}
}
params-指定request中必须包含某些参数值是,才让该方法处理。
headers-指定request中必须包含某些指定的header值,才能让该方法处理请求。
如下示例:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; @Controller
public class BlogController {
//仅处理request的header中包含了指定“Refer”请求头和对应值为“http://www.ttyouni.com/”的请求
@RequestMapping(value = "image", headers="Referer=http://www.ttyouni.com/" )
public String getImage(){
return "/WEB-INF/jsp/image.jsp";
}
}
3.@RathVariable
在Spring MVC中,可以使用 @PathVariable 注解方法参数并将其绑定到URI模板变量的值上,之前示例中也有相关体现。
4.@RequestParam
@RequestParam将请求的参数绑定到方法中的参数上。其实即使不配置该参数,注解也会默认使用该参数。如果想自定义指定参数的话,可以将@RequestParam的 required 属性设置为false。
5.@RequestBody
@RequestBody是指方法参数应该被绑定到HTTP请求Body上。
6.@SessionAttibutes
@SessionAttibutes可以通过ModelMap对象的put操作设置相关的session同时在attibute对象也会有该对象。
示例如下:
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.SessionAttributes; import com.chen.proj.service.UserService; @Controller
@RequestMapping("admin")
@SessionAttributes("user")
public class LoginController { @Resource
UserService service; @RequestMapping(value = "doLogin", method = RequestMethod.POST)
public String doLogin(@RequestParam String username , @RequestParam String password, HttpServletRequest request,
ModelMap map ){
try {
User user = service.doLogin(username, password);
map.put("user", user);
} catch (Exception e) {
request.setAttribute("error", e.getMessage());
return "/WEB-INF/jsp/login.jsp";
}
return "/WEB-INF/jsp/loginsuccess.jsp";
} }
7.@ResponseBody
@ResponseBody与@RequestBody类似,它的作用是将返回类型直接输入到HTTP response body中。@ResponseBody在输出JSON格式的数据时会用到。
示例如下:
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody; import com.chen.proj.bean.User; @Controller
public class JsonController { @ResponseBody
@RequestMapping("/getJson")
public User getUserInfo(){
User user = new User();
user.setPassword("1234");
user.setUsername("jsontest");
return user;
}
}
8.@RestController
我们经常见到一些控制器实现了REST的API,只为服务于json,xml或其它自定义的类型内容。@RestController用来创建REST类型的控制器,与@Controller类型。@RestController就是这样一种类型,它避免了你重复的写@RequestMapping与@ResponseBody
9.@ModelAttribute
@ModelAttribute可以作用在方法或方法参数上,当它作用在方法上时,标明该方法的目的是添加一个或多个模型属性。
当作用在方法参数上时,表明该参数可以在方法模型中检索到。如果该参数不在当前模型中,该参数先被实例化然后添加到模型中。一旦模型中有了该参数,该参数的字段应该填充所有请求参数匹配的名称中。这是spring mvc中重要的数据绑定机制,它省去了单独解析每个表单字段的时间。
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import com.chen.proj.bean.User; @Controller
public class UserController { @ModelAttribute
public User addUser(@RequestParam String number) {
return service.findUser(number);
} @ModelAttribute
public void populateModel(@RequestParam String number, Model model) {
model.addAttribute(service.findUser(number));
// add more ...
}
}
注解的出现终结了xml配置文件漫天飞的年代,它让程序拥有更高的可读性,可配置性与灵活性。给人一种更简洁明了的感觉。
springmvc4 相关注解的详细讲解的更多相关文章
- Spring MVC 3.0 深入及对注解的详细讲解
核心原理 1. 用户发送请求给服务器.url:user.do 2. 服务器收到请求.发现Dispatchservlet可以处理.于是调用DispatchServlet. 3. ...
- Spring MVC 3.0 深入及对注解的详细讲解[转载]
http://blog.csdn.net/jzhf2012/article/details/8463783 核心原理 1. 用户发送请求给服务器.url:user.do 2. ...
- Java堆、栈和常量池以及相关String的详细讲解(经典中的经典) (转)
原文链接 : http://www.cnblogs.com/xiohao/p/4296088.html 一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的 ...
- Java堆、栈和常量池以及相关String的详细讲解
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- Java堆、栈和常量池以及相关String的详细讲解(转)
一:在JAVA中,有六个不同的地方可以存储数据: 1. 寄存器(register). 这是最快的存储区,因为它位于不同于其他存储区的地方——处理器内部.但是寄存器的数量极其有限,所以寄存器由编译器根据 ...
- Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解
前言 大家好,给大家带来Android开发工程师文集-Activity生命周期,启动方式,Intent相关介绍,Activity详细讲解的概述,希望你们喜欢 Activity是什么 作为一个Activ ...
- SpringMVC_总结_03_SpringMVC相关注解
一.前言 在前面的小节中,我们配置了注解驱动和自动扫描包,然后就可以使用SpringMVC相关注解了. 二.@Controller @Controller用来修饰类,源码如下: package org ...
- Android webservice的用法详细讲解
Android webservice的用法详细讲解 看到有很多朋友对WebService还不是很了解,在此就详细的讲讲WebService,争取说得明白吧.此文章采用的项目是我毕业设计的webserv ...
- 详细讲解Hadoop源码阅读工程(以hadoop-2.6.0-src.tar.gz和hadoop-2.6.0-cdh5.4.5-src.tar.gz为代表)
首先,说的是,本人到现在为止,已经玩过. 对于,这样的软件,博友,可以去看我博客的相关博文.在此,不一一赘述! Eclipse *版本 Eclipse *下载 Jd ...
随机推荐
- CodeForces 327E Axis Walking(状压DP+卡常技巧)
Iahub wants to meet his girlfriend Iahubina. They both live in Ox axis (the horizontal axis). Iahub ...
- BZOJ 3884 上帝与集合的正确用法(扩展欧拉定理)
Description 根据一些书上的记载,上帝的一次失败的创世经历是这样的: 第一天, 上帝创造了一个世界的基本元素,称做“元”. 第二天, 上帝创造了一个新的元素,称作“α”.“α”被定义为“ ...
- git command cheat sheet
clone:克隆 --non-bare:(默认值)一般的克隆方式 --bare:只克隆.git目录 --mirror:只克隆.git目录,并且还保持与origin的关联,可以fetch commit: ...
- [转载].NET开发常用的10条实用代码
1.读取操作系统和CLR的版本 OperatingSystem os = System.Environment.OSVersion; Console.WriteLine(“Platform: {0}” ...
- 工作中的Buff加成-结构化思考力:自创独门武功 3-3-3原则
3-3-3原则 3秒钟 *思考三秒钟 沟通前根据交谈内容思考3秒钟,思考下具体需要表达什么,思考的主要点为What.Why.How. *冷静三秒钟 在沟通过程中,若遇到气氛不和谐,比如生气.愤恨等时, ...
- 【Apache系列】linux下Apache的常用操作
1. 启动/停止 1.1假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令: /usr/local/apache2/bin/apachect ...
- 转载:RabbitMQ常用命令
RabbitMQ常用命令 RabbitMQ常用命令 rabbitmqctl命令http://www.rabbitmq.com/man/rabbitmqctl.1.man.html# 1). 服务器启动 ...
- Linux系统管理 常用命令
基础常用命令 某个命令 --h,对这个命令进行解释 某个命令 --help,解释这个命令(更详细) man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索) ...
- 如何从svn下载以前的项目版本
showlog 你的项目,找到最老的log的版本号,然后svn co -r 最老的log的版本号 项目地址
- dos 下脚本编写须知
主题为:doc脚本运行结束后,不自动退出终端. 方法1假设你的bat名字叫rabbit.bat你可以新开一个bat,内容是start rabbit.bat然后这个新的bat是不会自动关闭的 注意,这个 ...