一、SpringMVC的数据响应

1.1 数据响应方式

1.1.1 页面跳转

  1. 直接返回字符串

    返回的字符串与内部资源视图解析器的前后缀拼接 进行访问(默认为转发)

  2. 通过ModelAndView对象返回

<%@ page isELIgnored="false" %>
@RequestMapping("/save2")
//注入思想由Spring提供参数的创建
public ModelAndView save2(ModelAndView modelAndView){
//设置视图名称
modelAndView.setViewName("success");
//添加模型数据,相当于存储于域中
modelAndView.addObject("username","gyb");
System.out.println("ModelAndView..");
return modelAndView;
}

1.1.2 回写数据

  1. 直接返回字符串
  • 通过写形参注入Response对象,然后调用getWriter.print()

  • 加入@ResponseBody,告诉Spring是直接返回字符串(消息体)

    • /**
      * 返回字符串
      */
      @RequestMapping("/save3")
      @ResponseBody
      public String save3(){
      return "saving..";
      }
    • 返回json格式字符串导入坐标

    • <!--    json-->
      <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>
      </dependency>
    • 添加mvc注解驱动

      <!--mvc注解驱动-->
      <mvc:annotation-driven/>
      /**
      * 返回json格式
      */
      @RequestMapping("/save4")
      @ResponseBody
      public User save4(){
      User user = new User();
      user.setUsername("gyb");
      user.setPassword("123");
      //返回json格式的字符串
      return user;
      }
  1. 返回对象或集合

二、SpringMVC的请求

2.1 请求参数类型

  • 基本类型参数

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

    /**
    * 获取基本请求参数
    */
    @RequestMapping("/save5")
    @ResponseBody
    public void save5(String username, String age){
    System.out.println(username);
    System.out.println(age);
    }
  • POJO类型参数

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

    /**
    * 获取POJO类型参数
    */
    @RequestMapping("/save6")
    @ResponseBody
    public void save6(User user){
    System.out.println(user);
    }
  • 数组类型参数

    /**
    * 获取数组类型参数
    */
    @RequestMapping("/save7")
    @ResponseBody
    public void save7(String str[]){
    System.out.println(Arrays.asList(str));
    }
  • 集合类型参数

请求体的数据是json格式的,并且为application/json,才可以进行自动映射封装

/**
* 集合类型参数
*/
@RequestMapping("save8")
@ResponseBody
//在参数前添加请求体注解
public void save8(@RequestBody List<User> userList){
System.out.println(userList);
}

2.2 参数绑定注解@requestParam

  • value:与客户端的请求参数名相同即可接受任意请求参数

  • required:次在指定的请求参数是否必须存在,默认为true

  • defaultValue:客户端没有请求参数时,默认值

    /**
    * 参数绑定注解
    */
    @RequestMapping("save9")
    @ResponseBody
    //注解中的username为请求参数名,与前台对应
    public void save9(@RequestParam(value = "username" ,defaultValue = "123") String name){
    System.out.println(name);
    }

2.3 Restful风格的参数获取

在Restful风格中,现有规定如下:

  • GET(SELECT):从服务器查询,可以在服务器通过请求的参数区分查询的方式。
  • POST(CREATE):在服务器新建一个资源,调用insert操作。
  • PUT(UPDATE):在服务器更新资源,调用update操作。
  • DELETE(DELETE):从服务器删除资源,调用delete语句

2.4 获取请求信息

获取请求头的参数cookie的参数

/**
* 获取请求信息
* 获取请求头信息(userAgent)
*/
@RequestMapping("save10")
@ResponseBody
public void save10(@RequestHeader("User-Agent") String userAgent){
System.out.println(userAgent);
}
/**
* 获取请求信息
* 获取cookie的JSESSIONID
*/
@RequestMapping("save11")
@ResponseBody
public void save11(@CookieValue ("JSESSIONID") String JSESSIONID){
System.out.println(JSESSIONID);
}

2.5 文件上传

2.5.1 文件上传客户端三要素

  • 表单项 type="file"
  • 表单的提交方式是 post
  • 表单的enctype属性是多部分表单形式,及enctype="multipart/form-date"

2.5.2 单文件上传步骤

  1. 导入fileupload和io坐标
<!--    fileupload-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<!-- io-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
  1. 配置文件上传解析器
<!--    配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"/>
<property name="maxUploadSize" value="500000"/>
</bean>
  1. 编写文件上传代码
/**
* 文件上传
*/
@RequestMapping("fileUpload")
@ResponseBody
public void fileUpload(String username, MultipartFile uploadFile){
System.out.println(username);
System.out.println(uploadFile);
}

2.6 注意:

静态资源无法找到映射,需要配置spring-mvc.xml

<!--    开放资源访问-->
<!-- 1.交给默认处理-->
<mvc:default-servlet-handler/>
<!-- 2.开放js资源-->
<mvc:resources mapping="/js/**" location="/js/"/>

el表达式在jsp中放行

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>

