java-multipart/form-data提取不出数据来

问题描述

multipart/form-data提取不出数据来
 <form id="resiger" name="resiger" method="post" action="Student.servlet" enctype="multipart/form-data">
<input type="text" name="action" value="doNewStudent">.....
<input type="file" name="photo" id="photo" class="wbk"/><span id="photo">
<input type="submit" name="button" id="button" value="添 加" />
      <input type="reset" name="button2" id="button2" value="清 除" />
      <input type="button" name="button3" id="button3" value="返回首页"/>

--没有给表单加上enctype="multipart/form-data"的时候,能够把全部的数据提取出来,如action,只是提取不出文本域的中的文件而已,这是正常的,但是加上enctype="multipart/form-data"之后,却连普通的数据都提取不出来了,让老师看了下代码,他说没什么问题,可能是配置或者哪儿出问题了,但我就是找不出来(我是在servlet中提取的)-------
package com.servlet;

import java.io.IOException;
import java.text.SimpleDateFormat;
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 javax.servlet.http.Part;

import com.commons.db.Pager;
import com.commons.util.ActionResult;
import com.commons.util.Validator;
import com.factory.ServiceFactory;
import com.model.Student;
import com.service.StudentService;
@WebServlet(name="StudentServlet",urlPatterns="/Student.servlet")
public class StudentServlet extends HttpServlet {
    private StudentService studentService=ServiceFactory.getStudentService();
    private static final long serialVersionUID = 1L;

