RequestDispatcher.include (...) добавляет имя пакета сервлета - PullRequest
1 голос
/ 09 сентября 2011

У меня есть страница index.jsp, которая загружает изображение. После отправки он отправляется в сервлет Upload.java. В сервлете я проверяю, находится ли расширение в изображении («jpg», «png» и т. Д.), И пересылает его на новую страницу jsp, иначе оно показывает сообщение об ошибке и включает ту же страницу index.jsp.

Мой сервлет - это пакет с именем "servlets".

Если я выберу изображение, оно будет работать правильно. Но если я выберу какой-либо файл, отличный от изображения, он отобразит ошибку на странице index.jsp, как и предполагалось. До сих пор он работает нормально, но если я загружу любой файл, даже изображение отсюда, сервер будет жаловаться.

Вот как я включаю страницу index.jsp в сервлет UploadServlet.java.

out.println("This type of file is not allowed. Please select an image.");
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/index.jsp");
dispatcher.include(request, response);

Вот ошибка сервера, когда я пытаюсь загрузить изображение во второй раз.

HTTP Status 404 - /UploadImage/servlets/servlets/UploadServlet

type Status report

message /UploadImage/servlets/servlets/UploadServlet

description The requested resource (/CropImage/servlets/servlets/UploadServlet) is not available.

Apache Tomcat/6.0.13

Добавляет имя пакета сервлета в URL.

Как решить эту проблему?

Ответы [ 2 ]

1 голос
/ 09 сентября 2011

Очевидно, вы используете относительный URL-адрес действия в вашем <form>.

<form action="servlets/UploadServlet" ...>

Когда вы открываете index.jsp, URL запроса будет

http://localhost:8080/UploadImage/index.jsp

При отправке формы URL-адрес действия относится к текущей папке, поэтому URL-адрес запроса будет

http://localhost:8080/UploadImage/servlets/UploadServlet

Когда вы отправляете форму еще раз, она будет по-прежнему относительно текущей папки, поэтому вы получите

http://localhost:8080/UploadImage/servlets/servlets/UploadServlet

Вам нужно исправить это, чтобы он относился к домену, начиная с косой черты.

<form action="/UploadImage/servlets/UploadServlet" ...>

Таким образом, URL будет разрешен относительно корня домена. Вы также можете динамически разрешить контекстный путь с помощью ${pageContext.request.contextPath}:

<form action="${pageContext.request.contextPath}/servlets/UploadServlet" ...>
0 голосов
/ 09 сентября 2011

Ваш URL неверен.Вы можете открыть web.xml и найти элемент «servlet-mapping», где вы можете найти URL-адрес отображения.

Я думаю, ваш URL может быть "/CropImage/servlets/UploadServlet". Вы можете попытаться удалить один «сервлет» вURL.

...