2015-10-02 3 views
0

В настоящее время я работаю над загрузкой файлов через сервлеты, и я получаю ошибку 404. Вот мой кодHTTP 404 запрашиваемый ресурс недоступна ошибка в tomcat 8.0.5

FileUpload.html

<html> 
    <head> 
     <title>File Uploading Form</title> 
    </head> 
    <body> 
     <h3>File Upload:</h3> 
     Select a file to upload: 
     <br /> 
     <!-- form tag is genraly used for user input--> 
     <!-- action attr defines action to be performed when form is submitted --> 
     <!-- method attr defines the HTTP method to be used when submitting forms --> 
     <!-- enctype attr specifies the encoding of the submitted data --> 
     <form action="UploadServlet" method="post" enctype="multipart/form-data"> 
     <!-- size attr specifies the visible width in chars of an <input> element --> 
     <input type="file" name="file" size="50" /> 
     <br /> 
     <input type="submit" value="Upload File" /> 
     </form> 
    </body> 
</html> 

Я обновил свой файл web.xml также следующим

<context-param> 
    <description>Location to store uploaded file</description> 
    <param-name>file-upload</param-name> 
    <param-value>c:\apache-tomcat-5.5.29\webapps\data\</param-value> 
</context-param> 
<servlet> 
    <servlet-name>UploadServlet</servlet-name> 
    <servlet-class>UploadServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>UploadServlet</servlet-name> 
    <url-pattern>/UploadServlet</url-pattern> 
</servlet-mapping> 

UploadServlet.java // Импорт требуется Java библиотеки

import java.io.*; 
import java.util.*; 
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; 
import org.apache.commons.io.output.*; 
public class UploadServlet extends HttpServlet { 
    boolean isMultipart; 
    private String filePath; 
    private int maxFileSize = 50 * 1024; 
    private int maxMemSize = 4 * 1024; 
    private File file ; 
    public void init(){ 
     // Get the file location where it would be stored. 
     filePath = 
     getServletConfig().getInitParameter("file-upload"); 
    } 
    public void doPost(HttpServletRequest request, 
      HttpServletResponse response) 
      throws ServletException, java.io.IOException { 
     // Check that we have a file upload request 
     isMultipart = ServletFileUpload.isMultipartContent(request); 
     response.setContentType("text/html"); 
    PrintWriter out = response.getWriter(); 
    if(!isMultipart){ 
    out.println("<html>"); 
    out.println("<head>"); 
    out.println("<title>Servlet upload</title>"); 
    out.println("</head>"); 
    out.println("<body>"); 
    out.println("<p>No file uploaded</p>"); 
    out.println("</body>"); 
    out.println("</html>"); 
    return; 
    } 
    DiskFileItemFactory factory = new DiskFileItemFactory(); 
    // maximum size that will be stored in memory 
    factory.setSizeThreshold(maxMemSize); 
    // Location to save data that is larger than maxMemSize. 
    factory.setRepository(new File("c:\\temp")); 

    // Create a new file upload handler 
    ServletFileUpload upload = new ServletFileUpload(factory); 
    // maximum file size to be uploaded. 
    upload.setSizeMax(maxFileSize); 

    try{ 
    // Parse the request to get file items. 
    List fileItems = upload.parseRequest(request); 

    // Process the uploaded file items 
    Iterator i = fileItems.iterator(); 

    out.println("<html>"); 
    out.println("<head>"); 
    out.println("<title>Servlet upload</title>"); 
    out.println("</head>"); 
    out.println("<body>"); 
    while (i.hasNext()) 
    { 
    FileItem fi = (FileItem)i.next(); 
    if (!fi.isFormField()) 
    { 
     // Get the uploaded file parameters 
     String fieldName = fi.getFieldName(); 
     String fileName = fi.getName(); 
     String contentType = fi.getContentType(); 
     boolean isInMemory = fi.isInMemory(); 
     long sizeInBytes = fi.getSize(); 
     // Write the file 
     if(fileName.lastIndexOf("\\") >= 0){ 
      file = new File(filePath + 
      fileName.substring(fileName.lastIndexOf("\\"))) ; 
     }else{ 
      file = new File(filePath + 
      fileName.substring(fileName.lastIndexOf("\\")+1)) ; 
     } 
     fi.write(file) ; 
     out.println("Uploaded Filename: " + fileName + "<br>"); 
    } 
    } 
    out.println("</body>"); 
    out.println("</html>"); 
    }catch(Exception ex) { 
    System.out.println(ex); 
} 
} 
public void doGet(HttpServletRequest request, 
        HttpServletResponse response) 
    throws ServletException, java.io.IOException { 

    throw new ServletException("GET method used with " + 
      getClass().getName()+": POST method required."); 
} 
} 
+0

