我有一个上传图片的index.jsp页面。在提交时,它将转到servlet Upload.java。在servlet中,我正在检查图像的扩展名(“jpg”,“png”等)并转发到新的jsp页面,否则它会显示错误消息并包含相同的index.jsp页面。
我的servlet是一个名为“servlets”的包。
如果我选择图像,那么它正常工作。但是如果我选择除image之外的任何文件,那么它会按预期显示index.jsp页面的错误。直到它现在工作正常,但如果我从这里上传任何文件甚至图像,服务器抱怨。
以下是我在UploadServlet.java servlet中包含index.jsp页面的方法。
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
它将servlet的包名附加到url。
如何解决这个问题?
答案 0 :(得分:1)
显然,您在<form>
中使用了相对操作网址。
<form action="servlets/UploadServlet" ...>
当您打开index.jsp
时,请求网址为
提交表单时,操作URL相对于当前文件夹,因此请求URL将为
当您再次提交表单时,它仍将相对于当前文件夹,因此您最终会进入
http://localhost:8080/UploadImage/servlets/servlets/UploadServlet
您需要将其修改为域相对URL,从前导斜杠开始。
<form action="/UploadImage/servlets/UploadServlet" ...>
这样,URL将相对于域根解析。您还可以通过${pageContext.request.contextPath}
动态解析上下文路径:
<form action="${pageContext.request.contextPath}/servlets/UploadServlet" ...>
答案 1 :(得分:0)
你的网址错了。您可以打开web.xml
并找到“servlet-mapping”元素,您可以在那里找到映射网址。
我猜你的网址可能是"/CropImage/servlets/UploadServlet"
。你可以尝试删除网址中的一个“servlets”。