RequestDispatcher.include (...) agrega el nombre del paquete del servlet

Tengo una página index.jsp que carga una imagen. Al enviarlo va a un servlet Upload.java. En el servlet, estoy verificando si la extensión de la imagen ("jpg", "png", etc.) y reenvía a la nueva página jsp, de lo contrario, muestra un mensaje de error e incluye la misma página index.jsp.

Mi servlet es un paquete llamado "servlets".

Si selecciono una imagen, está funcionando correctamente. Pero si selecciono cualquier archivo que no sea imagen, entonces muestra el error con la página index.jsp como se esperaba. Hasta ahora funciona bien, pero si subo algún archivo, incluso una imagen desde aquí, el servidor se queja.

Así es como estoy incluyendo la página index.jsp en el servlet 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);

Aquí está el error del servidor cuando intento cargar la imagen por segunda vez.

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

Anexa el nombre del paquete del servlet a la url.

¿Cómo resolver este problema?

Respuesta 1

Aparentemente estás usando una URL de acción relativa en tu <form>.

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

Cuando abre index.jsp, la URL de solicitud es

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

Cuando envíe el formulario, la URL de acción es relativa a la carpeta actual, por lo que la URL de solicitud será

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

Cuando envíe el formulario una vez más, seguirá siendo relativo a la carpeta actual, por lo que terminará en

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

Debe arreglarlo para que sea una URL relativa al dominio, comenzando con una barra diagonal inicial.

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

De esta forma, la URL se resolverá en relación con la raíz del dominio. También puede resolver la ruta de contexto de forma dinámica ${pageContext.request.contextPath}:

<form action="${pageContext.request.contextPath}/servlets/UploadServlet" ...>
Respuesta: 2

I'm facing a problem when I try to read the content of a PDF document. I'm using iText 2.1.7 with Java, and I need to analyze the content of a PDF document: at first I was using the PdfTextExtractor's ...

Estoy intentando crear una acción HTTPRouter (dentro de un esb) que envía algo de XML a una URL externa. La URL es segura, pero tiene un certificado autofirmado para el que no tengo el almacén de claves. Abajo ...

Está bien documentado que un código como el siguiente Rectángulo final limita = device.getDefaultConfiguration (). GetBounds (); Inserciones finales screenInsets = Toolkit.getDefaultToolkit () ....

Tengo una conexión JNDI a un servidor LDAP (Active Directory en este caso). También ctx.extendedOperation (new StartTlsRequest ()) para obtener una conexión segura. En esta conexión necesito validar ...