Я новичок в Java FileUpload API Apache, и для начала я нашел учебник , который объясняет, как FileUpload может использоваться в сервлете.Я использую Eclipse 3.7 и создал динамический проект, чтобы попробовать пример, описанный в ссылке.Ниже приведена структура каталогов моего проекта.
![Project Directory Structure](https://i.stack.imgur.com/KAT79.png)
Хотя код UploadImage.java
такой же, как указано в примере, за исключением того, что у меня есть файл сервлета в пакете servlets
иMIME-тип файла - изображение JPEG вместо обычного текста.Теперь я новичок в разработке сервлетов в Eclipse, но, насколько я понимаю, файл класса, созданный из сервлета, должен храниться в папке WEB-INF\classes
, а его записи - в web.xml
.Кроме того, код index.jsp такой же, как упомянуто в примере данного руководства.Теперь у меня <form action="/servlets.UploadImage" enctype="multipart/form-data" method="post">
в моем index.jsp
.Когда я пытаюсь запустить проект, index.jsp
выглядит просто забавно, но когда я выбираю файл изображения и нажимаю кнопку загрузки, я получаю ошибку 404 not found
.Кроме того, как я могу заставить Eclipse помещать сгенерированный файл класса UploadImage.java
в WEb-INF\classes
при сборке проекта.
Я работал над этим простым примером в течение последних 4 часов и был новичком в сервлете.разработки в Eclipse, я не знаю, как с этим работать, поэтому любая помощь приветствуется.
Примечание: Все необходимые файлы .jar включены в библиотеки проекта.
Обновление: После внесения изменений, предложенных BalusC , я все еще не могу решить проблему.Я предоставляю точный код из 3 важных файлов проекта, который, я считаю, как-то связан с этой проблемой.Структура каталогов проекта остается такой же, как показано выше.
index.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Image Upload Example</title>
<style type="text/css">
#uploadimage {
width: 150px;
height: 150px;
background: #f8f8f8;
}
</style>
</head>
<body>
<div id="uploadimage"> </div>
<form action="servlets.UploadImage" enctype="multipart/form-data" method="post">
<input type="file" name="file1"><br/>
<input type="submit" value="Upload File"><br/>
</form>
</body>
</html>
UploadImage.java (сервлет)
package servlets;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;
import org.apache.commons.fileupload.*;
import org.apache.commons.fileupload.disk.*;
import org.apache.commons.fileupload.servlet.*;
/**
* Servlet implementation class UploadImage
*/
@WebServlet("/UploadImage")
public class UploadImage extends HttpServlet
{
private static final long serialVersionUID = 1L;
private static final String temppath = System.getenv("temp");
private File tempdir;
private static final String storepath = "/Uploads";
private File storedir;
public void init(ServletConfig config) throws ServletException
{
super.init(config);
tempdir = new File(temppath);
if (!tempdir.isDirectory())
{
throw new ServletException(temppath + " is not a directory.");
}
String realpath = getServletContext().getRealPath(storepath);
storedir = new File(realpath);
if (!storedir.isDirectory())
{
throw new ServletException(storepath + " is not a directory.");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
PrintWriter out = response.getWriter();
response.setContentType("image/jpeg");
out.println("<h2 align='center'>Impage Upload Example</h2>");
DiskFileItemFactory fif = new DiskFileItemFactory();
fif.setSizeThreshold(5 * 1024 * 1024);
fif.setRepository(tempdir);
ServletFileUpload uh = new ServletFileUpload(fif);
try
{
List items = uh.parseRequest(request);
Iterator itr = items.iterator();
while (itr.hasNext())
{
FileItem item = (FileItem) itr.next();
if (item.isFormField())
{
out.println("File Name = " + item.getFieldName() + ", Value = " + item.getString());
}
else
{
out.println("Field Name = " + item.getFieldName()
+ ", File Name = " + item.getName()
+ ", Content type = " + item.getContentType()
+ ", File Size = " + item.getSize());
File file = new File(storedir, item.getName());
item.write(file);
}
out.close();
}
}
catch (FileUploadException fex)
{
out.println("Error encountered while parsing the request<br/>" + fex);
}
catch (Exception ex)
{
out.println("Error encountered while parsing the request<br/>" + ex);
}
}
}
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_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Apache FileUpload</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>UploadImage</servlet-name>
<servlet-class>servlets.UploadImage</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadImage</servlet-name>
<url-pattern>/servlets.UploadImage</url-pattern>
</servlet-mapping>
</web-app>
Извините за столь длинный вопрос.: -Р