对应工程为springmvc-response,springmvc-file-upload,springmvc-file-upload-crossweb

1.返回值分类

1.1 字符串

//response.jsp
<body><a href="user/testString">testString</a>
</body>//Controller类
@Controller
@RequestMapping("/user")
public class userController {@RequestMapping("/testString")public String testString(Model model) {System.out.println("testString方法执行了");//模拟从数据库中获取user对象User user = new User();user.setUsername("佳琪");user.setPassword("123");user.setAge(45);model.addAttribute("user" ,user);return "success";}
}//success.jsp
<body><h3>执行成功</h3>${user}${user.username}${user.password}
</body>

1.2 void类型

    <a href="user/testVoid">testString</a><br>@RequestMapping("/testVoid")public void testVoid(Model model) {System.out.println("testVoid方法执行了");}


如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。默认会跳转到@RequestMapping(/testVoid") testVoid.jsp的页面。
但是我们可以使用请求转发或者重定向跳转到指定的页面。
请求转发如下:

    @RequestMapping("/testVoid")public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {System.out.println("请求转发或者重定向");// 请求转发request.getRequestDispatcher("/WEB-INF/pages/success.jsp").forward(request, response);return;}

重定向:

    @RequestMapping("/testVoid")public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {System.out.println("请求转发或者重定向");// 重定向response.sendRedirect(request.getContextPath() + "/index.jsp");return;}

直接响应:

    @RequestMapping("/testVoid")public void testVoid(HttpServletRequest request, HttpServletResponse response) throws Exception {System.out.println("请求转发或者重定向");// 直接响应数据,前面两句是避免中文乱码response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");response.getWriter().print("你好");return;}

1.3返回值是ModelAndView对象

ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图

    <a href="user/testModelAndView">testModelAndView</a><br>@RequestMapping("/testModelAndView")public ModelAndView testModelAndView()  {System.out.println("testModelAndView方法执行了");
//        创建ModelAndView对象ModelAndView mv = new ModelAndView();//模拟从数据库中获取user对象User user = new User();user.setUsername("里佳琪");user.setPassword("123456");user.setAge(35);
//        把user对象存储到mv对象中,也会吧user对象存入到request对象中mv.addObject("user", user);// 跳转到指定的页面mv.setViewName("success");return mv;}

1.4 SpringMVC框架提供的转发和重定向

使用关键字forward请求转发和redirect重定向
如下:

    @RequestMapping("/testForwardOrRedirect")public String testForwardOrRedirect() {System.out.println("testForwardOrRedirect方法执行了");//return "forward:/WEB-INF/pages/success.jsp";return "redirect:/index.jsp";}

1.5 ResponseBody响应json数据

1.5.1 使用@RequestBody获取请求体数据

在webapp下新建一个js文件夹,导入js库。webapp存在静态文件的,动态文件放在WEB-INF下,同时外界不能访问WEB-INF下的文件

<script src="js/jquery-1.11.0.min.js"></script>
<script>$(function () {$("#btn").click(function () {alert("hello")$.ajax({type:"post",url:"user/testAjax",contentType:"application/json;charset=UTF-8",data:'{"username":"smm","password":"123","age":25}',dataType:"json",success:function (data) {alert(data)alert(data.username);alert(data.password);alert(data.age);}})})})
</script>
<body>
<button id="btn">发送ajax的请求</button>
</body>//testAjax方法@RequestMapping("/testAjax")public void testAjax(@RequestBody String body) {System.out.println("testAjax方法执行了");System.out.println(body);}

DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(img、css、js)也会被拦截到,从而不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置:

    <!-- 设置静态资源不过滤 --><mvc:resources location="/css/" mapping="/css/**"/><mvc:resources location="/images/" mapping="/images/**"/><mvc:resources location="/js/" mapping="/js/**"/>

还有一种更简单的方法,不用下载包,也不用配置springmvc.xml,直接可用。

<script type="text/javascript"src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

1.5.2 jackson的jar包

json字符串和JavaBean对象互相转换的过程中,需要使用jackson的jar包

    <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-core</artifactId><version>2.9.0</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.9.0</version></dependency>

1.5.3 使用@RequestBody注解把json的字符串转换成JavaBean的对象

意思就是把请求体的json内容给封装到方法里面的user对象去。

    @RequestMapping("/testAjax")public void testAjax(@RequestBody User user) {System.out.println("testAjax方法执行了");//ajax请求,传的是json,后端给封装到user对象中System.out.println(user);}

与1.5.1的区别

public void testAjax(@RequestBody String body) {

1.5.4 使用@ResponseBody注解把JavaBean对象转换成json字符串,直接响应

修改方法void为User类型,并给注解@ResponseBody把JavaBean对象转换成json字符串。

    @RequestMapping("/testAjax")public @ResponseBody User testAjax(@RequestBody User user) {System.out.println("testAjax方法执行了");//ajax请求,传的是json,后端给封装到user对象中System.out.println(user);//同时修改请求过来的数据user.setUsername("李嘉琪");user.setAge(65);return user;}

控制台输出

浏览器弹窗输出:

2.上传文件

2.1 非框架文件上传的必要前提

  1. form 表单的 enctype 取值必须是:multipart/form-data(默认值是:application/x-www-form-urlencoded)。enctype:是表单请求正文的类型
  2. method 属性取值必须是 post
  3. 提供一个文件选择域<input type=”file” />

环境搭建:

    <dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.1</version></dependency><dependency><groupId>commons-io</groupId><artifactId>commons-io</artifactId><version>2.4</version></dependency>
//index.xml页面
<form action="user/fileUpLoad1" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="upload"/><br/><input type="submit" value="上传文件"/>
</form>

控制器类:

@Controller
@RequestMapping("/user")
public class UserController {@RequestMapping("/fileUpLoad1")public String fileUpLoad1(HttpServletRequest request) throws Exception {System.out.println("fileUpLoad1文件上传...");// 使用fileupload组建完成文件上传,先获取到要上传的文件位置String path = request.getSession().getServletContext().getRealPath("/uploads/");// 创建File对象,一会向该路径下上传文件File file = new File(path);// 判断路径是否存在,如果不存在,创建该路径if (!file.exists()) {file.mkdirs();}// 创建磁盘文件项工厂DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload fileUpload = new ServletFileUpload(factory);// 解析request对象List<FileItem> items = fileUpload.parseRequest(request);// 遍历for (FileItem fileItem : items) {// 判断文件项是普通字段,还是上传的文件if (fileItem.isFormField()) {// 说明是普通字段} else {// 说明是上传文件项// 获取到上传文件的名称String filename = fileItem.getName();//把上传文件的名称设置唯一值uuidString uuid = UUID.randomUUID().toString().replace("-", "");filename=uuid+"_"+filename;// 上传文件fileItem.write(new File(path, filename));// 删除临时文件fileItem.delete();}}return "success";}

点击上传一个图片,在下面工程目录中可以找到

2.2 SpringMVC传统方式文件上传

传统方式的文件上传,指的是我们上传的文件和访问的应用存在于同一台服务器上。
SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的name属性名称相同

在主配置文件解析器对象:

    <!-- 配置文件解析器对象,要求id名称必须是multipartResolver 10485760就是10*1024*1024,10M--><bean id="multipartResolver"class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="maxUploadSize" value="10485760"/></bean>

控制类代码:

    @RequestMapping("/fileUpLoad2")public String fileUpLoad2(HttpServletRequest request, MultipartFile upload) throws Exception {System.out.println("fileUpLoad2文件上传...");// 使用fileupload组建完成文件上传,先获取到要上传的文件位置String path = request.getSession().getServletContext().getRealPath("/uploads/");// 创建File对象,一会向该路径下上传文件File file = new File(path);// 判断路径是否存在,如果不存在,创建该路径if (!file.exists()) {file.mkdirs();}// 说明是上传文件项// 获取到上传文件的名称String filename = upload.getOriginalFilename();//把上传文件的名称设置唯一值uuidString uuid = UUID.randomUUID().toString().replace("-", "");filename=uuid+"_"+filename;// 上传文件upload.transferTo(new File(path,filename));return "success";}

2.3 SpringMVC跨服务器方式文件上传

在实际开发中,我们会有很多处理不同功能的服务器。例如:应用服务器:负责部署我们的应用。数据库服务器:运行我们的数据库。缓存和消息服务器:负责处理大并发访问的缓存和消息。文件服务器:负责存储用户上传文件的服务器。

导入开发需要的jar包:

    <dependency><groupId>com.sun.jersey</groupId><artifactId>jersey-core</artifactId><version>1.18.1</version></dependency><dependency><groupId>com.sun.jersey</groupId><artifactId>jersey-client</artifactId><version>1.18.1</version></dependency>

新建一个module,springmvc-file-upload-crossweb,用来存文件,他的pom.xml可以不用配置,纯粹用来存放文件用的,并新建一个uploads文件夹,传过来的文件放这里。

给这个module新配置一个tomcat,


但是有个坑,tomcat需要做个改动,不然后面传文件会报错500。在tomcat文件夹的conf下的web.xml把只读关闭,具体参考这篇博客:

        <!--新增部分--><init-param><param-name>readonly</param-name><param-value>false</param-value></init-param>

回到原来的工程,加一个页面:

<h3>SpringMVC跨服务器的文件上传</h3>
<form action="user/fileUpLoad3" method="post" enctype="multipart/form-data">选择文件:<input type="file" name="upload"/><br/><input type="submit" value="上传文件"/>
</form>

编写后端代码:

    @RequestMapping("/fileUpLoad3")public String fileUpLoad3(MultipartFile upload) throws Exception {System.out.println("SpringMVC跨服务器方式的文件上传...");// 定义图片服务器的请求路径,springmvc-file-upload-crossweb是tomcat的deployment配置里面的,不是文件夹String path = "http://localhost:9090/springmvc-file-upload-crossweb/uploads/";// 获取到上传文件的名称String filename = upload.getOriginalFilename();String uuid = UUID.randomUUID().toString().replaceAll("-", "").toUpperCase();// 把文件的名称唯一化filename = uuid + "_" + filename;// 向图片服务器上传文件// 创建客户端对象Client client = Client.create();// 连接图片服务器WebResource webResource = client.resource(path + filename);// 上传文件webResource.put(upload.getBytes());return "success";}

输出:

SpringMVC框架个人笔记之响应数据、文件上传相关推荐

  1. SSM之SpringMVC 04 —— Ajax、拦截器、文件上传和下载

    系列文章 SSM之SpringMVC 01 -- SpringMVC原理及概念.Hello SpringMVC 注解版和配置版 SSM之SpringMVC 02 -- Controller和RestF ...

  2. 【SpringMVC笔记】拦截器 + 文件上传下载

    拦截器 + 文件上传下载 拦截器(interceptor) 自定义拦截器 验证用户是否登录 (认证用户) 没有拦截器 配置拦截器 文件的上传 文件输出流进行文件上传 file.Transto 进行文件 ...

  3. SSM框架之Spring MVC(三)http响应、文件上传

    一.响应数据和结果视图 1.1 返回值分类 1.1.1 字符串 创建实体类和controller类 实体类User package cn.xiaomifeng1010.domain;import ja ...

  4. 【狂神说】JavaWeb笔记整理 | SMBMS项目 | 文件上传和邮件发送

    目录 JavaWeb 1.基本概念 1.1 概念 1.2 web应用程序: 1.3 静态web 1.4 动态web 2.web服务器 2.1 技术讲解 2.2 web 服务器 3. Tomcat 3. ...

  5. Spring Boot基础学习笔记14:实现文件上传功能

    文章目录 零.学习目标 一.文件上传概述 二.实现文件上传功能 (一)创建Spring Boot项目 (二)整合Bootstrap (三)编写文件上传页面 (四)编写项目配置文件 (五)编写文件上传控 ...

  6. 怎么把数据文件上传云服务器,怎么把数据上传导云服务器

    怎么把数据上传导云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数 ...

  7. Jmeter学习笔记(三)文件上传

    本次测试的是文件上传接口,步骤如下: 1.通过fiddler抓包,获取要上传文件请求及参数: 2.把抓取的参数和请求地址添加到http请求中,参数值只取有效: 3.在文件上传下,添加要上传文件的位置. ...

  8. 怎么把数据文件上传云服务器,如何将数据上传到云服务器上

    如何将数据上传到云服务器上 内容精选 换一换 您可以通过导出SQL语句的方式将数据库备份到弹性云服务器上.弹性云服务器不限制存放哪些数据,但是数据必须符合国家法律法规.您可以在弹性云服务器上存放数据库 ...

  9. 怎么把数据文件上传云服务器,怎样把数据上传到云服务器

    怎样把数据上传到云服务器 内容精选 换一换 安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具,将文件上传到云服务器.例如QQ.exe.在本地主机和Windows云服务器上分别安装数 ...

最新文章

  1. thinkphp概述
  2. WINCE6.0文件系统及存储管理器
  3. mysql内置函数,在mysql里面利用str_to_date()把字符串转换为日期格式
  4. 非常有用的并发控制-倒计时器CountDownLatc
  5. xcode w情ndows版,xcode Windows版安装使用介绍
  6. 用python画出圣诞树_【闲趣】如何用python画出一棵圣诞树
  7. Scala:输入输出
  8. 计算机无法连接蓝牙键盘,终于理会电脑无法识别蓝牙鼠标键盘
  9. 虚拟机及CentOS7各个版本镜像下载地址
  10. Java源码-猜数字小游戏(Swing编程版)
  11. 手把手带你从零开始完整开发经典游戏【俄罗斯方块】,全部逻辑只用不到200行代码。
  12. 深入Unreal蓝图开发:自定义蓝图节点(中)
  13. 开发者必读的十大经典书籍
  14. 面试官问:为什么 Java 线程没有Running状态?我懵了
  15. 一直无缝滚动的轮播图模板
  16. Exercise11-Matplotlib
  17. 运行时异常与一般异常有何异同
  18. 教师职称考计算机模块,2015年教师职称计算机考试模块
  19. 使用PCA9685控制多个舵机
  20. 利用python爬取网易云心爱歌单

热门文章

  1. 中科院成都计算机研究所李品导师,中科院成都计算机应用研究所导师介绍:李品...
  2. 【星辰傀儡线·命运环·卷二 尘埃】 4 蓝月
  3. Development Tools 错误解决
  4. VUI+GUI,AI时代全新的立体交互方式
  5. 直播APP搭建好之后,该如何运营呢
  6. GSAP动画库入门基础示例:心爱的小摩托
  7. 地图可视化工具有哪些,基于地图的数据可视化软件
  8. Windows 更新:服务堆栈更新
  9. linux在根目录下创建目录一test,Linux练习题
  10. 怎样提升工单管理效率?