前言:

  本篇笔记是LZ在之前学习 SpringMVC 框架时所的记录,分两篇分享,此篇为基础篇,包括 SpringMVC 环境在 Eclipse 中的搭建,SpringMVC 的 HelloWorld,常用注解:@RequestMapping、@PathVariable、@RequestParam、 @SessionAttributes、@ModelAttribute等,REST 风格的 URL 的使用、使用 POJO 对象绑定请求的参数、在 SpringMVC 的处理器的方法中使用原生的 Servlet 的 API、处理模型数据、@ModelAttribute 的源码分析、SpringMVC 的视图解析器及其流程的分析,最后还有一个 SpringMVC 的 CRUD 小案例。

  笔记中提供了大量的代码示例,需要说明的是,大部分代码示例都是以图片的形式展示的,所有的图片都是来自本人所敲代码的截图,不足之处,请大家指正~

一、SpringMVC 的 HelloWorld

1.加入 jar 包  spring-framework-4.0.0.RELEASE\libs 下的 spring 基本 jar 包和 apache-commons\commons-logging-1.1.1 下的日志包

2.配置 web.xml 文件 Alt + / 选择 dispatcherservlet

注:实际上也可以不通过 contextConfigLocation 来配置 SpringMVC 的配置文件,而是使用默认的,默认的配置文件的路径和名字为:/WEB-INF/<servlet-name>-servlet.xml 其中 <servlet-name> 为 web.xml 文件中的配置的 SpringMVC 的 <servlet-name> 属性值

3.类路径下新建 Spring 的配置文件 springmvc.xml 选择 beans  context  mvc 约束

4.编写请求处理器类,在 springmvc.xml 中配置自动扫描的包,并为处理器类添加处理器标志注解

4.编写视图:index.jsp;在请求处理器类中通过 @RequestMapping(xxx) 的方式来映射请求的 URL;在 springmvc.xml 文件中配置视图解析器

二、@RequestMapping 映射请求

1.@RequestMapping 既可以修饰类又可以修饰方法

若在类上使用了 @RequestMapping("/springmvc"),则对应 view  层的请求为:

2. @RequestMapping 的 value method 属性

① value 属性:指定映射的 URL

② method 属性: 指定映射的请求方式

3. @RequestMapping 的 params 和 headers 属性 (了解即可,不常用)

① params 属性:指定映射的请求参数

② headers 属性: 指定映射的请求头

4. @RequestMapping 的 Ant 风格的路径,即使用通配符 (了解即可)

5. 补充: @PathVariable(xxx) 注解可以来映射 URL 中的占位符到目标方法的参数中

三、REST

1.简介:即Representational State Transfer。(资源)表现层状态转化。是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便, 所以正得到越来越多网站的采用

2.HTTP协议里面,四个表示操作方式的动 词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET用来获取资源,POST用来新建资源,PUT用来更新资源,DELETE用来删除资源

3.以 CRUD 为例,演示 REST 风格 URL 的使用

1)在 web.xml 中配置 HiddenHttpMethodFilter 过滤器,此过滤器可以将 POST 请求转换为 DELETE 或 PUT 请求

2)在 jsp 页面中模拟发送 GET POST DELETE PUT 请求

3) 在请求处理器类中编写 GET POST DELETE PUT 请求各自对应的方法,通过 @PathVariable 注解获取请求的参数,即 id

四、 @RequestParam 注解 (重要,常用)

1.@RequestParam 注解可以在请求方法中获取请求的参数

2.具体获取:

五、@RequestHeader 注解 (了解)

1. 在请求方法中映射(获取)请求头的信息

2. 使用

六、@CookieValue 注解 (了解)

1.根据 Cookie 的 key 获取 Cookie 的 value

2.使用

七、使用 POJO 对象绑定请求的参数  (POJO:普通的 Java 类) (常用)

1.构建 User 类和 Address 类,其中 User 类中包含 Address 对象

2.在 view 层构建表单 (index.jsp 中)

3.在请求控制器类中编写请求方法

八、在处理器的方法中使用原生的 Servlet 的 API (常用)

九、处理模型数据

1. ModelAndView 作为处理器方法的返回值

2. 向目标方法添加 Map 类型的参数

3. @SessionAttributes 注解 (常用) 注:此注解只能放在类上,不能放在方法上

1)作用:① 通过属性名指定需要放到会话中的属性(使用 @SessionAttributes 注解的 value 属性)  ② 通过模型属性的对象类型指定哪些模型属性需要放到会话中(使用 @SessionAttributes 的 types 属性)

2)演示;

4. @ModelAttribute 注解 (类似于 Struts2 中的 Preparable)

1)应用场景:只对一个对象的部分属性进行修改,而不需要修改的属性需要保持原样不能为 null

2)具体使用及注意事项:

3)使用 @ModelAttribute 注解在 SpringMVC 中的源码分析 (了解)

4)结论,需要记住

5)补充

十、视图解析器及其流程的分析  (默认使用的是 InternalResourceView 视图解析器)

1、 InternalResourceViewResolver 视图解析流程

2.、 JstlView 视图解析器 (若项目中使用了 JSTL,则 SpringMVC 会自动把视图由 InternalResourceView转为 JstlView

使用 JSTL 的 fmt 标签模拟国际化:

1)新建三个国际化资源文件

2)在 jsp 页面中引入 jstl,使用 fmt 标签

3)在 SpringMVC 的配置文件中配置国际化资源文件

3、mvc:view-controller 标签:配置直接转发的页面,配置的路径可以直接响转发的页面,而无需再经过 Handler 的目标方法

测试:在 url 中输入:http://localhost:8888/springmvc-1/success (LZ 将 Tomcat 的端口号修改为了 8888)

注:使用此注解必须配置另一个注解:mvc:annotation-driven

