在JSP表单提交中怎样在Servlet中处理文件上传并且获取JSP页面传过来的一些参数

JSP通过Servlet提交表单数据并显示 今天试着实现一个小Demo,通过一个注册页面,提交我们所填写的数据,并且显示在一个表格内: 步骤一: 通过分析,需求,我们需要先写好两个JSP: register.jsp 注册页面 账户: 阅读详情

在JSP表单提交中怎样在Servlet中处理文件上传并且获取JSP页面传过来的一些参数

  编程语言
专业回答
程秀娟    IT行业金牌讲师  北大青鸟中关村校区学术部
2015-06-24 15:31

可以使用commons-fileupload组件实现文件上传,步骤如下:

1、添加jar包:commons-fileupload-x.x.x.jar和commons-io-2.4.jar

2、编写或修改form表单

    1) 提交方式必须是post

    2) 为表单增加属性enctype="multipart/form-data"

    3) 为文件上传单独提供servlet,因为增加enctype属性后,无法使用常规的请求对象来获取提交的数据

3、使用Commons-FileUpload组件实现文件的上传

    1) 确定本次请求是否是文件上传请求

        boolean flag=ServletFileUpload.isMultipartContent(request);

    2) 创建文件上传的工厂对象

        FileItemFactory factory=new DiskFileItemFactory();

    3) 创建ServletFileUpload对象,并将工厂对象作为参数传入

        ServletFileUpload upload=new ServletFileUpload(factory);

    4) 使用上传对象从请求对象中解析出提交的所有表单元素

        List<FileItem> lstForms=upload.parseRequest(request);

    5) 遍历表单元素集合,实现取出表单元素和上传文件      

    //遍历所有表单元素

    for (FileItem fileItem : lstForms) {

        //判断每一个表单元素是否是普通表单

        if(fileItem.isFormField()){

            System.out.println(fileItem.getString("UTF-8"));

        }else{

            //上传前准备工作

                //a、上传后的路径this.getServletContext().getRealPath("/")会出去当前项目在 部署的服务器上的绝对路径

                String path=this.getServletContext().getRealPath("/")+"files/";

                //b、找出要上传的文件的名字

                String fileName=fileItem.getName();

                fileName=fileName.substring(fileName.lastIndexOf("\\")+1);

                //c、上传

                fileItem.write(new File(path+fileName));

                out.println("<h2>"+fileName+"上传成功!</h2>");

    }

}

附件为文件上传的完整代码,包括验证上传的必须是图片!


本回答专业性由 电脑网络分类达人 董辉认证

为您推荐:

2013-08-05 16:29 提问者采纳
通过servlet的request对象的getParameter()方法可以得到jsp页面传过来的参数
追问:
将表单enctype设置为"multipart/form-data"后request.getParameter()不能获取参数值
追答:
ENCTYPE="multipart/form-data"用于表单里有图片上传。
<form name="userInfo" method="post" action="first_submit.jsp"    ENCTYPE="multipart/form-data">
表单标签中设置enctype="multipart/form-data"来确保匿名上载文件的正确编码。
如下:
<tr>
      <td height="30" align="right">上传企业营业执照图片:</td>
      <td><INPUT TYPE="FILE" NAME="uploadfile" SIZE="34"    onChange="checkimage()"></td>
    </tr>
就得加ENCTYPE="multipart/form-data"。

表单中enctype="multipart/form-data"的意思,是设置表单的MIME编码。默认情况,这个编码格式是application/x-www-form-urlencoded,不能用于文件上传;只有使用了multipart/form-data,才能完整的传递文件数据,进行下面的操作.
enctype="multipart/form-data"是上传二进制数据; form里面的input的值以2进制的方式传过去。
form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,取表单值加入数据库时,用到下面的:
SmartUpload su = new SmartUpload();//新建一个SmartUpload对象
su.getRequest().getParameterValues();取数组值
su.getRequest().getParameter( );取单个参数单个值
来源地址:http://hi.baidu.com/dnrranskydhkwze/item/264de2722f6a53285c1789a0
提问者评价
谢谢!
评论  |  1  0

ales_lee | 来自:芝麻团 | 六级 采纳率32%

2013-08-05 16:52 网友采纳
FormFile file = rs.getFile();
获取上传的文件 file为 

//获取文件的信息   文件名和文件大小
        String fileName = file.getFileName();

        InputStream is = null;
        FileOutputStream os = null;

