概述

SpringMVC是一种基于Java的实现MVC设计模型的请求驱动类型的轻量级Web框架,属于SpringFrameWork的后续产品,已经融合在Spring WebFlow中。

SpringMVC快速入门

需求:

客户端不=发起请求,服务器端接收请求,执行逻辑并进行视图跳转

开发步骤:

  1. 导入SpringMVC相关坐标
  <dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.2.5.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.5.RELEASE</version></dependency>
  1. 配置SpringMVC核心控制器DispathcerServlet
  <!--在web.xml里面配置前端控制器--><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!--加载spring-mvc.xml配置文件--><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
  1. 创建Controller类和视图页面
  2. 使用注解配置Controller类中业务方法的映射地址
  3. 配置SpringMVC核心文件spring-mvc.xml
 <!--Controller的组件扫描--><context:component-scan base-package="com.zyh.controller"/>
  1. 客户端发起请求测试

spring-mvc.xml 里面常用的配置

配置内部资源视图解析器

 <!--配置内部资源视图解析器--><bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/pages/"></property><property name="suffix" value=".jsp"></property></bean>

SpringMvc的相关组件

  • 前端控制器:DispatcherServlet
  • 处理器映射器:HandlerMapping
  • 处理器适配器:HandlerAdater
  • 处理器:Handler
  • 视图解析器:View Resolver
  • 视图:View

