jsp表單向servlet傳文件時,同時傳普通文本框的值——解決jsp向後臺傳文件時,普通文本框爲null的問題

在完成一個在線學生作業管理系統的時候,涉及到“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="提交"  onclick="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後面,指定名字和值,但是這樣的一般傳固定值,對於通過界面與用戶交互得到的值,最好按照上面提到的方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章