上传文件时表单enctype属性必须要更改为<enctype='multipart/form-data'>;采用post提交表单,元素需要有name属性;

利用第三方jar包(commons-fileupload-1.2.1.jar   commons-io-1.3.2.jar )进行普通数据获取和文件上传;普通文本需要用getString("编码格式")方法获取,否则汉字会出现乱码,最开始我一直用的getString()获取,发现传到数据的数据全是乱码,查看流浪器的里面的请求和响应全是正常的,百度了半天也没找到真正的解决方法,无意间发现第三方包里面的FileItem还有一个重载的getString(String  args)方法,但是不晓得参数传什么;后来发现这个getString(String  args)方法会抛一个

UnsupportedEncodingException异常,英语也不好,百度单词的意思吧,什么不支持的编码异常,到此终于发现这个是设置编码的方法;
所以呢,写方法;写类;写变量;写参数时,能让人见文知意是多么重要;要是这个方法直接这样写的getString(String  charset)一看就知道是设置编码格式的方法了把。

添加商品的Servlet:

package ni.jun.yang.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import ni.jun.yang.service.KindService; @WebServlet("/AddGoodsServlet")
public class AddGoodsServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public AddGoodsServlet() {
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//响应编码格式
response.setCharacterEncoding("utf-8");
PrintWriter out = response.getWriter();
//遍历类型的集合,得到下拉框选项
List<String> list = new ArrayList<>();
String sql = "Select * from kind";
list = new KindService().select(sql);
out.println("<html><head><meta charset='utf-8'><title>添加商品</title>");
out.println("</head>");
out.println("<body>");
//上传文件的提交方式
out.println("<form action='AddResultServlet' method='post' enctype='multipart/form-data'>");
out.println("<table>"); out.println("<tr>");
out.println("<td>名称:</td>");
out.println("<td><input type='text' name='mingzi'></td>");
out.println("</tr>"); out.println("<tr>");
out.println("<td></td>");
out.println("<td><input type='file' name='filename'></td>");
out.println("</tr>"); out.println("<tr>");
out.println("<td>介绍:</td>");
out.println("<td><input type='text' name='jieshao'></td>");
out.println("</tr>"); out.println("<tr>");
out.println("<td>售价:</td>");
out.println("<td><input type='text' name='shoujia'></td>");
out.println("</tr>"); out.println("<tr>");
out.println("<td>分类:</td>");
out.println("<td>");
out.println("<select name='fenlei'>");
//遍历类型的集合,得到下拉框选项
for (int i = 0;i<list.size();i++) {
out.println("<option value="+(i+1)+">");
out.println(list.get(i));
out.println("</option>");
}
out.println("</select>");
out.println("</td>");
out.println("</tr>"); out.println("<tr>");
out.println("<td> </td>");
out.println("<td><input type='submit' value='添加'></td>");
out.println("</tr>");
out.println("</table>");
out.println("</form>");
out.println("</body>");
out.println("</html>"); }
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}

  处理提交数据的Servlet:

package ni.jun.yang.servlet;

import java.io.File;
import java.io.IOException;
import java.util.Date;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload; import ni.jun.yang.bean.Goods;
import ni.jun.yang.service.GoodsService; @WebServlet("/AddResultServlet")
public class AddResultServlet extends HttpServlet {
private static final long serialVersionUID = 1L; public AddResultServlet() { }
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8"); DiskFileItemFactory factory = new DiskFileItemFactory();
factory.setSizeThreshold(1024*1024*5);
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> fileItems = null;
Goods goods = new Goods();
try {
//请求数据返回FileItem类型的数组
fileItems = upload.parseRequest(request);
} catch (FileUploadException e) { e.printStackTrace();
}
//上传的文件存放路径
String path = getServletContext().getRealPath("/image");
File f = new File(path);
//没有此路径就创建
if(!f.exists()){
f.mkdirs();
}
//遍历请求数据的集合进行数据的获取和文件的上传
for (FileItem x : fileItems) {
try {
uploading(x, goods, path);
} catch (Exception e) { e.printStackTrace();
}
}
//普通数据存入数据库,页面跳转
if(new GoodsService().add(goods)){
request.getRequestDispatcher("success.html").forward(request, response);
}else{
response.sendRedirect("lose.html");
} }
/**
* 数据的获取和文件上传
* @param fileItem
* @param goods 待添加的商品
* @param path 上传的路径
* @throws Exception
*/
private void uploading (FileItem fileItem,Goods goods,String path) throws Exception{
//普通文本数据
//只能获取字符串,其他的数据需要通过包装类的方法转化得到
if(fileItem.isFormField()){
if(fileItem.getFieldName().equals("mingzi")){
//获取普通的文本数据利用getString("utf-8"),设置编码格式。否则会出现汉字乱码
goods.setName(fileItem.getString("utf-8")); }else if(fileItem.getFieldName().equals("jieshao")){
goods.setExplain(fileItem.getString("utf-8")); }else if(fileItem.getFieldName().equals("shoujia")){
//字符串转Double
goods.setPrice(Double.parseDouble(fileItem.getString())); }else if(fileItem.getFieldName().equals("fenlei")){
String type = fileItem.getString();
goods.setType(Integer.parseInt(type)); }
}else{
// 文件类型
String fileName = fileItem.getName();
// System.out.println(fileName);
//设置上传的文件名字,利用时间返回毫秒数,保证上传的文件不重名
String path1 = new Date().getTime()+"_"+fileName;
String fileName2= path+"\\"+ path1;
File file = new File(fileName2);
//数据只存放文件名字
goods.setPhoto(path1);
// System.out.println(fileName2);
try {
fileItem.write(file);
} catch (Exception e) {
e.printStackTrace();
}
}
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response);
} }

  效果图:

