springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格
springMVC获取异步请求的参数
JQuery发送异步请求回顾
<a href="javascript:void(0);" id="testAjax">访问controller</a>
<script type="text/javascript" src="/js/jquery-3.3.1.min.js"></script>
<script type="text/javascript">$(function(){$("#testAjax").click(function(){ //为id="testAjax"的组件绑定点击事件$.ajax({ //发送异步调用type:"POST", //请求方式:POST请求url:"ajaxController", //请求参数(也就是请求内容)data:'ajax message', //请求参数(也就是请求内容)dataType:"text", //响应正文类型contentType:"application/text", //请求正文的MIME类型});});});
</script>
springMVC中controller中获取异步请求的参数注解@RequestBody
当前端异步请求我们的/ajaxController这个地址的时候,由于有@RequestBody这个注解,就会去请求体中找到message参数,然后将其封装到方法的参数中
@ResponseBody 异步请求响应
controller代码详解
package com.fs.springmvc.controller;import com.fs.springmvc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;@Controller
public class AjaxController {/*@RequestMapping("/ajaxController")public String testAjax(){System.out.println("测试ajax异步请求访问后台方法");return "page";}*/@RequestMapping("/ajaxController")//@RequestBody注解,可以将请求体内容封装到指定参数中//因为异步POST请求的参数在请求体中,若不添加@RequestBody,就找不到请求的参数,添加@RequestBody后就会去请求体中把参数内容封装到指定的参数中//同步请求在地址栏中有参数,所以不用加@RequestBody这个主键public String testAjax(@RequestBody String message){System.out.println("测试ajax异步请求访问后台方法"+message);//异步请求页面跳转是交给前端操作的,这里实际是不会跳转页面的return "page";}/*//如果处理参数是POJO,且页面发送的请求数据格式与POJO中的属性对应,@RequestBody注解可以自动映射对应请求数据到POJO中//注意:POJO中的属性如果请求数据中没有,属性值为null,POJO中没有的属性如果请求数据中有,不进行映射*/@RequestMapping("/ajaxPojoToController")//@RequestBody注解,可以将请求体内容封装到指定参数中public String testAjaxPojo(@RequestBody User user){System.out.println("测试ajax异步请求访问后台方法"+user);return "page";}@RequestMapping("/ajaxListToController")//如果处理参数是List集合且封装了POJO,且页面发送的数据是JSON格式的对象数组,数据将自动映射到集合参数中public String testAjaxList(@RequestBody List<User> users){System.out.println("测试ajax异步请求访问后台方法"+ users);return "page";}@RequestMapping("/ajaxReturnString")//使用注解@ResponseBody可以将返回的页面不进行解析,直接返回字符串,该注解可以添加到方法上方或返回值前面@ResponseBodypublic String ajaxReturnString(){System.out.println("测试ajax异步请求访问后台方法");//返回的就是forward:pagereturn "forward:page";}@RequestMapping("/ajaxReturnJson")//基于jackon技术,使用@ResponseBody注解可以将返回的POJO对象转成json格式字符串数据,@ResponseBodypublic User ajaxReturnJson(){System.out.println("测试ajax异步请求访问后台方法");User user = new User();user.setName("小付");user.setAge(18);return user;}@RequestMapping("/ajaxReturnJsonList")//基于jackon技术,使用@ResponseBody注解可以将返回的保存POJO对象的集合转成json数组格式数据@ResponseBodypublic List ajaxReturnJsonList(){System.out.println("测试ajax异步请求访问后台方法");User user1 = new User();user1.setName("小付");user1.setAge(18);User user2 = new User();user2.setName("小花");user2.setAge(18);List al = new ArrayList<User>();al.add(user1);al.add(user2);return al;}@RequestMapping("/cross")@ResponseBody//使用@CrossOrigin开启跨域访问//标注在处理器方法上方表示该方法支持跨域访问//标注在处理器类上方表示该处理器类中的所有处理器方法均支持跨域访问@CrossOrigin//多项目之间相互调用会存在跨域的问题,若需要跨域调用,者添加注解就支持跨域调用public User cross(HttpServletRequest request){System.out.println("测试ajax异步请求访问后台方法:"+request.getRequestURL());User user = new User();user.setName("小花");user.setAge(18);return user;}@RequestMapping("/testAjaxBtn")@ResponseBodypublic String testAjaxBtn(@RequestBody String name){System.out.println("测试ajax异步请求访问后台方法:"+name);return "ok";}
}
SpringMVC的跨域访问@CrossOrigin
@RequestMapping("/cross")@ResponseBody//使用@CrossOrigin开启跨域访问//标注在处理器方法上方表示该方法支持跨域访问//标注在处理器类上方表示该处理器类中的所有处理器方法均支持跨域访问@CrossOrigin//多项目之间相互调用会存在跨域的问题,若需要跨域调用,者添加注解就支持跨域调用public User cross(HttpServletRequest request){System.out.println("测试ajax异步请求访问后台方法:"+request.getRequestURL());User user = new User();user.setName("小花");user.setAge(18);return user;}
SpringMVC的文件上传
xml文件需要添加一个bean
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 设置扫描spring注解的包--><context:component-scan base-package="com.fs.springmvc"/><!-- 静态资源加载,核心控制器拦截的是所有请求,需要对静态资源请求进行放行,通过配置放行资源实现下面这个配置是可以放行所有的普通资源调用让springMVC不处理静态资源,如 .css .js .html .MP3 等--><mvc:default-servlet-handler/>
<!-- 配置mvc注解驱动--><mvc:annotation-driven/><!--配置文件上传处理器(固定写法)public static final String MULTIPART_RESOLVER_BEAN_NAME = "multipartResolver";id="multipartResolver"这个id不能随意的更改,因为在DispatcherServlet中规定了的--><bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 配置上传文件的大小--><property name="maxUploadSize" value="1024000000"/></bean></beans>
表单提交注意事项
/*
前端form表单,注意事项,要以POST提交,enctype="multipart/form-data必须要添加<form action="/fileupload" method="post" enctype="multipart/form-data"><%--文件上传表单的name属性值一定要与controller处理器中方法的参数对应,否则无法实现文件上传--%>上传LOGO:<input type="file" name="file"/><br/>上传照片:<input type="file" name="file1"/><br/>上传任意文件:<input type="file" name="file2"/><br/><input type="submit" value="上传"/>
</form>*/
controller中的代码
package com.fs.springmvc.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.UUID;/*
SpringMVC文件上传*/
@Controller
public class FileUploadController {@RequestMapping(value = "/fileupload")//参数中定义MultipartFile参数,用于接收页面提交的type=file类型的表单,要求表单名称与参数名相同public String fileupload(MultipartFile file,MultipartFile file1,MultipartFile file2, HttpServletRequest request) throws IOException {// MultipartFile参数中封装了上传的文件的相关信息
// System.out.println(file.getSize());//文件的大小字节单位
// System.out.println(file.getBytes().length);//保存的字节数组,也是文件大小
// System.out.println(file.getContentType());//获取上传文件的类型
// System.out.println(file.getName());//是表单提交的name与参数的file,file1,file2
// System.out.println(file.getOriginalFilename());//上传文件名,获取原始上传的文件名,可以作为当前文件的真实名称保存到数据库中备用
// System.out.println(file.isEmpty());//判断文件大小是否是空文件//首先判断是否是空文件,也就是存储空间占用为0的文件if(!file.isEmpty()){//如果大小在范围要求内正常处理,否则抛出自定义异常告知用户(未实现)//设置保存的路径String realPath = request.getServletContext().getRealPath("/images");//保存文件的方法,指定保存的位置和文件名即可,通常文件名使用随机生成策略产生(我使用UUID),避免文件名冲突问题file.transferTo(new File(realPath,UUID.randomUUID().toString()+file.getOriginalFilename() ));}//测试一次性上传多个文件if(!file1.isEmpty()){//可以根据需要,对不同种类的文件做不同的存储路径的区分,修改对应的保存位置即可String realPath = request.getServletContext().getRealPath("/images");file1.transferTo(new File(realPath,UUID.randomUUID().toString()+file1.getOriginalFilename()));}if(!file2.isEmpty()){String realPath = request.getServletContext().getRealPath("/images");file2.transferTo(new File(realPath,UUID.randomUUID().toString()+file2.getOriginalFilename()));}return "page.jsp";}
}
Restful风格
package com.fs.springmvc.controller;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;//@Controller
//@ResponseBody
//设置rest风格的控制器
@RestController//这个注解相当于@Controller,@ResponseBody
//设置公共访问路径,配合下方访问路径使用
@RequestMapping("/user/")
public class UserController {//rest风格访问路径完整书写方式@RequestMapping("/user/{id}")//使用@PathVariable注解获取路径上配置的具名变量,该配置可以使用多次public String restLocation(@PathVariable Integer id){System.out.println("restful is running ....");return "success.jsp";}//rest风格访问路径简化书写方式,配合类注解@RequestMapping使用@RequestMapping("{id}")public String restLocation2(@PathVariable Integer id){System.out.println("restful is running ....get:"+id);return "success.jsp";}//接收GET请求配置方式@RequestMapping(value = "{id}",method = RequestMethod.GET)//接收GET请求简化配置方式@GetMapping("{id}")public String get(@PathVariable Integer id){System.out.println("restful is running ....get:"+id);return "success.jsp";}//接收POST请求配置方式@RequestMapping(value = "{id}",method = RequestMethod.POST)//接收POST请求简化配置方式@PostMapping("{id}")public String post(@PathVariable Integer id){System.out.println("restful is running ....post:"+id);return "success.jsp";}//接收PUT请求简化配置方式@RequestMapping(value = "{id}",method = RequestMethod.PUT)//接收PUT请求简化配置方式@PutMapping("{id}")public String put(@PathVariable Integer id){System.out.println("restful is running ....put:"+id);return "success.jsp";}//接收DELETE请求简化配置方式@RequestMapping(value = "{id}",method = RequestMethod.DELETE)//接收DELETE请求简化配置方式@DeleteMapping("{id}")public String delete(@PathVariable Integer id){System.out.println("restful is running ....delete:"+id);return "success.jsp";}/*@RequestMapping(value = {"{id}/{sid}","{id}"})表示这个方法可以被2个地址调用,一个id/sid 一个/id@PathVariable(value = "sid",required = false)required = false 表示sid可以不用传递 在地址映射上就添加2个地址请求*/@RequestMapping(value = {"/{id}/{sid}","/{id}"})//接收DELETE请求简化配置方式public String rest(@PathVariable("id") Integer id, @PathVariable(value = "sid",required = false) Integer sid){System.out.println("restful is running ....delete:"+id);return "success.jsp";}}
注解
⚫ Restful
◆ @RestController
◆ @PathVariable
◆ @GetMapping
◆ @PostMapping
◆ @PutMapping
◆ @DeleteMapping
springMVC获取异步请求的参数,返回异步请求数据(json),跨域访问简单了解,文件上传,与Restful风格相关推荐
- php curl跨域cookie_PHP curl模拟文件上传(接口请求实现跨域文件中转)
3e2f08c0c11a8416dd107bbfc9159718.jpg 客户端代码 请求参数 参数类型 参数说明 $url string post提交的服务器url路径 $data 数组 表单数据 ...
- 关于SpringMVC框架实现简单的文件上传下载(ssm)
关于ssm框架整合文件的上传和下载. 首先来看单个附件的上传和下载: 1.首先创建一个用来测试的jsp文件上传下载的页面 代码如下 <%@ page language="java&q ...
- ajax跨域请求wcf,ajax wcf 指定某个域名 进行跨域访问
Hi fss, 你是怎么实现ajax wcf发布后可以被任意域名访问的? 根据我的理解和测试,创建一个新的wcf ajax enabled service是不支持跨域访问的.需要自己加功能来实现跨域访 ...
- 自学Python第二十二天- Django框架(三) AJAX、文件上传、POST 请求类型之间的转换、多APP开发、iframe、验证码、分页器、类视图、中间件、信号、日志、缓存、celery异步
Django官方文档 django 使用 AJAX django 项目中也可以使用 ajax 技术 前端 前端和其他 web 框架一样,需要注意的是,django 接收 POST 请求时,需要 csr ...
- SpringBoot(SpringMVC)文件上传下载
话说,springboot不是一个全新的框架,它只是将其它框架整合在一起,提供一个"开箱即用"的环境.此文,利用的正是SpringMVC的功能. 创建springboot项目:ht ...
- flask POST请求,数据入库,文件上传,一文看懂,3天掌握Flask开发项目系列博客之三
flask 实现ajax 数据入库 在正式编写前需要了解一下如何在 python 函数中去判断,一个请求是 get 还是 post. python 文件代码如此所示: # route()方法用于设定路 ...
- Ajax(form表单文件上传、请求头之contentType、Ajax传递json数据、Ajax文件上传)
form表单文件上传 上菜 file_put.html <form action="" method="post" enctype="multi ...
- ajax请求携带tooken_Spring Boot+Vue 文件上传,如何携带令牌信息?
关于文件上传这块,松哥之前也写了好几篇文章了,甚至还有视频: Spring Boot+Vue+FastDFS 实现前后端分离文件上传 但是,之前和小伙伴们提到的方案,是基于 session 来做认证的 ...
- (转)SpringMVC学习(九)——SpringMVC中实现文件上传
http://blog.csdn.net/yerenyuan_pku/article/details/72511975 这一篇博文主要来总结下SpringMVC中实现文件上传的步骤.但这里我只讲单个文 ...
最新文章
- 清华学霸震撼演讲:拼尽所有力气,只为给梦想一个机会!
- ElasticSearch使用总结
- python闭包和函数调用区别_函数闭包与可调用类
- 与服务器交互的分页组件PageComponent
- 企业级Java应用最重要的4个性能指标
- 【算法与数据结构】在n个数中取第k大的数(基础篇)
- VMware虚拟机中调用本机摄像头详解
- LUA Metatables
- c语言实现的sin cos查找表_如何实现EXCEL表数据的自动查找、匹配
- Java虚拟机工作原理详解 (一)
- 【图像隐写】基于matlab DWT数字水印嵌入+攻击+提取【含Matlab源码 1759期】
- 得实打印机断针测试软件原理,得实针式打印机断针测试软件
- 秋日登洪府滕王阁饯别序
- android Holo UI框架,Holo风格的开源中国Android客户端——持续更新(2)
- 七.OpenCv图像轮廓
- 猪场超级管家 v4.0 免费
- Win10上轻松安装docker,更改镜像安装目录
- 占坑:fullpage.js 在edge浏览器上上下移动鼠标(不滚动滚轮)会翻页的问题
- 关于微信小程序如何使用Vant组件
- CCNP之IGP学习笔记(2022)