//获取文件上传得到服务器的路径
        String path = this.getServlet().getServletContext().getRealPath("/file");
        
        //输入流
        is = file.getInputStream();
        os= new FileOutputStream(path+"\\"+newName);
        
        int len = 0;
        byte [] bytes = new byte[1024];
        
        while((len = is.read(bytes))>0){
            os.write(bytes, 0, len);
        }    

servlet的request对象的getParameter()方法可以得到jsp页面传过来的参数
追问:
将表单enctype设置为"multipart/form-data"后request.getParameter()不能获取参数值,返回结果为null
追答:
不能那么获取哦亲  javabean name = (javabean)form 吗?
你可以用 name.getFile()获取 这是 struts中的  

Servlet
file sd =request.getParameter("file") 获取不到吗??
评论  |  0  3
按默认排序 | 按时间排序

其他2条回答

2013-08-05 16:07 13581535035  | 四级
在Servlet中直接可以获取jsp上的参数 request里直接可以取到
追问:
将表单enctype设置为"multipart/form-data"后request.getParameter()不能获取参数值
追答:

你可以将参数都写到form类里,页面设置后也可以在后台取到form中得到。

JSP页面中多提交按钮的表单处理与页面导航 跨站请求伪造(CSRF,Cross-Site Request Forgery)是一种常见的网络攻击手段,它利用用户对某个信任网站的身份验证状态,诱使用户在已登录的浏览器中执行非本意的操作。攻击者会诱导用户点击链接或访问特定网站,该网站包含构造好的恶意请求,这些请求会利用用户在目标网站上的认证状态进行数据的提交、修改或删除等操作。CSRF攻击的主要原理在于恶意网站可以携带目标网站的认证cookie信息,因为cookie默认是在同源策略下共享的。 阅读详情

相关推荐

用Python写个彩票小助手:自动生成双色球/大乐透号码并保存到桌面

本文介绍如何使用Python开发一个智能彩票助手,实现双色球和大乐透号码的随机生成与桌面文件保存功能。通过详细的代码示例,包括随机号码生成、文件操作、用户交互和错误处理,帮助Python初学者快速掌握实用工具开发技巧。

weixin_42566121的博客 515

Servlet---表单参数接收/简单的文件上传

本篇主要讲到的是读取单个参数和多个参数和最简单的文件上传。 一、参数接收 前面一直使用到request.getParameter("参数名")获取单个参数的方法,这里使用request.getParameterValues("参数名")来获取多个参数的。可以用于表单中的checkbox这种复选框,但记住,前台写checkbox时name一定要相同。 index.jsp

Discovering,Thinking and Finding——This Is My Logic 930

忆阻器(二)——忆阻模拟器

