springmvc常见注解模式
常用注解元素
@Controller
标注在Bean的类定义处
@RequestMapping
真正让Bean具备 Spring MVC Controller 功能的是 @RequestMapping 这个注解
@RequestMapping 可以标注在类定义处,将 Controller 和特定请求关联起来;
还可以标注在方法签名处,以便进一步对请求进行分流 配套的属性有:
value 需要跳转的地址
method 基于RestFul的跳转参数,有RequestMethod.get post put delete等
params 符合某个参数的时候才调用该方法
Headers 符合头信息的时候才调用 @SessionAttributes
将结果放入session内
@ModelAttribute
存储在响应内容ModelMap或者ModelAndView进行保存值传到前台,当如果你需要保存值比较少
的时候可以采用这种方式进行保存值并且保存到前台显示 在默认情况下,ModelMap 中的属性作用域是 request 级别,相当于HttpServletRequest中的request.setAttribute() 一样, 在 JSP 视图页面中通过 request.getAttribute(“attribute name”) 或者通过
${ attribute name } EL 表达式访问模型对象中的 属性对象 如果希望在ModelMap 的作用域范围为 session,可以有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现 如: @Controller
@RequestMapping("/login.do")
@SessionAttributes("currUser")
public class BbtForumController {。。。。。} @ResponseBody
标注后 返回String对象的结果为response内容体,不标注的话 作为dispatcher url使用 @PathVariable
允许将请求路径的制定内容当做求情的参数使用
返回类型
请求处理方法入参的可选类型 说明
void 此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:
@RequestMapping("/welcome.do")
public void welcomeHandler() {
}
对应的逻辑视图名为“welcome” String 此时逻辑视图名为返回的字符,如以下的方法:
@RequestMapping(method = RequestMethod.GET)
public String setupForm(@RequestParam("ownerId") int ownerId, ModelMap model) {
Owner owner = this.clinic.loadOwner(ownerId);
model.addAttribute(owner);
return "ownerForm";
}
对应的逻辑视图名为“ownerForm” ModelMap 和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL,
如下面的例子:
@RequestMapping("/vets.do")
public ModelMap vetsHandler() {
return new ModelMap(this.clinic.getVets());
} 对应的逻辑视图名为“vets”,返回的 ModelMap 将被作为请求对应的模型对象,
可以在 JSP 视图页面中访问到。
ModelAndView
返回方式
1 使用无返回方法跳转,如果使用返回方法进行跳转的话,则会通过视图解析器进行以
prefix(前缀)+方法名+suffix(后缀)组成的页面文件名称. 2 使用一个返回的字符串方法作为跳转,使用字符串跳转的话好处就是在return的时候可
以自己指定返回的名字,JSP组成是prefix(前缀)+返回的字符串+suffix(后缀) 3 返回一个ModelAndView类型,使用setViewName方法则可以跳转到指定的页面. 路径匹配形式
1、单一Controller 对应 单一的请求路径 2、单一Controller 对应多个请求路径 3、单一Controller 对应多个请求路径,且路径内可以含有参数的形式
Demo code and UseCase
@Controller
@RequestMapping("/login.do")
public class SinglePathWithController {} @Controller
@SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})
public class AdapterMultiPathController {} @Controller
@RequestMapping(value = "/rest")
public class RestWithController {}
无返回
//无返回值 无参数返回的是根据 prefix前缀+@RequestMapping value +suffix
后缀组成
@RequestMapping("/springmvc/common")
public voidnovoid(HttpServletRequest request) {
request.setAttribute("message", "novoid方法被调用");
} 返回字符串
1、 作为视图路径方式 //根据路径直接匹配
@RequestMapping("/springmvc/multiReqPath1.do")
public String multiReqPath1(HttpServletRequest request){
request.setAttribute("message", "multiReqPath1方法被调用");
return "springmvc/common";
} @RequestMapping("/springmvc/multiReqPath2.do")
public String multiReqPath2(HttpServletRequest request){
request.setAttribute("message", "multiReqPath2方法被调用");
return "/springmvc/common";
} //根据参数匹配
@RequestMapping(params = "m=method1",method = RequestMethod.GET)
public String method1(){
return "login/success";
} //有参数 参数名和请求url内的变量名一致
@RequestMapping(params = "m=method2")
public String method2(String name,String pwd){
return name;
}
//有参数 参数名和请求url内的变量名不一致
@RequestMapping(params = "m=method3",method = RequestMethod.GET)
public String method3(@RequestParam("loginName")String name,@RequestParam("loginPwd")String pwd,HttpServletRequest request){
request.setAttribute("message",(name + " " + pwd));
return "login/"+name;
} 2、 作为Response内容方式
//无参数
@ResponseBody
@RequestMapping(params = "m=method4")
public String method4(){
return "hello,guys";
} //处理方法入参如何绑定 URL 参数
@ResponseBody
@RequestMapping(params = "m=method5",method = RequestMethod.GET)
public String method5(String name,String pwd,int delay){
return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay;
} @ResponseBody
@RequestMapping(params = "m=method6",method = RequestMethod.GET)
public String method6(@RequestParam("userName")String name,DnTest test){
return "DnTest:"+test.toString();
} URL 参数: userName参数将绑定到name上 其他与DnTest类内属性名称一致的参数将绑定到test的对应的属性上,如果参数不全 也不会报错
返回ModelAndView
@RequestMapping("/springmvc/modelAndView")
public ModelAndView modelAndView(){
ModelAndView mav = new ModelAndView();
mav.setViewName("/springmvc/common");
mav.addObject("message", "modelAndView 方法被调用");
return mav;
}
返回ModelMap
@RequestMapping("/springmvc/modelMap")
public ModelMap modelMap(ModelMap modMap){
List<String> names = new ArrayList<String>();
names.add("Rick");
names.add("Austin");
modMap.put("names", names); modMap.put("message", "hello guys");
modMap.put("comment", "hello guys"); return modMap;
}
返回ModelMap
@RequestMapping("/springmvc/modelMap")
public ModelMap modelAndView(ModelMap modMap){
List<String> names = new ArrayList<String>();
names.add("Rick");
names.add("Austin"); modMap.put("hello", "hello guys");
modMap.put("names", names);
return modMap;
}
@SessionAttribute & ModMap
//注解方式
@Controller
@SessionAttributes(types = {UserBean.class,String.class},value={"currentUser","message"})
public class AdapterMultiPathController {} //方法体
@RequestMapping("/springmvc/modelMap2")
public ModelMap modelMapWithSession(ModelMap modMap,HttpServletRequest request){
List<String> names = new ArrayList<String>();
names.add("Rick");
names.add("Austin");
modMap.put("names",names); modMap.put("message", "hello guys");
modMap.put("comment", "hello guys"); UserBean user = new UserBean();
user.setName("Rick");
user.setMobile("18938900256");
user.setTelephone(request.getParameter("userPhone"));
user.setNumber(request.getParameter("userNumber"));
modMap.put("currentUser", user); return modMap;
}
//初次请求
spring mvc & reverse ajax
@ResponseBody
@RequestMapping(params = "m=method7",method = RequestMethod.GET)
public String method7(String name,String pwd,int delay,HttpServletRequest req){
req.startAsync(); Date startTime = new Date();
try {
Thread.currentThread().sleep(delay);
} catch (InterruptedException e) {
e.printStackTrace();
}
Date entTime = new Date(); return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay+",startTime:"+
DateUtils.formatDate(startTime, "yyyy-MM-dd HH:mm:ss:SSS")+",endTime:"+
DateUtils.formatDate(entTime, "yyyy-MM-dd HH:mm:ss:SSS");
} RestFull
@Controller
@RequestMapping(value = "/rest")
public class RestWithController {} @ResponseBody
@RequestMapping(value = "/{msg}", method = RequestMethod.GET)
public String restString(@PathVariable String msg) {
return msg;
} @ResponseBody
@RequestMapping(value = "/{path}/{value}", method = RequestMethod.GET)
public String restXml(@PathVariable String path,@PathVariable String value) {
return "path:"+path+",value:"+value;
}
@ResponseBody
@RequestMapping(value = "/xml/{filename}", method = RequestMethod.GET)
public String restFile(@PathVariable String filename) {
if (filename!=null) {
ProjectInits init = ProjectInits.getInstance();
String dir = init.get("resource.dir", "C:/Projects/VoyagerWeb/resources");
FileUtility fUtil = new FileUtility();
String content = fUtil.readFile(dir+"/"+filename+".xml");
return content;
}
else
return "Invalid xml file name ["+filename+"]";
} 验证 是否支持Overload
方式一
//验证 是否支持Overload
@ResponseBody
@RequestMapping(value = "/validate/overload1", method = RequestMethod.GET)
public String overloadMethod(String name){
return name;
}
@ResponseBody
@RequestMapping(value = "/validate/overload2", method = RequestMethod.GET)
public String overloadMethod(String name,DnTest test){
return "DnTest:"+test.toString();
} 方式二
/验证 是否支持Overload
@ResponseBody
@RequestMapping(params = "m=method11")
public String method11(String name){
return name;
} @ResponseBody
@RequestMapping(params = "m=method11")
public String method11(int age,DnTest test){
return "DnTest:"+test.toString();
}
springmvc常见注解模式的更多相关文章
- SpringMVC常见注解
@RequestParam( value="name", require=false ) String wrap 参数绑定:require=false 表示前端对 name 这个 ...
- springMVC+springJDBC+Msql注解模式
最近基于Spring4.X以上的版本写了一个springMVC+springJDBC+Msql注解模式的一个项目,之中也遇到过很多问题 ,为了防止以后遇到同样问题现记录一下知识点以及详细配置. 首先我 ...
- 04springMVC结构,mvc模式,spring-mvc流程,spring-mvc的第一个例子,三种handlerMapping,几种控制器,springmvc基于注解的开发,文件上传,拦截器,s
1. Spring-mvc介绍 1.1市面上流行的框架 Struts2(比较多) Springmvc(比较多而且属于上升的趋势) Struts1(即将被淘汰) 其他 1.2 spring-mv ...
- springMVC的注解详解
springmvc常用注解标签详解 1.@Controller 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业 ...
- 一 : springmvc常用注解
springmvc常用注解详解1.@Controller在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层 ...
- 转:springmvc常用注解标签详解
Spring5:@Autowired注解.@Resource注解和@Service注解 - IT·达人 - 博客园--这篇顺序渐进,讲得超级好--此人博客很不错http://www.cnblogs.c ...
- springBoot注解大全JPA注解springMVC相关注解全局异常处理
https://www.cnblogs.com/tanwei81/p/6814022.html 一.注解(annotations)列表 @SpringBootApplication:包含了@Compo ...
- JAVA-SpringMVC基于注解模式第一个应用
项目文件结构 1. web.xml配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app x ...
- SpringMVC的注解方式配置
SpringMVC支持使用注解方式配置,比配置文件方式更加灵活易用,是SpringMVC使用的主流模式. 1.在配置文件中开启SpringMVC的注解 <!-- 开启包扫描 --> < ...
随机推荐
- Numpy基础笔记
Numpy简介 Numpy(Numerical Python的简称)是高性能科学计算和数据分析的基础包.其部分功能如下: ①ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组 ...
- 计算广义积分$$\int_0^{+\infty}\cos x^p {\rm d}x,\int_0^{+\infty}\sin x^p {\rm d}x, p>1$$
${\bf 解:}$ 在角状域$G=\{z\in\mathbb{C}|0<{\rm Arg}z<\frac{\pi}{2p}\}$上引入辅助函数$e^{iz^p}$, 其中$z^p=|z| ...
- Gnome Tetravex
zoj1008:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1008 题目意思是有一个游戏,即给出一个图,该图是由n*n个 ...
- 宏中"#"和"##"的用法
一.一般用法 我们使用#把宏参数变为一个字符串,用##把两个宏参数贴合在一起. 用法: #include<cstdio> #include<climits> using nam ...
- 如何定义让两个div横向排列
方法一: 一般情况,默认的div是写一个换一行,那么如何定义两个div横向排列而不换行呢? div默认的display属性是block.所以每一个div都是新的一行,现在把display换成inlin ...
- java 实现多种排序
public class Sort { //交换两个数 private void swap(int[] arr, int i,int j){ int temp = a ...
- 输出password
- POJ 3189 Steady Cow Assignment
题意:每个奶牛对所有的牛棚有个排名(根据喜欢程度排的),每个牛棚能够入住的牛的数量有个上限,重新给牛分配牛棚,使牛棚在牛心中的排名差(所有牛中最大排名和最小排名之差)最小. 题目输入: 首先是两个 ...
- 【最大流】BAPC2014 A Avoiding the Apocalypse (Codeforces GYM 100526)
题目链接: http://codeforces.com/gym/100526 http://acm.hunnu.edu.cn/online/?action=problem&type=show& ...
- openStack CentOS虚拟桌面iptables初始化配置