【问题标题】:RequestDispatcher.include(...) appends servlet's package nameRequestDispatcher.include(...) 附加 servlet 的包名
【发布时间】:2011-09-09 05:20:58
【问题描述】:

我有一个上传图片的 index.jsp 页面。在提交时,它转到一个 servlet Upload.java。在 servlet 中,我正在检查 image("jpg","png",etc) 的扩展名并转发到新的 jsp 页面,否则它会显示错误消息并包含相同的 index.jsp 页面。

我的 servlet 是一个名为“servlets”的包。

如果我选择了一张图片,那么它就可以正常工作。但是,如果我选择图像以外的任何文件,那么它会按预期显示 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。

如何解决这个问题?

【问题讨论】:

  • 它在 Firefox 中运行良好,但问题在 IE 中。
  • Manohar,这不是真的。它应该有同样的问题。这只是你对问题的误解。
  • 我在 Firefox 中检查了它,它运行良好,我不知道如何。但在 IE 中它给出了问题。我将尝试您在下面给出的答案,并让大家知道。感谢您的回复。

标签: java jsp servlets requestdispatcher


【解决方案1】:

显然您在 <form> 中使用了相对操作 URL。

<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

您需要将其修复为与域相关的 URL,以斜杠开头。

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

这样,URL 将相对于域根进行解析。也可以通过${pageContext.request.contextPath}动态解析上下文路径:

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

【讨论】:

  • 我会尝试一下,如果它解决了问题,请告诉您。感谢您的回复。
  • 感谢 BalusC,您的回答解决了我的问题。我使用
    问题得到了解决。
  • 不客气。但是,我建议您利用 servlet 的 doGet() 方法,以便最终获得更清晰的 URL。另请参阅我们的 servlets wiki 页面:stackoverflow.com/tags/servlets/info
【解决方案2】:

你的网址是错误的。您可以打开web.xml 并找到“servlet-mapping”元素,在那里您可以找到映射网址。

我猜你的url可能是"/CropImage/servlets/UploadServlet"。你可以尝试删除url中的一个“servlet”。

【讨论】:

  • 这是我的 J2EE 组件的描述这是我的 J2EE 组件的显示名称UploadServletservlets.UploadServletUploadServlet/servlets /UploadServlet
猜你喜欢
  • 1970-01-01
  • 2019-12-08
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 2010-12-30
  • 2016-09-03
  • 2013-07-07
相关资源
最近更新 更多