Ьгу 'действие =«/ UploadServlet»' с '/' – silentprogrammer

+0

Нет Я устал это, он не работает – Srividya

+0

, что вы имеете в виду, не работает? и какую IDE вы используете? – silentprogrammer

ответ

0

Вам нужно предоставить contextPath, чтобы правильно ссылаться на URL сервлета, я имею в виду, что ваш атрибут действия вашей формы должен быть <form action="/AppContext/UploadServlet" ...

Если вы используете JSP или что-то еще, вместо обычного HTML, вы можете использовать некоторый скриптлет или jstl для извлечения контекста программно, например:

<form action="<%=request.getContextPath()%>/UploadServlet" ... 

или

<form action="${pageContext.request.contextPath}/UploadServlet" ... 

Надеется, что это помогает!

0

Возможно, это из-за структуры вашего проекта. Проверьте нижеприведенные моменты.

$CATALINA_HOME 
| 
|__webapps 
     | 
     |___FileUploadProj 
       | 
       | 
       |______WEB-INF 
       |   |__classes 
       |   | |__UploadServlet.class 
       |   | 
       |   |__src 
       |   | |___UploadServlet.java 
       |   | 
       |   |__lib 
       |   | |___*.jar 
       |   | 
       |   |__web.xml 
       | 
       |_____FileUpload.html 
       | 
       |_____css,images, scripts 
  • Держите Java UploadServlet.java под src папку.
  • после того, как вы скопируете файл java, скопируйте файл UploadServlet.class и сохраните его под листом classes. (Я сомневаюсь, что это может быть проблемой в вашем случае, не забудьте скопировать .class файл каждый раз, когда вы меняете .java файл)
  • Держите web.xml под WEB-INF папку
  • место FileUpload.html за пределами WEB-INF

Как только вы убедитесь, что все это, попробуйте.

0

Я попытался с кодом вы предоставили, когда я загрузил один файл он вернулся ответ, как:

Загруженного Имя файла: image01.jpg

Я подозреваю, что, как вы упакованное приложение для deployment.What @Uppicharla предоставляется правильно.

Я развертывается следующим образом:

webapps\ 
     TestUpload\ 
        index.html 

        WEB-INF\ 
          classes\UploadServlet.class 
          lib\commons-fileupload-1.3.jar,commons-io-2.4.jar 
          web.xml 

Где TestUpload мое имя приложения, index.html мой загрузки HTML. Файл web.xml я использовал:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
    id="WebApp_ID" version="2.5"> 
    <display-name>TestUpload</display-name> 
    <welcome-file-list> 
     <welcome-file>index.html</welcome-file> 
    </welcome-file-list> 

    <context-param> 
     <description>Location to store uploaded file</description> 
     <param-name>file-upload</param-name> 
     <param-value>G:\apache-tomcat-7.0.37\webapps\data\</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>UploadServlet</servlet-name> 
     <servlet-class>UploadServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>UploadServlet</servlet-name> 
     <url-pattern>/UploadServlet</url-pattern> 
    </servlet-mapping> 
</web-app> 

Пожалуйста, попробуйте с этим.

Примечание: Я пробовал с котом 7 с сервлета спецификации более 2,5

Одна вещь, вы используете 8 кота правильно? Но в вашем web.xml вы указали один путь TOMCAT 5