除了真实的器件,我们也可以用运放和乘法器来搭忆阻模拟器。这节将介绍数学模型、matlab仿真及multisim仿真。 一、数学模型 忆阻分为磁控和荷控两种,这里介绍三次非线性磁控忆阻模型: {I=W(φ)VW(φ)=a+3bφ2dφdt=V \begin{cases} I=W(\varphi)V \\ W(\varphi)=a+3b \varphi ^2\\ \frac{d \varphi }{dt}=V \end{cases} ⎩⎪⎨⎪⎧​I=W(φ)VW(φ)=a+3bφ2dtdφ​=V​ 这里的WWW

http://www.icfgblog.com/ 1万+

详述Servlet获取form表单数据

一.如何使用Servlet 首先创建好一个javaweb项目后,在Java Resources根目录下src中创建一个servlet文件: 创建之后将文件中除以下代码外的无用代码都删掉,只留以下代码: package com.jd.servlet; import java.io.IOException; import javax.servlet.ServletException; i...

ANFO的博客 2815

多模态论文笔记——VQ-VAE和VQ-VAE-2

本文详细介绍VQ-VAE和VQ-VAE-2的原理和训练过程,为后面的dVAE在DALLE中的使用打下坚实的基础。

haopinglianlian的博客 3299

多模态脑区细分图谱 HCP-MMP v1.0, Glasser et al. 2016 皮层和皮下区域,简写和全称对应关系

人类连接组计划多模态脑区细分图谱(HCP-MMP)提供了对人类大脑皮层区域的非常有用的细分(Glasser et al. 2016a, b)。图谱是多模态的,因为每个区域都是根据四个标准的组合定义的,包括结构(T1加权/T2加权髓鞘含量和皮层厚度图)、静息态功能连接、基于任务的激活和拓扑地形组织。HCP-MMP v1.0图谱包含每个半球180个皮层区域,基于210名参与者的分析。

从事脑科学核磁共振方法学研究,在Nature communications等权威期刊发表研究论文,熟练掌握磁共振处理方法和统计学方法,欢迎大家和我交流。 2618

Servlet处理Form表单提交的文件数据以及普通数据

Servlet处理Form表单提交的文件数据以及普通数据处理表单提交数据相关代码解析Map用到的工具类 其中需要用到的两个包: commons-fileupload-1.2.1.jar.的下载地址和 commons-io.jar的下载地址 处理表单提交数据相关代码 // An highlighted block /**处理表单域,返回一个表单名字为key,表单类容或文件名为value的Map对象*/ public Map<String, String> uploadPackage(HttpSer

Your_Lie的博客 617

海洋捕食者算法(MPA)详解:从海洋生态智慧到高性能优化

摘要: 海洋捕食者算法(MPA)是一种基于海洋生态觅食行为的元启发式优化算法,模拟捕食者(如鲨鱼)的布朗运动和莱维飞行策略进行全局与局部搜索。算法分为三阶段:高速比阶段(全局探索)、单位速度比阶段(平衡搜索)和低速比阶段(局部开发),通过精英矩阵和FADs效应(概率扰动)避免早熟收敛。MPA具有参数少、收敛快、寻优能力强等特点,适用于复杂优化问题,其数学模型将生物行为转化为随机游走与自适应策略,并通过收敛因子动态调整探索-开发平衡。实验表明,MPA在多个基准问题上表现优异。

qq_42212808的博客 273

servlet文件上传(1)---》form表单的enctype属性以及上传文件请求内容

在实际应用开发中,文件上传是很常用的功能。例如,OA办公提交公文,项目测试提交测试报告,再比如基于Web的邮件系统发送邮件附件。 在早期的HTML中,表单不能实现文件的上传,在1995年RFC1867规范(即HTML中的基于表单的文件上传)对表单做出扩展,增加了表单元素。例如: 这里使用了表单一个很重要的属性---》enctype。定义了表单数据的编码规范,规定数据在

技术改变生活 1749

YOLOv9改进策略【Neck】| GSConv+Slim Neck:混合深度可分离卷积和标准卷积的轻量化网络设计

实时检测器架构的轻量级设计GsConv。

Limiiiing的博客 1364

YOLOv11涨点改进| TGRS 2026 顶刊| 注意力改进篇| 引入MSEA多尺度边缘感知注意力,助力红外小目标检测、遥感目标检测、工业缺陷检测、图像去雨雾任务高效涨点

🔥本文提出了一种基于MSEA多尺度边缘感知注意力的YOLOv11改进模型,通过增强网络对边缘、纹理和细粒度信息的感知能力,显著提升复杂背景下的目标检测性能。MSEA模块采用多尺度空洞卷积提取上下文特征,并通过边缘监督和注意力融合机制强化目标边界信息。实验表明该方法在小目标、边界模糊目标和复杂纹理目标检测任务中表现优异,尤其在遥感、工业缺陷和红外检测等场景具有显著优势。文章详细介绍了MSEA的结构原理、核心代码实现、模块配置方法以及三种YOLOv11改进方案.

Ai缝合怪、助力小伙伴高效发论文 182

用Servlet处理表单提交的数据,然后再jsp页面中显示

第一个页面,用户表单界面 <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> Insert title here 登陆界面 用户名: 密码:

专注游戏服务器相关技术 1万+

改进的主动轮廓模型实现图像分割

主动轮廓模型的优点在于可以自适应地调整轮廓形状和位置,适用于不同形状和大小的目标分割。改进的主动轮廓模型是一种有效的图像分割方法,能够适应不同场景下的图像分割需求。改进的主动轮廓模型涉及到许多参数,如模型参数、分割参数、权值系数等,这些参数的调整也会直接影响到分割结果。本文将介绍一个改进的主动轮廓模型,该模型可以实现对图像进行有效的分割。改进的主动轮廓模型是在传统的主动轮廓模型基础上进行的改进。和传统的模型相比,改进的主动轮廓模型加入了外部力和内部力,能够更好地适应复杂场景下的图像分割。

qq_39605374的博客 294

form表单提交到servlet的两种方法

jsp中的表单提交到servlet,然后通过读取数据库的数据进行登录验证,然而form表单提交到servlet时却没能提交成功,下面就展示一下简单的form表单提交到servlet的过程: 1.      用于登录的jsp页面,其中有一个form表单用于提交用户名和密码 2.      创建一个名为LoginServlet的Servlet,下面是doGet与doPo

捕影世界 6万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Servalet技术:通过Servlet进行表单处理(点击jsp页面的按钮通过servlet跳转到另一个jsp页面)

问题引入: 创建表单页面 form.jsp,界面如图,点击“确认”按钮后将表单内容提交到 check(servlet)处理提交结果,然后将处理结果交由result.jsp 页面显示如图。 表单 form.jsp 页面 ...

行秋的博客 5373

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

JSP怎么将表单提交到对应的servlet

JSP怎么将表单提交到对应的servlet,以及其中的配置信息。

IT一分子 1万+

关于jsp表单提交中action所指向Servlet路径问题的总结

初学java web,在使用servlet处理jsp时发现很多提交表单时发生的错误都是因为提交路径出错造成的。 现以自己为例说明: 项目目录结构如下: web.xml文件主要内容如下: This is the description of my J2EE component This is the display name of my J2EE compone

玲小洋的博客 3万+

解决Jsp获取本页面表单提交值为null的方法

今天博主遇到一个小问题,在本页面进行form表单提交时,获取的参数值为null。 抛出问题 ​ 不多说,看代码: <form action="${pageContext.request.contextPath}/test/money01.jsp" method="post"> 应付款:<input type="text" name="pay"> <br> 实际付款:<input type="text" name="actuallyPay"&

哈哈哈 6720

如何在servlet中获取jsp中form表单提交的变量,以及jsp与servlet之间的数据传递

今天让这个问题纠结了大半天,关于如何在servlet中获取jsp中form表单提交的变量,由于是新手,总结的地方可能不太很准确,望见谅 下面是用jfreechart做的一个柱状图,需要用到form表单中下拉选择框提交的年份,表单在此就不贴出来了 <% String path = request.getContextPath(); String basePath = request.

s346658910的专栏 8705

[JSP暑假实训] 二.JSP网站创建及Servlet实现注册表单提交、计算器运算

本系列文章是作者暑假给学生进行实训分享的笔记,主要介绍MyEclipse环境下JSP网站开发,包括JAVA基础、网页布局、数据库基础、Servlet、前端后台数据库交互、DAO等知识。 本篇文章开始讲解MyEclipse环境下创建JSP网站,并实现注册表页面的创建及Servlet获取提交的数据,基础性文章。非常基础的文章,希望对读者有所帮助 ,尤其是我的学生。

杨秀璋的专栏 9821

第四课-使用servlet显示JSP页面表单提交的数据

该登陆页面实现功能为:在servlet页面显示JSP提交的表单数据 在第三课实现JSP与servlet之间通信的基础上实现上述功能 Jsp页面的代码可以不用修改,第三颗二已经写好,需要编写的是servlet的代码: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletEx...

Jzandth的博客 1451

servlet获取表单数据

reg.jsp注册页面,用表单提交数据 userinfo.jsp展示页面,展示用户数据 Users.java定义用户实体类 RegServlet.java是处理提交的数据,重定向到userinfo中 reg.jsp &lt;%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-...

u011692164的专栏 5726

在Servlet中处理表单提交的数据

Servlet的主要功能是处理客户端的表单请求数据,在Servlet中首先对这些数据进行验证,可能会封装到JavaBean,接下来调用数据库的业务逻辑方法将数据保存或者进行其他操作,最后Servlet控制将响应结果返回给客户端; 在Servlet中获取表单信息主要是应用HttpServletRequest对象的getParameter()方法,若getParameter()方法尝试读取一个null...

you can you up up up的博客 7559

Servlet-获取表单提交参数

首先准备一个jsp表单页面(index.jsp),表单未经过任何美化,请忽略它的low,哈哈: <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>首页</title> </head> <bo...

Ara_Hu的博客 674

JSP ——通过表单向servlet提交数据

通过表单请求servlet,并向servlet提交一个账单明细。 servlet负责计算账单的消费额。 1.example5_2.jsp文件代码 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <html> <head> <title>M...

lmm0513的博客 6663
上一篇: [Security:090398]Invalid Subject: principals=[weblogic, Administrators]
下一篇: 基于servlet+smartUpload的文件上传
javaPie
博客等级 码龄16年 1171粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值