SpringMVC笔记(2)的更多相关文章

  1. SpringMVC笔记——SSM框架搭建简单实例

    落叶枫桥 博客园 首页 新随笔 联系 订阅 管理 SpringMVC笔记——SSM框架搭建简单实例 简介 Spring+SpringMVC+MyBatis框架(SSM)是比较热门的中小型企业级项目开发 ...

  2. SpringMvc 笔记

    整理出来是 SpringMvc 笔记 方便以后查询 框架太多了 不经常使用 忘记的可能性很大 自己整理一套笔记 一看就明白了 1 对比 原始请求响应流程 1 发送请求 --> 2 控制层 --& ...

  3. 初学者的springmvc笔记02

    springmvc笔记 springmvc拦截器,spring类型转换,spring实现文件上传/下载 1.SpringMVC标准配置 导入jar包:core contaner 在web.xml文件中 ...

  4. SpringMVC笔记

    Struts1是采用单例模式的,在并发访问中出来资源混乱,于是出现Struts2被设计为多例的解决并发产生的 数据混乱由于Struts2引入了值栈,拦截器,OGNL等,,,是访问速度下降在原生的JSP ...

  5. 框架SpringMVC笔记系列 二 传值

    主题:SpringMVC(第一节中再回顾复习一次) 学习资料参考网址: 1.http://www.icoolxue.com 2.http://haohaoxuexi.iteye.com/blog/13 ...

  6. 框架SpringMVC笔记系列 一 基础

    主题:SpringMVC 学习资料参考网址: 1.http://www.icoolxue.com 2.http://aokunsang.iteye.com/blog/1279322 1.SpringM ...

  7. 传智springMVC笔记

    springmvc 第一天 springmvc的基础知识 课程安排: 第一天:springmvc的基础知识 什么是springmvc? springmvc框架原理(掌握) 前端控制器.处理器映射器.处 ...

  8. springmvc笔记(来自慕课网)

    1.准备工作:springmvc相关的jar包. 2.这里我们先用eclipse来操作. 首先看一个接口编程,后面的所有知识点都是通过这个接口编程引出的. OneInterface.java pack ...

  9. springmvc笔记(基本配置,核心文件,路径,参数,文件上传,json整合)

    首先导入jar包 大家注意一下我的springmvc,jackson,common-up的jar包版本.其他版本有可能出现不兼容. src文件: webroot目录: web.xml <?xml ...

  10. SpringMvc笔记-对RESTFUL风格的配置

    1.@RequestMapping注解可以使用如下参数: 1,params:例如params={'username',"age!=100"}表示需要usernmame并且age 属 ...

随机推荐

  1. 为什么要配置java环境变量

    Java环境变量,真的还有必要配吗? 作为年龄上堪称老鸟而技术上却是菜鸟的老菜鸟,为了祖国的编程事业,不惜拿出一个月工资,淘了一台配置稍高的二手笔记本,打算与老笔记本中的撸啊撸片彻底说再见,誓要在新机 ...

  2. Mac终端美化(iterm2+zsh+oh-my-zsh+powerlevel10k)

    iterm2+zsh+oh-my-zsh+powerlevel10k 一.下载iterm2 方式一:官网下载 https://iterm2.com/ 方式二:百度云下载 链接: https://pan ...

  3. 使用JavaScript输出带有边框的乘法表

    在学习JavaScript(以下简称为js)过程中,会遇到输出9*9乘法表的问题,我们都知道利用双重for循环可以很简单的在网页中打印出来,可是你在做的过程中有没有想着给这个乘法表加一点花样呢? 下面 ...

  4. WIN XP SP2系统经常性死机问题解决历程

    如题: 1.初始时,XP还能进入系统,等系统3分钟左右,鼠标熄灭,键盘无反应,查看资源管理器CPU 100%,内存占用不高. 2.现象初步分析: a.怀疑是病毒占用CPU 100%,于是下载360安全 ...

  5. js学习笔记之排序算法的原理及代码

    冒泡排序 比较任何两个相邻的项,如果第一个比第二个大,则交换它们 重复这样的操作,直到排序完成,具体代码如下: let arr = [67,23,11,89,45,76,56,99] function ...

  6. 用webpack发布一个vue插件包

    创建库 本来以为很简单,结果配置了webpack之后,运行build就报错了,似乎不认识es6语法,于是先后安装了几个包: @babel/core @babel/preset-env babel-lo ...

  7. 记一次针对excel导出的优化

    最近发现我们系统导出excel文件时由于是导出百万级数据导出,速度过慢并且内存占用多,故进行了下面的一次优化. 我们使用apache的poi进行excel文件操作 主要耗时: 1.从数据库得到需要导出 ...

  8. CTF中的序列化与反序列化

    记一些CTF出现的序列化与反序列化的知识点和题目. 序列化和反序列化的概念 序列化就是将对象转换成字符串.字符串包括 属性名 属性值 属性类型和该对象对应的类名. 反序列化则相反将字符串重新恢复成对象 ...

  9. Java容器学习——List

    Java容器学习--List 基础知识 数组: ​ 优点:随机存取,可以快速访问元素 ​ 缺点:静态分配内存,存在空间闲置或者溢出现象:不适合进行插入和删除操作,需要移动大量元素. 链表: ​ 优点: ...

  10. Java代码编写、代码优化技巧总结

    随着工作经验的积累,在代码编写和优化方面,个人的心得体会总结以及有些从网上或书本中看到的有用技巧 1. 判断何时使用keySet()和entrySet() 获取Map 的key 和value 当循环中 ...