日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JSP上传文件失败的问题 未解决

發(fā)布時間:2024/2/28 javascript 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSP上传文件失败的问题 未解决 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

服務(wù)器操作系統(tǒng):CentOS 7.3 64位
本機(jī):win10上使用WinSCP遠(yuǎn)程傳輸文件,使用putty遠(yuǎn)程執(zhí)行命令

已經(jīng)完成的步驟:

Tomcat啟動

下圖,成功啟動

后臺 Servlet 編寫

用的是 JavaWeb學(xué)習(xí)總結(jié)(五十)——文件上傳和下載 中的代碼

package me.gacl.web.controller;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.servlet.ServletException; 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.disk.DiskFileItemFactory; import org.apache.commons.fileupload.servlet.ServletFileUpload;public class UploadHandleServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//得到上傳文件的保存目錄,將上傳的文件存放于WEB-INF目錄下,不允許外界直接訪問,保證上傳文件的安全String savePath = this.getServletContext().getRealPath("/WEB-INF/upload");File file = new File(savePath);//判斷上傳文件的保存目錄是否存在if (!file.exists() && !file.isDirectory()) {System.out.println(savePath+"目錄不存在,需要創(chuàng)建");//創(chuàng)建目錄file.mkdir();}//消息提示String message = "";try{//使用Apache文件上傳組件處理文件上傳步驟://1、創(chuàng)建一個DiskFileItemFactory工廠DiskFileItemFactory factory = new DiskFileItemFactory();//2、創(chuàng)建一個文件上傳解析器ServletFileUpload upload = new ServletFileUpload(factory);//解決上傳文件名的中文亂碼upload.setHeaderEncoding("UTF-8"); //3、判斷提交上來的數(shù)據(jù)是否是上傳表單的數(shù)據(jù)if(!ServletFileUpload.isMultipartContent(request)){//按照傳統(tǒng)方式獲取數(shù)據(jù)return;}//4、使用ServletFileUpload解析器解析上傳數(shù)據(jù),解析結(jié)果返回的是一個List<FileItem>集合,每一個FileItem對應(yīng)一個Form表單的輸入項List<FileItem> list = upload.parseRequest(request);for(FileItem item : list){//如果fileitem中封裝的是普通輸入項的數(shù)據(jù)if(item.isFormField()){String name = item.getFieldName();//解決普通輸入項的數(shù)據(jù)的中文亂碼問題String value = item.getString("UTF-8");//value = new String(value.getBytes("iso8859-1"),"UTF-8");System.out.println(name + "=" + value);}else{//如果fileitem中封裝的是上傳文件//得到上傳的文件名稱,String filename = item.getName();System.out.println(filename);if(filename==null || filename.trim().equals("")){continue;}//注意:不同的瀏覽器提交的文件名是不一樣的,有些瀏覽器提交上來的文件名是帶有路徑的,如: c:\a\b\1.txt,而有些只是單純的文件名,如:1.txt//處理獲取到的上傳文件的文件名的路徑部分,只保留文件名部分filename = filename.substring(filename.lastIndexOf("\\")+1);//獲取item中的上傳文件的輸入流InputStream in = item.getInputStream();//創(chuàng)建一個文件輸出流FileOutputStream out = new FileOutputStream(savePath + "\\" + filename);//創(chuàng)建一個緩沖區(qū)byte buffer[] = new byte[1024];//判斷輸入流中的數(shù)據(jù)是否已經(jīng)讀完的標(biāo)識int len = 0;//循環(huán)將輸入流讀入到緩沖區(qū)當(dāng)中,(len=in.read(buffer))>0就表示in里面還有數(shù)據(jù)while((len=in.read(buffer))>0){//使用FileOutputStream輸出流將緩沖區(qū)的數(shù)據(jù)寫入到指定的目錄(savePath + "\\" + filename)當(dāng)中out.write(buffer, 0, len);}//關(guān)閉輸入流in.close();//關(guān)閉輸出流out.close();//刪除處理文件上傳時生成的臨時文件item.delete();message = "文件上傳成功!";}}}catch (Exception e) {message= "文件上傳失敗!";e.printStackTrace();}request.setAttribute("message",message);request.getRequestDispatcher("/message.jsp").forward(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);} }

編譯

將需要用到的外部jar包servlet-api.jar和commons-fileupload-1.3.2.jar放在jdk所在路徑的lib下:/usr/local/jdk-12.0.1/lib

在profile中添加環(huán)境變量如下

export JAVA_HOME=/usr/local/jdk-12.0.1 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:/usr/local/jdk-12.0.1/lib/commons-io-2.5.jar:/usr/local/jdk-12.0.1/lib/commons-fileupload-1.3.2.jar

下圖:將UploadHandleServlet.java放在/home/pan/tomcat/webapps/ROOT文件夾中,并編譯

正常編譯了,應(yīng)該沒什么問題

文件上傳頁面: upload.jsp

<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML> <html><head><title>文件上傳</title></head><body><form action="${pageContext.request.contextPath}/servlet/UploadHandleServlet" enctype="multipart/form-data" method="post">上傳用戶:<input type="text" name="username"><br/>上傳文件1<input type="file" name="file1"><br/>上傳文件2<input type="file" name="file2"><br/><input type="submit" value="提交"></form></body> </html>

消息提示頁面: message.jsp

<%@ page language="java" pageEncoding="UTF-8"%> <!DOCTYPE HTML> <html><head><title>消息提示</title></head><body>${message}</body> </html>

在Web.xml文件中注冊UploadHandleServlet

web.xml如下

<servlet><servlet-name>UploadHandleServlet</servlet-name><servlet-class>me.gacl.web.controller.UploadHandleServlet</servlet-class> </servlet><servlet-mapping><servlet-name>UploadHandleServlet</servlet-name><url-pattern>/servlet/UploadHandleServlet</url-pattern> </servlet-mapping>

以上文件都放在/home/pan/tomcat/webapps/ROOT路徑下

然后遇到了問題

下圖:打開頁面,選擇上傳的文件,點(diǎn)擊提交,返回為404

錯誤信息如下,文件夾里也沒有增加任何文件

網(wǎng)上有人說是可能是路徑不對,我看了看沒有問題(可能有問題但是沒發(fā)現(xiàn)吧…)

然后,特意新建了代碼中用到過的文件夾(下圖)
另外為了避免運(yùn)行的時候找不到文件,我(不擇手段地復(fù)制到所有可能用到的地方)把jsp和xml以及java文件又在ROOT/servlet文件夾中復(fù)制了一遍,復(fù)制完重新編譯了一下java文件

還是不行,網(wǎng)頁能打開,點(diǎn)擊提交之后返回404,重啟了服務(wù)器也是不行,不知道是哪一步的問題…不知道有沒有什么 調(diào)試/打印log 的方式?

總結(jié)

以上是生活随笔為你收集整理的JSP上传文件失败的问题 未解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。