SpringMVC常用基础知识转 springmvc常用的注解

SpringMVC常用基础知识【转】 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(“attributename”) 或者通过

${ attribute name } EL表达式访问模型对象中的 属性对象

如果希望在ModelMap 的作用域范围为 session,可以有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 @SessionAttributes 注解来实现 如:

@Controller

@RequestMapping("/login.do")

@SessionAttributes("currUser")

public class BbtForumController{。。。。。}

@ResponseBody

标注后 返回String对象的结果为response内容体,不标注的话 作为dispatcherurl使用

@PathVariable

允许将请求路径的制定内容当做求情的参数使用

返回类型

请求处理方法入参的可选类型说明

void 此时逻辑视图名由请求处理方法对应的 URL 确定,如以下的方法:

@RequestMapping("/welcome.do")

public void welcomeHandler(){

}

对应的逻辑视图名为“welcome”

String此时逻辑视图名为返回的字符,如以下的方法:

@RequestMapping(method =RequestMethod.GET)

public StringsetupForm(@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 andUseCase

@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(HttpServletRequestrequest){

request.setAttribute("message", "multiReqPath1方法被调用");

return "springmvc/common";

}

@RequestMapping("/springmvc/multiReqPath2.do")

public String multiReqPath2(HttpServletRequestrequest){

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,HttpServletRequestrequest){

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,HttpServletRequestrequest){

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,HttpServletRequestreq){

req.startAsync();

Date startTime = new Date();

try {

Thread.currentThread().sleep(delay);

} catch (InterruptedExceptione) {

e.printStackTrace();

}

Date entTime = new Date();

return "name:"+name+","+"pwd:"+pwd+","+"delay:"+delay+",startTime:"+

DateUtils.formatDate(startTime,"yyyy-MM-ddHH:mm:ss:SSS")+",endTime:"+

DateUtils.formatDate(entTime,"yyyy-MM-ddHH: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();

}

  

爱华网本文地址 » http://www.413yy.cn/a/25101014/209584.html

更多阅读

告诉你招聘常用的人才测评方法 人才测评方法与应用

人才测评方法是测试者个体自我、发掘潜能的有效途径。我国企业在招聘时都要进行人才测评。招聘常用的人才测评方法也是相对比较固定的,有规律可循。具体的方法下面一起来看一下。人才测评方法是以现代心理学和行为科学为基础,运用现

近一年常用的10款香水。_sasa sasa香水

我有过的香水,尽管不能和发烧友媲美,但数量算下来也不少了。一直想要把喜欢常用的几枚集中写写,一直拖沓到现在。我是个每天都需要喷香水的人,但自我觉得,每个人对香水的理解有所不同,而写香评更不是件容易的事儿,因为比较主观,形容上也较抽

闲谈CFD6 ——FLUENT中常用的湍流模型 fluent湍流设置

本文内容摘自《精通CFD工程仿真与案例实战》。实际上也是帮助文档的翻译,英文好的可直接参阅帮助文档。FLUENT中的湍流模型很多,有单方程模型,双方程模型,雷诺应力模型,转捩模型等等。这里只针对最常用的模型。1、湍流模型描述

电脑常用运行命令图文教程9篇 电脑常用的运行命令

2.实用网络管理命令详解3.所有windows版本命令集合大全4.电脑基础知识 NET 命令大全 (3篇)5.你必须学会的几个常用网络测试命令6.计算机管理命令大全7.黑客常用CMD命令详解***********************************************1.电脑常

常用电子元件基础知识(图解) 电子元器件的基础知识

电容电容器俗称电容。它是在两个金属电机之间夹了一层电介质构成。所以它具有了存储电荷的能力。所以在理论上,它对直流电流具有隔断的作用,而交流电流则可以通过,随着交流频率越高,它通过电流的能力也越强。一些常用电容器外观见图1。

声明:《SpringMVC常用基础知识转 springmvc常用的注解》为网友晚风诉情衷分享!如侵犯到您的合法权益请联系我们删除