完整项目网盘地址:http://pan.baidu.com/s/1boWm05T         密码:blqh

servlet文件上传2——复合表单提交(数据获取和文件上传)的更多相关文章

  1. layui框架实现多图片手动上传和随表单提交方法

    首先在官方文档并没有手动上传的说明文档,这里手动实现上传原理是:在表单中有三个按钮,分别是上传图片按钮.隐藏上传按钮.表单提交按钮,点击上传图片按钮之后,图片添加在前端但是并没有真正的上传,而是在点击 ...

  2. Servlet的5种方式实现表单提交(注册小功能)

    Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据   用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> ...

  3. Linux curl 模拟form表单提交信息和文件

    Linux curl 模拟form表单提交信息和文件   curl是一个命令行方式下传输数据的开源传输工具,支持多种协议:FTP.HTTP.HTTPS.IMAP.POP3.TELNET等,功能超级强大 ...

  4. c# 模拟表单提交,post form 上传文件、大数据内容

    表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipart/form-data,而且要设定一个 boundary 参数,这个参数是由应用程序自行产生,它会用来识别每 ...

  5. Yii2表单提交(带文件上传)

    今天写一个php的表单提交接口,除了基本的字符串数据,还带文件上传,不用说前端form标签内应该有这些属性 <form enctype="multipart/form-data&quo ...

  6. js_ajax模拟form表单提交_多文件上传_支持单个删除

    需求场景: 用一个input type="file"按钮上传多张图片,可多次上传,可单独删除,最后使用ajax模拟form表单提交功能提交到指定方法中: 问题:由于只有一个file ...

  7. 使用bean接收ajax表单提交数据包含文件上传

    这几天写带图片上传的表单提交,一个配置小程序活动弹出框样式的功能,记录一下一些需要注意的地方 首先是 前端 JSP 文件的表单 <form class="search-wrapper& ...

  8. c# 模拟表单提交,post form 上传文件、数据内容

    转自:https://www.cnblogs.com/DoNetCShap/p/10696277.html 表单提交协议规定:要先将 HTTP 要求的 Content-Type 设为 multipar ...

  9. Java后台使用httpclient入门HttpPost请求(form表单提交,File文件上传和传输Json数据)

    一.HttpClient 简介 HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的.最新的.功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 ...

随机推荐

  1. poj2051 Argus

    Description A data stream is a real-time, continuous, ordered sequence of items. Some examples inclu ...

  2. Sentry的安装搭建与使用

    业务监控工具 Sentry 的搭建与使用 官方网址 Django Sentry 官网链接 Sentry 简介 Sentry 是一个开源的实时错误报告工具,支持 web 前后端.移动应用以及游戏,支持 ...

  3. Go数组、切片、映射的原理--简明解析

    数组.切片.映射是Golang的最重要的数据结构,下面是对这3种数据结构的一点个人总结: 一.数组 数组是切片和映射的基础数据结构. 数组是一个长度固定的数据类型,存储着一段具有相同数据类型元素的连续 ...

  4. ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解

    ASP.NET Core Web服务器 Kestrel和Http.sys 特性详解 1.1. 名词解释 1.2. Kestrel基本工作原理 1.2.1. Kestrel的基本架构 1.2.2. Ke ...

  5. 团队作业6——展示博客(Alpha版本)

    Deadline: 2017-5-7 22:00PM,以博客发表日期为准 评分基准: 按时交 - 有分,检查的项目包括后文的四个方面 团队成员介绍 Alpha阶段进展 团队合作,各成员分工 Beta阶 ...

  6. GUI线程 :打字母游戏

    代码: /** * */ package com.niit.syntronized; import java.awt.Color; import java.awt.FlowLayout; import ...

  7. 结对编程1.四则运算GUI版

    201421123022 王若凡        201421123026  欧阳勇 coding详细代码 a.需求分析: 这个程序做成GUI(可以是Windows PC 上的,也可以是Mac.Linu ...

  8. 团队作业——Alpha冲刺之事后诸葛亮

    小组成员: 武健男:201421123091 林俊鹏:201421123076 何跃斌:201421123082 陈鑫龙:201421123078 潘益靖:201421123086 黄睿:201421 ...

  9. Java学习9——面向对象

    (重点:内存分析) 类的定义 //用class关键字定义一个类 class Person { //成员变量定义 private int id; private int age = 20; //方法定义 ...

  10. 扫雷游戏制作过程(C#描述):第二节、界面设计

    前言 这里给出教程原文地址. 该项目已经放在github上托管. 扫雷界面设计 界面的设计,首先需要创建一个菜单栏.具体方法在左边找到工具箱窗口,展开其中的菜单和工具栏,找到MenuStrip选项,双 ...