    public StudentServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("UTF-8");
        String action=request.getParameter("action");
        System.out.println("动作"+action);
        if(action==null){
            this.doNewStudent(request, response);
        }
        else if(action.equals("goPage")){
            this.goPage(request, response);
        }else if(action.equals("goList")){
//          this.goList(request, response);
            this.findAll(request, response);
        }else if(action.equals("doNewStudent")){
            this.doNewStudent(request,response);
        }else if(action.equals("goUpdate")){
            goUpdate(request,response);
        }else if(action.equals("doUpdate")){
            this.doUpdate(request, response);
        }else if(action.equals("doDelete")){
            this.doDelete(request, response);
        }else if(action.equals("fenYe")){
            this.findAll(request, response);
        }

    }
    protected void goPage(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String url="";
        url=request.getParameter("url");
        response.sendRedirect(url);
    }

    protected void goList(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        List<Student> lists=this.studentService.findAllStudent();
        request.getSession().setAttribute("lists", lists);
        response.sendRedirect("adminOperator.jsp");
    }
    protected void doNewStudent(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String name=request.getParameter("name");
        System.out.println(name);
        int age=Integer.parseInt(request.getParameter("age"));
        String sex=request.getParameter("sex");
        String grade=request.getParameter("grade");
        String major=request.getParameter("major");
        String address=request.getParameter("address");
        Part part=request.getPart("photo");
//      获取文件扩展名
        System.out.println("长度是:"+part.getSize());
        String ext = part.getHeader("content-disposition").substring(
                part.getHeader("content-disposition").lastIndexOf(".") + 1,
                part.getHeader("content-disposition").length() - 1);// 获取文件扩展
        part.write(this.getServletContext().getRealPath("photo")+"\"+ext);
        Date date=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-S");
        String stuPhoto=sdf.format(date);
//      将文件放入到服务器磁盘
        part.write(this.getServletContext().getRealPath("ptoto")+"\"+stuPhoto);
        Student student=new Student(name, sex, age, grade, major, address, stuPhoto);
        boolean flag=this.studentService.addStudent(student);
        if(flag){
            this.goList(request, response);
        }else{
            request.setAttribute("student", student);
            request.getRequestDispatcher("newStudent.jsp").forward(request, response);
        }

    }
    protected void goUpdate(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
        String sid=request.getParameter("sid");
        Student student=this.studentService.serchStudnet(sid);
        request.setAttribute("student", student);
        request.getRequestDispatcher("update.jsp").forward(request, response);
    }
    protected void doUpdate(HttpServletRequest request, HttpServletResponse response) throws ServletException,  IOException{
        String sid=request.getParameter("sid");
        String name=request.getParameter("name");
        int age=Integer.parseInt(request.getParameter("age"));
        String sex=request.getParameter("sex");
        String grade=request.getParameter("grade");
        String major=request.getParameter("major");
        String address=request.getParameter("address");
        Part part=request.getPart("photo");
//      获取文件扩展名
        String ext=part.getHeader("content-dispoistion").substring(
                part.getHeader("content-dispoistion").indexOf(".")+1,part.getHeader("content-dispoistion").length()-1);
        part.write(this.getServletContext().getRealPath("photo")+"\"+ext);
        Date date=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss-S");
        String stuPhoto=sdf.format(date);
//      将文件放入到服务器磁盘
        part.write(this.getServletContext().getRealPath("ptoto")+"\"+stuPhoto);
        Student student=new Student(name, sex, age, grade, major, address, stuPhoto);
        student.setSid(sid);
        boolean flag=studentService.updateStudent(student);
        if(flag){
            this.goList(request, response);
        }else{
            request.setAttribute("student", student);
            request.getRequestDispatcher("update.jsp").forward(request, response);
        }

    }
    protected void doDelete(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String sid=request.getParameter("sid");
        boolean flag=studentService.deleteStudent(sid);
        if(flag){
            this.goList(request, response);
        }else{
        response.sendRedirect("adminOperator.jsp");
        }
    }
    protected void findAll(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String pageNoStr=request.getParameter("pageNo");
        int pageNo=1;
        if(!Validator.isEmpty(pageNoStr)){
            pageNo=Integer.parseInt(pageNoStr);
        }
        long rowCount=studentService.getStusRowCount();
        Pager pager=new Pager(rowCount, 3, pageNo);
        List<Student> stuList=studentService.findAllStudent(pager);
        request.getSession().setAttribute("lists", stuList);
        request.getSession().setAttribute("pager", pager);
        System.out.println(pager.getCurrentPage());
        response.sendRedirect("adminOperator.jsp");
//      return new ActionResult("adminOperator.jsp",true);
    }
}

解决方案

你自己用纯Servlet来实现页面文件流的提取,这行Part part=request.getPart("photo");是不能实现的。
你需要自己解析HttpServletRequest对象中的文件流数据。参考该帖九楼:http://bbs.csdn.net/topics/310136006

解决方案二:

multipart/form-data 表示你要通过解析binary数据来获取返回的参数

时间: 2024-08-01 11:09:51

java-multipart/form-data提取不出数据来的相关文章

Java中form表单submit之后数据发生了重置。

问题描述 Java中form表单submit之后数据发生了重置. 在java中我用form表单提交后,页面等于刷新了,等于按了一次F5,所以刚才填写的数据会初始化,也就是说刚才选择的数据全部丢失了,现在除了用ajax无刷新提交外,怎么让点击submit按钮后,数据还保留??!(不要告诉我把数据放到session中,这样做是不科学的,另外加重页面刷新速度,只是投机取巧,谁有好的方法????) 解决方案 将表单提交到隐藏的iframe也行,不一定就是ajax <iframe style="di

使用IBM Java Toolbox for i访问IBM i数据队列

进程通信是操作系统内核中非常重要的部分.对于IBM i而言,数据队列是一种非常重要的进程通信方式. 一方面,数据队列功能强大,不受编程语言的限制,并能同时支持进程的同步通信与异步通信:另一方面,数 据队列使用灵活,其数据消息不受任何格式束缚,换句话说,用户可以根据业务需求自定义数据格式.作为 IBM i的Java 应用程序编程接口,IBM Java Toolbox for i支持IBM i数据队列的相关操作,这样,Java应用 程序与其它IBM i程序(诸如C,RPG,COBOL程序)之间的通信

asp.net-ASP.net &amp;amp;lt;%=token%&amp;amp;gt;显示不出数据

问题描述 ASP.net <%=token%>显示不出数据 打算用ASP.net <%=token%>输出到一个菜单链接里作为参数,在根目录的页面里能够正常显示,但是在二级目录下的页面就会出问题,也就是说显示不出来,菜单栏都是复制过去的,为什么会出现这种情况? <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="PersonEfficiency.aspx.cs&q

javascript-bootstrap table表格为什么显示不出数据

问题描述 bootstrap table表格为什么显示不出数据 我是用bootstrap table来制作表格的,用js创建的方法,现在后台已经有返回json数据了.但是显示不到表格里面,返回json数据的标题和field也是一样的,就是显示不出来,以前用easyui的话,有个loadFilter来显示数据,bootstrap有这种方法吗?还是直接显示呢?? 解决方案 请查看你的数据返回格式是否正确,你用model循环看一下... 解决方案二: 使用JQuery,如下 function AddE

Google App Engine for Java,第 3 部分: 持久性和关系--基于 Java 的持久性和 Google App Engine 数据存储

在企业环境中,数据持久性是交付可伸缩应用程序的基础.Rick Hightower 在他撰写的有关 Google App Engine for Java 的系列文章的最后一篇中,介绍了 App Engine 当前基于 Java 的持久性框架.让我们学习一些基础知识,了解为什么当前预览版中的 Java 持久性还未到发布的最佳时间,同时获得一个良好的演示,看看您如何在 App Engine for Java 应用程序中保存数据.注意,您将需要启动并运行来自第2部分的联系人管理应用程序,在此过程中学习如

学习使用ADO.NET Data Services (ADO.NET 数据服务框架)

ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的扩充功能,这个功能和概念 在以前的.NET 1.0-.NET3.5 技术中都没有出现的新概念,它主要用途是可以很容易的将数据库服务公开 在网络上,然后透过URL网址就可以对数据库进行CRUD的操作.ADO.NET Data Services能通过一个REST化 的方式将数据以Web上的数据服务展示.使得应用可以以数据服务的方式展现数据,然后被应用在企业网 络和互联网上的Web客户

MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证

原文:MVC5 + EF6 + Bootstrap3 (15) 应用ModelState和Data Annotation做服务器端数据验证 Slark.NET-博客园 http://www.cnblogs.com/slark/p/mvc5-ef6-bs3-get-started-server-side-validation.html  系列教程:MVC5 + EF6 + Bootstrap3 上一节:MVC5 + EF6 + Bootstrap3 (14) 分部视图PartialView 源码下

servlet接收到post消息,但解析不出数据

问题描述 servlet接收到post消息,但解析不出数据 这是部分客户端代码: String queryString = "testtime=" +strArray[0] + "&clientIP=" + strArray[1]+"&wsURL="+strArray[2]+"&RTT="+strArray[3]+ "&MessageCode="+strArray[4]+&q

java-如何在j2EE项目中采用Data Service 来管理数据 :支持数据的统一管理

问题描述 如何在j2EE项目中采用Data Service 来管理数据 :支持数据的统一管理 java项目中如何使用Dada Service 来管理项目: 要达到的目的:1,可以从多个数据源中加载数据,提供提供访问数据的统一接口 2,可以支持丰富的查询方式 ,实现内部的转换通过sqlParser 来对支持多种sql就如同 Apache 的calcite 项目中貌似可以找到蛛丝马迹,但是有好多的技术不是很了解 如:linq4jsparksplunkcsv ...等,有没有关于dataservice