三种前台与后台,传表单数据包含文件上传。第三Jackson 将数据映射成实体类
方法1
使用表单action 属性 直接访问后台,
后台是servlet
后台方法入参:protected void doPost(HttpServletRequest request, HttpServletResponse response)
方法中上传的文件处理:(这里只写了关键代码)
//解析请求之前先判断请求类型是否为文件上传类型 boolean isMultipart = ServletFileUpload.isMultipartContent(request); if(isMultipart==true){ //创建文件上传核心类 FileItemFactory factory = new DiskFileItemFactory(); // 实例化一个FileItem工厂,用来配置上传组件ServletFileUpload ServletFileUpload upload = new ServletFileUpload(factory); // 用以上工厂实例化上传组件 try{ //处理表单请求 List<FileItem> items = upload.parseRequest(request); Iterator<FileItem> iter = items.iterator(); while(iter.hasNext()){ FileItem item = (FileItem)iter.next(); if(item.isFormField()){// 如果是普通表单控件 fieldName = item.getFieldName();// 获得该字段名称 if(fieldName.equals("title")){ news.setTitle(item.getString("UTF-8"));//获得该字段值 }else if(fieldName.equals("categoryId")){ news.setCategoryId(Integer.parseInt(item.getString())); } }else{// 如果为文件域 String fileName = item.getName();// 获得文件名(全路径) if(fileName != null && !fileName.equals("")){ File fullFile = new File(fileName); File saveFile = new File(uploadFilePath,fullFile.getName());//将文件保存到指定的路径 item.write(saveFile); uploadFileName = fullFile.getName(); news.setPicPath(uploadFileName); bUpload = true; } } } }catch(Exception e){ e.printStackTrace(); } } System.out.println("上传成功之后的文件名:" + news.getPicPath()); //调用后台的方法,将新闻信息插入数据库中 News_detilService news_detilService = new News_detilServiceImpl(); bRet = news_detilService.addNews(news);
方法2
前台使用ajax 取得表单,直接把表单放入FormData()对象中表单发送过来
后台使用springMvc 处理
前端代码:(只写了关键代码!)
js:
$("#addUser").click(function(){ //var form=$("#form1"); //使用js 获取表单,在ajax中直接入参传后台 var form = new FormData(document.getElementById("form1")); $.ajax({ type:"POST", url:"../adduserSave", data:form, async: false, cache: false, contentType: false, processData: false, dataType:"json", success:function(data){ // 省略成功的处理 } })
springMvc的后台:(只写关键代码)
@RequestMapping(value="/adduserSave",method=RequestMethod.POST) @ResponseBody //入参的filename 是表单中的文件元素的 name属性!!!! public ResultUtil adduserSave(@RequestParam("filename") MultipartFile file, User user, HttpServletRequest request) { Map<String, Object> result=new HashMap<String, Object>(); String path = request.getSession().getServletContext().getRealPath("statics/images"); String fileName = file.getOriginalFilename(); File fil = new File(path, fileName); if(!fil.exists()){ fil.mkdirs(); } try { file.transferTo(fil); } catch (IllegalStateException | IOException e) { e.printStackTrace(); } String zpath=path+"\\"+fileName; user.setFile("statics/images/"+fileName); user.setJurisdiction("yes"); boolean flag=userService.addUser(user); if(flag) { // 对应的结果处理 } }
方法3
前端传 FormData 对象,文字数据转成JSON ,以键值对方式传入数据,
后台 springMvc处理通过jsonson 映射成实体类
前端代码:(只写关键代码)
/* 提交表单数据封装 */ $('#submit').click(function() { /* 获取表单信息封装 */ var shop = {}; if (isEdit) { shop.shopId = shopId; } shop.shopName = $('#shop-name').val(); shop.shopDesc = $('#shop-desc').val(); shop.shopCategory = { shopCategoryId: $("#shop-category").val() } //获得图片文件 var shopImg = $('#shop-img')[0].files[0]; var formData = new FormData(); //图片文件以键值对的方式存入 formData.append('shopImg', shopImg); //JSON.stringify(shop)将数据封装成 json formData.append('shopStr', JSON.stringify(shop)); formData.append('verifyCodeActual', verifyCodeActual); $.ajax({ url : (isEdit ? editShopUrl:registerShopUrl), type : 'POST', data : formData, contentType : false, processData : false, cache : false, success : function(data) { //相应处理 } }) });
后台代码:
参数入参是: private Map<String,Object> registerShop(HttpServletRequest request)
接收数据:
//接收并且转化接收的信息成实体类使用jackson String shopStr = HttpServletRequestUtil.getString(request, "shopStr"); Shop shop =null; ObjectMapper mapper = new ObjectMapper(); shop = mapper.readValue(shopStr, Shop.class);
图片处理:
//店铺图片 CommonsMultipartFile shopImg = null; //解析从request中得到上下文 CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver( request.getSession().getServletContext()); //得到的上下文来判断是否有文件流 if(commonsMultipartResolver.isMultipart(request)){ MultipartHttpServletRequest multipartHttpServletRequest = (MultipartHttpServletRequest)request; shopImg = (CommonsMultipartFile)multipartHttpServletRequest.getFile("shopImg"); }else{ modelMap.put("success", false); modelMap.put("errMsg", "上传图片不能为空"); }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术