首页 > 编程语言 > 详细

SpringMVC常用基础知识

时间:2015-01-27 02:14:12      阅读:420      评论:0      收藏:0      [点我收藏+]

SpringMVC+mybatis HTML5 全新高大尚后台框架_集成代码生成器

?

常用注解元素

?

@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+mybatis HTML5 全新高大尚后台框架_集成代码生成器

?

SpringMVC常用基础知识

原文:http://fuyi68615.iteye.com/blog/2180109

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!