الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

خطأ في upload servlet !

بدأه JavaPorgrammer في 25 ديسمبر 2010 · 11 رد · 824 مشاهدة · في JavaEE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

يا إخوان انا عملت فورم Upload مع servlet ويعطيني هذا الاستثناء:

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	cn.uploadServlet.doPost(uploadServlet.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

root cause

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1516)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1361)
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	cn.uploadServlet.doPost(uploadServlet.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.26 logs.

upload servlet :

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package cn;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletConfig;
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.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;



/**
 *
 * @author Admin
 */
public class uploadServlet extends HttpServlet {
   private static final String TMP_DIR_PATH = "c:\\tmp";
	private File tmpDir;
	private static final String DESTINATION_DIR_PATH ="/files";
	private File destinationDir;




    @Override
  public void init(ServletConfig config) throws ServletException
    {
         super.init(config);

        tmpDir = new File(TMP_DIR_PATH);
		if(!tmpDir.isDirectory()) {
			throw new ServletException(TMP_DIR_PATH + " is not a directory");
		}
		String realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH);
		destinationDir = new File(realPath);
		if(!destinationDir.isDirectory()) {
			throw new ServletException(DESTINATION_DIR_PATH+" is not a directory");
		}

    }
    // <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */



    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        PrintWriter out = response.getWriter();
	    response.setContentType("text/plain");
	    out.println("<h1>Servlet File Upload Example using Commons File Upload</h1>");
	    out.println();

		DiskFileItemFactory  fileItemFactory = new DiskFileItemFactory ();
		/*
		 *Set the size threshold, above which content will be stored on disk.
		 */
		//fileItemFactory.setSizeThreshold(1*1024*1024); //1 MB
		/*
		 * Set the temporary directory to store the uploaded files of size above threshold.
		 */
		fileItemFactory.setRepository(tmpDir);

		ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
		try {
			/*
			 * Parse the request
			 */
			List items = uploadHandler.parseRequest(request);
			Iterator itr = items.iterator();
			while(itr.hasNext()) {
				FileItem item = (FileItem) itr.next();
				/*
				 * Handle Form Fields.
				 */
				if(item.isFormField()) {
					out.println("File Name = "+item.getFieldName()+", Value = "+item.getString());
				} else {
					//Handle Uploaded files.
					out.println("Field Name = "+item.getFieldName()+
						", File Name = "+item.getName()+
						", Content type = "+item.getContentType()+
						", File Size = "+item.getSize());
					/*
					 * Write file to the ultimate location.
					 */
					File file = new File(destinationDir,item.getName());
					item.write(file);
				}
				out.close();
			}
		}catch(FileUploadException ex) {
			log("Error encountered while parsing the request",ex);
		} catch(Exception ex) {
			log("Error encountered while uploading file",ex);
		}

	}

    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */

ما الحل؟

:huh:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#2

أنتا تستخدم مكتبة تستخدم هذه المكتبة org.apache.commons.io

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#3

شكر الله لك أخ علاء..

هناك سؤال آخر:

كان نتيجة الرفع إلى هذا المسار :

 TEST_PB\build\web\files

وأنا أريد:

TEST_PB\web\files

]

:blush:

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 25 ديسمبر 2010 في 21:16

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#4

قم بعمل نشر للتطبيق (deploy) على tomcat مثلا و لاحظ المسار الذي تم الرفع فيه ... (أعني أن لا تشغل بالك بالمسار في مرحلة التطوير .. لأن كل IDE لها سياسه معينه في هذا الشأن)

#5

حياك أخي هويدي ..

هو أنا أرفع الصور لمجلد داخل المشروع حتى استخدمها في الصفحات ,, فالمسار الصحيح هو :

TEST_PB\web\files

lVA00794.gif

هذا بعد ما اسوي له نشر ، و اصل إلى الصور من خلاله..

لكن المسار الأول لا أستطيع!

تم تعديل هذه المشاركة بواسطة JavaPorgrammer في 26 ديسمبر 2010 في 00:57

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#6

لم افهم شئ :ph34r:

#7

:lol:

اقصد أني لا استطيع الوصول للصور من خلال المستعرض لو تركتها في نفس المسار الأول اللي هو :

اقتباس

TEST_PB\build\web\files

لكي استطيع الوصول إلى الصور يجب أن أرفعها إلى هذا المسار :

 TEST_PB\web\files

يعني لو أردت الوصول إلى الصورة مثلا من المستعرض :

http://localhost:8084/TEST_PB/files/1.jpg

لكن لو صارت في المجلد :build لا أستطيع الوصول إليها خلال المستعرض..

:wacko: الله يعينك على الطلاسم!

أتمنى اني وضحت مرادي..

شاكر لك أخي هويدي على تفاعلك معي ودائما تحرجني بكرمك :blush:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#8

ضع الشيفرة من فضلك

تحياتي

حزمة المحرك الإصدارة 0.8

أي أحد يجد أني ظلمته فليراسلني

وبإذن الله لو كان له حق سيأخذه

728x90.png

#9

حياك اخي علاء ... شاكر لك تفاعلك :blush:

موجودة في الآعلى..

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#10

نعم ...

لحل المشكله قم بالتالي:

قم بتحويل مشروعك ل ملف WAR ...

في Eclipse ... إختار المشروع من ال project expolrer .. و إضغط بزر الفأره الأيمن ثم إختار Export ثم إختر من القائمه : WAR ...

بعد ذلك .. قم بتشغيل tomcat و ضع ملف الWAR داخل tomcal/webapps ... و إستعرض التطبيق في المستعرض... و إخبرنا ماذا وجدت..

الحكمه من هذه كله ... أن المجلد build هو مرتبط بال NetBeans و لا يتم إنشاءه في ال tomcat.... هل فهمت؟

#11

أخي هويدي .. شاكر لك تفاعلك.

صح مجلد build مرتبط بـ netbeans "عشان كذا انا قلت لك اريد اغير مسار رفع الملفات.. "

فأنا أعتقد أن المشكلة في الكود نفسه..

String realPath = getServletContext().getRealPath(DESTINATION_DIR_PATH);

حاولت اغير فيها لكن للأسف يعطيني ان المجلد غير موجود ، وانا متأكد من وجود المجلد..

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

#12

تم بحمد الله حل الإشكال :lol:

قمت بالتعديل على مسار الملف في الجملة التالية :

 String realPath = "C:\\Users\\Admin\\Documents\\NetBeansProjects\\TEST_PB\\web\\"+DESTINATION_DIR_PATH;

لأن الأمر التالي:

getServletContext().getRealPath(DESTINATION_DIR_PATH);

يرجع القيمة التالية:

C:\Users\Admin\Documents\NetBeansProjects\TEST_PB\build\web\

شاكر لجميع الإخوة اللذين تفاعلوا معي. وغلبتكم معاي :blush:

عفواً أحبتي انقطاعي بسبب الدراسة دعواتكم بالتوفيق..

{ لا ينال العلم مستحٍ ولا مستكبر }

مواضيع مشابهة