SpringMVC的数据响应方式

  1. 页面跳转

    • 直接返回字符串
    • 通过ModelAndView对象返回
  @RequestMapping("/quick2")public ModelAndView save2(){/*model:模型 作用封装数据view:视图 作用展示数据*/ModelAndView modelAndView = new ModelAndView();//设置视图名称modelAndView.setViewName("success");return modelAndView;}
  1. 回写数据

    • 直接返回字符串将需要回写的字符串直接返回,但此时需要通过@ResponseBody注解告知SpringMVC框架,方法返回的字符串不是跳转是直接在http响应体中返回。
 @RequestMapping("/xxx")@ResponseBodypublic String quickMethod5() thows IOException{return "hello springMvc!!!";}
  • 返回对象或集合

    1. 在spring-mvc.xml里面配置处理映射
<!--配置处理器映射--><bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"><property name="messageConverters"><list><bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter"></bean></list></property></bean>
  1. 使用
   @RequestMapping("/quick3")@ResponseBody//期望SpringMVC自动将对象转换为json对象,spring-mvc.xml里面配置的处理映射实现的public User save3() throws JsonProcessingException {User user = new User();user.setUsername("zhangyuhang");user.setMoney(1000d);return user;}
  1. 配置mvc 的注解驱动
  • 在SpringMVC的各个组件中,处理器映射器、处理器适配器、视图解析器称为SpringMVC的三大组件。使用mvc:annotation-driven/自动加载

  • RequestMappingHandlerMapping(处理器映射器)和RequestMappingHandlerAdapter(处理器适配器),可用Spring-xml.xml配置文件中使用mvc:annotation-driven/代替注解处理器和适配器的配置。

  • 同时使用mvc:annotation-driven/默认底层就会集成Jackson进行对象或集合的json格式字符串的转换

                  <!--配置MVC注解驱动 --><mvc:annotation-driven/>

SpringMVC获取请求数据

获取请求参数

基本类型参数

Controller中的业务方法的参数名称要与请求参数的name一致,参数值会自动映射匹配

 //http://localhost/user/quick4?username=zs&age=12@RequestMapping("/quick4")@ResponseBodypublic void save4(String username,int age) {System.out.println(username);System.out.println(age);}

POJO类型参数

Controller中的业务方法的POJO参数的属性名与请求参数的name一致,参数值会自动映射匹配

    //http://localhost/user/quick5?username=zs&money=16@RequestMapping("/quick5")@ResponseBodypublic void save5(User user) {System.out.println(user);}

数组类型参数

Controller中的业务方法数组名称与请求参数的name一致,参数会自动映射匹配

 //http://localhost/user/quick6?strs=111&strs=222&strs=333@RequestMapping("/quick6")@ResponseBodypublic void save6(String[] strs) {System.out.println(strs);for (String str : strs) {System.out.println(str);}}

集合类型参数

获取集合参数时,要将集合参数包装到一个POJO中才可以

    public class VO {private List<User> userList;@Overridepublic String toString() {return "VO{" +"userList=" + userList +'}';}public List<User> getUserList() {return userList;}public void setUserList(List<User> userList) {this.userList = userList;}}
 <form action="/user/quick7" method="post"><input type="text" name="userList[0].username"><br/><input type="text" name="userList[0].money"><br/><input type="text" name="userList[1].username"><br/><input type="text" name="userList[1].money"><br/><input type="text" name="userList[2].username"><br/><input type="text" name="userList[2].money"><br/><input type="submit" name="提交" value="提交"></form>
     @RequestMapping("/quick7")@ResponseBodypublic void save7(VO vo) {System.out.println(vo);}

当使用Ajax提交时,可以指定contentType为json形式,那么在方法参数位置使用@RequestBody可以直接接受集合数据而无需使用POJO进行包装。

  <script src="${pageContext.request.contextPath}/js/jquery-1.11.3.js"></script><script>var userList = new Array();userList.push({username:"zs",money:12})userList.push({username:"ls",money:22})$.ajax({type:"POST",url:"${pageContext.request.contextPath}/user/quick8",data:JSON.stringify(userList),contentType:"application/json;charset=ytf-8"})</script>
  @RequestMapping("/quick8")@ResponseBodypublic void save8(@RequestBody List<User> userList) {System.out.println(userList);}

转换为json字符串

  1. 导入依赖
        <dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version>
  1. 使用方法
           @RequestMapping("/quick")@ResponseBodypublic String save() throws JsonProcessingException {User user = new User();user.setUsername("zhangyuhang");user.setMoney(1000d);//使用json工具将对象转换为json字符串在返回ObjectMapper objectMapper = new ObjectMapper();String json = objectMapper.writeValueAsString(user);return json;}

放行静态资源

 <mvc:resources mapping="/js/**" location="/js/"/><!--下面的这行代码可以放行所有的静态资源--><mvc:default-servlet-handler/>

请求数据乱码问题

   <!--在web.xml里面配置全局过滤中文乱码--><!--配置全局过滤请求乱码--><filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>

参数绑定注解@RequestParam

当请求的参数名称与Controller的业务方法参数名称不一致时,就需要通过@RequestParam注解显示的绑定

获取Restful风格的参数

  • Restful是一种软件架构风格、设计风格,而不是标准按,只是提供了一组设计原则和约束条件。主要用于客户端和服务器交互类的软件,基于这个风格的软件设计可以更简洁,更有层次,更易于实现缓存机制等。

    • Restful风格的请求是使用“url+请求方式”表示一次请求的目的,HTTP协议里面四个表示操作方式的动词如下:
    • GET:用于获取资源
    • POST:用于新建资源
    • PUT:用于更新资源
    • DELETE:用于删除资源
 //http://localhost/user/quick10/zhangsan@RequestMapping("/quick10/{name}")@ResponseBodypublic void quick10(@PathVariable(value="name" required=true) String name){System.out.println(name);}

自定义类型转换器开发步骤

定义转换器类实现Converter接口

  /*** 字符串转日期的工具类*/public class StingToDateConverter implements Converter<String, Date> {/**** @param s 传入进来的字符串* @return*/@Overridepublic Date convert(String s) {if(s == null){throw new RuntimeException("日期数据为空");}DateFormat df = new SimpleDateFormat("yyyy-MM-dd");try {return df.parse(s);}catch (Exception e){throw new RuntimeException("日期数据转换错误");}}}

在配置文件中声明转换器

 <!--配置自定义类型转换器--><bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean"><!--把自己定义的自定义类型转换类注入进来--><property name="converters"><set><!--list--><bean class="com.utils.StingToDateConverter"></bean></set></property></bean><!--开启SpringMVC框架的注解支持 加上自定义转换器,让自定义类型转换器生效--><mvc:annotation-driven conversion-service="conversionServiceFactoryBean"/>

获取请求头

@RequestHeader

  • 使用@RequestHeader可以获取请求头信息,相当于web学习阶段的request.getHeader(name)
  • @RequestHeader注解的属性如下:
    • value:请求头的名称
    • required:是否必须携带此请求头

@CookieValue

  • 使用@CookieValue可以获得指定Cookie的值
  • @CookieValue注解的属性如下:
    • value:指定cookie的名称
    • required:是否必须携带此cookie

SSM——SpringMVC笔记1相关推荐

  1. SSM框架专题-从零入门SpringMVC笔记

    从零入门的SpringMVC笔记 一.Spring概述 1. SSM框架优化的方向 2.SpringMVC框架的优点 3. 时序图解析 4.SpringMVC的执行流程 二.SpringMVC注解式开 ...

  2. ssm整合笔记(1)-curd

    1.建立相关的github地址 https://github.com/MRtianyanxiaobai/ssm_curd 建立好相关网址后,配置IDEA 的git环境 ssm整合笔记(1)-curd ...

  3. 狂神说SpringMVC笔记(全网最全)

    SpringMVC 狂神说SpringMVC笔记(全网最全) 1.回顾MVC 1.1.什么是MVC MVC是模型(Model).视图(View).控制器(Controller)的简写,是一种软件设计规 ...

  4. 【SpringMVC 笔记】控制器 Controller 与 RestFul 风格

    SpringMVC 笔记 控制器 Controller 实现 Controller 接口 创建控制器 @Controller 注解创建控制器 @RequestMapping 使用 method 属性指 ...

  5. 开涛SpringMVC笔记

    SpringMVC笔记 再次学习开涛SpingMVC,总结此笔记,鸣谢开涛: 1.SpringMVC简介 2.Spring MVC-HelloWorld 3.DispatcherServlet理解 4 ...

  6. 狂神SpringMvc笔记

    目录 SpringMvc笔记 一.什么是mvc 1.Model2时代 2.回顾Servlet 4.Spring MVC的特点: 5.中心控制器 6.SpringMVC执行原理 7. 第一个MVC程序 ...

  7. 跟杨春娟学SpringMVC笔记:Form表单之JSR303验证

    跟杨春娟学SpringMVC笔记:Form表单之JSR303验证 完成:第一遍 1.如何使用JSR303验证要先导入validation-api和hibernate-validator的依赖jar包? ...

  8. 跟杨春娟学SpringMVC笔记:Form表单之Spring验证框架

    跟杨春娟学SpringMVC笔记:Form表单之Spring验证框架 完成:第一遍 1.Spring框架验证和JSR303验证的不同之处在哪里? 不同一:Spirng框架验证需要实现Validator ...

  9. 1 (SSM) springMVC + spring + Mybatis(MySQL)学习笔记 ------ 阶段成果笔记

    学习了一段时间spring,springMVC和Mybatis,从开始学到现在熬了好多夜晚,好几个深夜和bug作战,真是难受. 打算写系列学习笔记,第一篇从一个小的成果说起吧,刚刚学的看这篇可能有点吃 ...

  10. (续)SSM整合之springmvc笔记(@RequestMapping注解)(P124-130)

    目录 @RequestMapping注解 一.准备工作 1 新建spring_mvc_demo    com.atguigu 2. 导入依赖 3 .添加web模板 4 . 在web.xml里面进行进行 ...

最新文章

  1. 昨天又帮爸DIY了一台工作电脑
  2. struts入门day04
  3. 2008年最受欢迎的资源TOP100
  4. Windows 查看所有进程命令tasklist
  5. MongoDB投影字段
  6. 转行程序员?你可能忽略了一件事。
  7. iOS动画:带时分秒指针的时钟动画(上)
  8. perl脚本中的ENDOFINPUT
  9. Linux用apt命令安装软件
  10. string数组转换成int数组,数组转字符串,字符串转list,list集合转字符串,删除数组中为空的元素,list转数组 数组转list
  11. 马哥python全栈培训怎么样,你只需要在马哥教育待四个月
  12. php 减号,PHP编码转换减号(连接符)无法转换问题
  13. (转)Django新手需要注意的10个要点
  14. 微信开发者工具使用git
  15. 152. 精读《recoil》
  16. FBG光纤反射器,FTTX网络链路监控的理想光端
  17. 个人简历自我介绍PPT模板-优页文档
  18. 微信小程序---页面事件
  19. cordova App脚手架
  20. 【openstack】Designate组件,入门级安装(快速)

热门文章

  1. Linux系列课程之一Linux的介绍
  2. 一首记忆深刻的诗:《昭君出塞》
  3. QT应用编程: Visual Studio里编写activex控件在网页中运行(dll插件形式)
  4. 计算器存储功能怎么用_数控车床加工刀具补偿功能怎么用?
  5. leetcode-739.每日温度-单调栈
  6. 算法Big O Notation
  7. 搜狗拼音输入法自定义格式的时间和日期并快捷键触发
  8. KM小鼠大脑海马区生理切片HE染色
  9. jQuery侧边导航栏模块交互效果,导航栏点击事件、卷动事件、节流阀
  10. linked list C++实现