`
AILIKES
  • 浏览: 177507 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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")Stringname,@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基础.docx

    springmvc基础 包含代码+知识点+详细解释 1. 什么是springmvc? 2. springmvc框架原理 前端控制器、处理器映射器、处理器适配器、视图解析器 3. springmvc入门程序 目的:对前端控制器、处理器映射器、处理器...

    看透springMvc源代码分析与实践-扫描版本

    解压后大小(57.7M) 国内资深Web开发专家根据Spring MVC全新技术撰写,基于实际生产环境,从基础知识、源代码和实战3个维度对Spring MVC的结构和实现进行详细讲解 全面介绍Spring MVC的架构、原理、核心概念和操作...

    看透springMvc源代码分析与实践

    国内资深Web开发专家根据Spring MVC全新技术撰写,基于实际生产环境,从基础知识、源代码和实战3个维度对Spring MVC的结构和实现进行详细讲解 全面介绍Spring MVC的架构、原理、核心概念和操作,通过案例完整呈现...

    看透springMvc源代码分析与实践.pdf

    国内资深Web开发专家根据Spring MVC全新技术撰写,基于实际生产环境,从基础知识、源代码和实战3个维度对Spring MVC的结构和实现进行详细讲解 全面介绍Spring MVC的架构、原理、核心概念和操作,通过案例完整呈现...

    springmvc:Spring MVC教程

    本教程完整地讲解了Spring MVC的每个知识点,包括独立运行的Demo示例,欢迎一起交流学习。Java学习交流群:239126529 教程软件版本说明: 1)Spring MVC框架:spring-framework-5.0.2.RELEASE 2)开发工具:IntelliJ...

    【Java知识图谱】(高清、超详细)含Java的全部基础、Java高端开发,Java开发框架以及Java web开发数据库的知识点汇总,高并发,分布式服务

    本资源是【Java 知识图谱】(高清、超详细),包含Java的全部基础知识点、Java高端开发知识点,Java常用开发框架(Spring、Springboot、SpringMVC、Mybatis等)以及Java web开发及相关数据库的知识点汇总,高并发、...

    java面试常用知识点.docx

    面向对象:封装、继承、多态 Java基础:变量、数据类型、运算符、条件语句、循环语句、数组、集合、异常...常用的框架:Spring、SpringMVC、MyBatis、Hibernate等 分布式相关技术:Dubbo、Zookeeper、Redis、RocketMQ等

    XXX-JAVA开发工程师-1年经验简历模板

    熟悉java基础知识,熟练运用 Spring、SpringMVC、Mybatis、SpringBoot等框架进行项目开发 熟练使用Eclipse/IDEA 开发工具,熟练使用 Maven 构建多项目工程以及使用 Git 实施版本控制 熟练使用 Linux 以及 ...

    JavaEE求职简历-姓名-JAVA开发工程师-3年经验.docx

    熟练使用 Java 基础知识,有良好的编码习惯,熟练使用常用的 Java API。 &gt; 熟练运用 Spring、SpringMVC、Mybatis、Hibernate、SpringBoot、SpringData 等框架进行开发,熟悉 SSH、 SSM、SSS 整合开发。 &gt; 熟悉 POI ...

    必看1年-本科-程序员面试简历模版

     熟练掌握java基础知识,具有良好的编码习惯;  熟悉java高级特性,比如多线程编程、网络编程、反射、注解等;  熟练掌握javaweb技术,具有独立的开发能力,熟悉http协议,EL,JSTL表达式;  熟悉html、css...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part1

    7.2.1 Thymeleaf 基础知识 171 7.2.2 与Spring MVC 集成 174 7.2.3 Spring Boot 的Thymeleaf 支持 175 7.2.4 实战 177 7.3 Web 相关配置 182 7.3.1 Spring Boot 提供的自动配置 182 7.3.2 接管Spring Boot 的Web ...

    2023最新JAVA面试题集

    Git常用命令面试题 60道 Java并发编程最全面试题 123道 Kafka知识汇总 18道 Linux面试题 50道 Memcache 面试题 23道 MyBatis面试题 37道(含答案) MySQL高频面试题 40道(含答案) Netty面试题 20道 Nginx面试题 23...

    java_study_note:个人学习笔记

    以后不再维护,转移到笔记总览(source目录)反弹:Java笔记基础java知识点,基本全是代码+注释反射,注解,jdbc,javaweb,redis基本使用java并发基础,完善中。替代设计原理。 杂项,日常学习中遇见的一些问题,...

    SpringCloud技术栈微服务架构天猫商城企业级开发实战(附源码)

    通过本课程的学习,能够理解并掌握SpringBoot的基础知识,同时能够掌握SpringBoot与常用的第三方技术整合实现实际开发中的业务需求,包括实现Web开发、数据访问、缓存管理、安全管理、消息服务、任务管理等;...

    Java初中级程序员面试宝典

    Java初中级程序员面试宝典 ①熟悉Java基础、面向对象、JVM、IO流程、多线程、集合框架 ②熟悉JSP、Servlet、Spring、Hibernate、Mybatis、SpringMVC ③熟悉Http协议、Socket、WebService及网络编程 ④熟悉Maven及...

    java收银系统源码-Java-Interview:Java面试学习材料,架构资料,面试题总结:hot_beverage:

    Java基础 Java集合 Java多线程 JVM虚拟机 Spring系列(SpringIOC、SpringAOP、SpringMVC及SpringBoot) ORM(Mybatis) 数据库(Mysql和Redis) 微服务(Dubbo) 消息队列(RocketMQ) 计算机网络 操作系统(Linux系统) 微服务...

    xmljava系统源码-iyeeku:企业后台管理系统(个人学习,代码实战,知识积累储备)

    该项目编写目的:用于个人工作之余实战学习互联网开发一些常用技术:搜索、缓存、微服务等,解决方案,系统设计,知识储备积累等。 演示地址 特性 基于Spring + SpringMVC + MyBatis 开发 ,Maven管理项目,JDK1.8,...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【数据库】MySQL常用的四种引擎的介绍 118 【架构】简单描述MVC模式 120 【架构】RPC的介绍 121 什么叫RPC 121 RPC流程 121 【架构】SOA介绍 122 【Redis】redis五种常见的数据类型详解 123 String字符串类型 124 ...

Global site tag (gtag.js) - Google Analytics