jsp表单向servlet传文件时,同时传普通文本框的值——解决jsp向后台传文件时,普通文本框为null的问题

4 篇文章 1 订阅
3 篇文章 0 订阅

在完成一个在线学生作业管理系统的时候,涉及到“jsp表单向servlet同时传文件和普通文本框的值”的问题,在此贴出解决方案。

先给出一段jsp代码,利用form表单,向SubjectfilesServlet传文件和普通文本框的值,注意加红的部分。

<center>

<form method="post" action="SubjectfilesServlet" enctype="multipart/form-data">


<label>&nbsp&nbsp作业名:&nbsp&nbsp</label>
<input ID = name type = "text" name="name"/>

<br><br>


<label>完成天数:</label>
<input ID = day type = "text" name="day"/>

<br><br>


   题目文件:
    <input ID = sub type="file" name="uploadFile" />

<br><br>


    <input type="submit" value="提交"  οnclick="return check()"/>

</form>


注意到,传文件到时候,form表单需要有enctype="multipart/form-data"的参数,但是一旦带了这个参数,就不能在SubjectfilesServlet中利用request.getParameter("name")的方式获取普通文本框的值了(可以尝试一下,得到的全部为null)。为了解决这一问题,可以在SubjectfilesServlet中进行操作:

工程中加入commons-fileupload和commons,然后加入以下代码:

        // 配置上传参数

        DiskFileItemFactory factory = new DiskFileItemFactory();
        //设置内存临界值 - 超过后将产生临时文件并存储于临时目录中
        factory.setSizeThreshold(MEMORY_THRESHOLD);
        // 设置临时存储目录
        factory.setRepository(new File(System.getProperty("java.io.tmpdir")));
        ServletFileUpload upload = new ServletFileUpload(factory);
        //设置最大文件上传值ֵ
        upload.setFileSizeMax(MAX_FILE_SIZE);
        //  设置最大请求值 (包含文件和表单数据)
        upload.setSizeMax(MAX_REQUEST_SIZE);
        //中文处理

        upload.setHeaderEncoding("UTF-8"); 

        List<FileItem> formItems = upload.parseRequest(request);        //这一个行非常重要,对上传流进行分离

利用for循环迭代表单数据

        for (FileItem item : formItems) {
                    if (!item.isFormField()) {
                    // 这里为上传文件的操作
                    }

                    else{

                    //这里就是普通文本框的内容,调用下面的命令,即可得到回传的文本框的值

                    name = item.getString();

                    }

对于普通的字符串,还可以加在form表单的action后面,指定名字和值,但是这样的一般传固定值,对于通过界面与用户交互得到的值,最好按照上面提到的方式。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值