4、 自定义视图

1)创建视图类,实现 View 接口,实现两个方法

2)SpringMVC 配置文件中配置 BeanNameViewResolver 视图解析器

3)测试:

5、重定向到目标页面

十一、SpringMVC 的 CRUD 小案例

1.按照之前的步骤搭建 SpringMVC 的环境

2.注意点:

1)在 jsp 页面中使用 SpringMVC 的 form 表单标签:

jsp 页面:

更正:上图中应该是 form:radiobuttons 而不是 form:checkboxes

请求处理器类中:

2)SpringMVC 处理静态资源文件

解决:

3)如何将 GET 请求转换为 POST 请求,再转化为 DELETE 请求

GET 请求:

GET ---> POST:

4)关于 _method ,将 POST 请求转为 PUT 或 DELETE 请求

深入浅出 SpringMVC - 1的更多相关文章

  1. 深入浅出 SpringMVC - 2 提升篇

    前言: 本篇笔记是继 深入浅出 SpringMVC - 1 后的续篇,主要介绍了 SpringMVC 的实际小应用,包括 SpringMVC 的数据格式化.使用 JSR 303 验证标准 在 Spri ...

  2. Spring框架系列(5) - 深入浅出SpringMVC请求流程和案例

    前文我们介绍了Spring框架和Spring框架中最为重要的两个技术点(IOC和AOP),那我们如何更好的构建上层的应用呢(比如web 应用),这便是SpringMVC:Spring MVC是Spri ...

  3. 【SSH系列】深入浅出SpringMvc+入门Demo

    Spring MVC框架是有一个MVC框架,通过实现Model-View-Controller模式来很好地将数据.业务与展现进行分离.从这样一个角度来说,Spring MVC和Struts.Strut ...

  4. Spring、SpringMVC、SpringData + JPA 整合详解

    原创播客,如需转载请注明出处.原文地址:http://www.cnblogs.com/crawl/p/7759874.html ------------------------------------ ...

  5. 深入浅出Spring(五) SpringMVC

    上一篇深入浅出Spring(四) Spring实例分析的博文中,咱们已经可以了解Spring框架的运行原理和实现过程,接下来咱们继续讲解Spring的一个延伸产品——Spring MVC 1.Spri ...

  6. SpringMVC深入浅出(一)

    1.Springmvc是什么 是一个表现层框架,用于接受请求及参数,响应请求回显数据. 2.SpringMVC处理流程 SpringMVC流程 1.  用户发送请求至前端控制器DispatcherSe ...

  7. SSM-SpringMVC-04:SpringMVC深入浅出理解HandleMapping(源码刨析)

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- 先从概念理解,从中央调度器,携带参数request,调度到HandleMapping处理器映射器,处理器映射器 ...

  8. 深入浅出Struts2+Spring+Hibernate框架

    一.深入浅出Struts2 什么是Struts2? struts2是一种基于MVC的轻量级的WEB应用框架.有了这个框架我们就可以在这个框架的基础上做起,这样就大大的提高了我们的开发效率和质量,为公司 ...

  9. 深入浅出JMS(四)--Spring和ActiveMQ整合的完整实例

    第一篇博文深入浅出JMS(一)–JMS基本概念,我们介绍了JMS的两种消息模型:点对点和发布订阅模型,以及消息被消费的两个方式:同步和异步,JMS编程模型的对象,最后说了JMS的优点. 第二篇博文深入 ...

随机推荐

  1. 团队作业8——第二次项目冲刺(Beta阶段)--5.21 second day

    团队作业8--第二次项目冲刺(Beta阶段)--5.21 second day Day two: 会议照片 项目进展 今天是beta冲刺的第二天,组长还在准备考试当中,我们继续做前端改进和后端安排,今 ...

  2. 结对作业-基于GUI的四则运算

    一.需求分析 1.题目要求: 我们在个人作业1中,用各种语言实现了一个命令行的四则运算小程序.进一步,本次要求把这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linux,web ...

  3. 【Alpha】——First scrum Meeting

    一.今日站立式会议照片 二.每个人的工作 成员 昨天已完成的工作 今天计划完成的工作 · 李永豪 编写测试计划 学习JAVA编程及UI设计 · 郑靖涛 Alpha任务分配计划 学习JAVA编程及UI设 ...

  4. 201521123045 《Java程序设计》第6周学习总结

    Java 第六周总结 1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结.注1:关键词与内容不求多,但概念之间的 ...

  5. 201521123055 《Java程序设计》第4周学习总结

    1. 本章学习总结 2. 书面 Q1.注释的应用使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) Q2.面向对象设计 2.1 将在网上商城购物或者在班级博客进行 ...

  6. 201521123044 《Java程序设计》第11周学习总结

    1. 本章学习总结 2. 书面作业 本次PTA作业题集多线程 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synchronized修饰方法实现互斥同步访问, ...

  7. javaScript【创建对象、创建类、成员变量、方法、公有和私有、静态】

    创建对象 方式① 直接使用new Object() var obj = new Object(); 方式② 使用空的{}大括号 var obj2 = {}; 测试 增加属性,访问属性 我们要为创建的对 ...

  8. [07] String字符串

    1.相同又不同的字符串 String str1 = new String("String"); String str2 = "String"; String s ...

  9. 《Head First Java》读书笔记(1) - Java语言基础

    <Head First Java>(点击查看详情) 1.写在前面的话 这本书的知识点说实话感觉有点散乱,但是贵在其将文字转换成了生动和更容易接受的图片,大量的比喻让人感受到了知识点的有趣之 ...

  10. JavaScript基础回顾

    1, NaN 不是数字  Infinity 无穷大 alert(parseInt("dd")); //NaN alert(1/0); //Infinity 2, 逻辑或 || ,返 ...