java - RequestDispatcher.include(...) 附加 servlet 的包名称

标签 java jsp servlets requestdispatcher

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

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

如果我选择一个图像,那么它就可以正常工作。但是,如果我选择图像以外的任何文件,那么它会按预期显示 index.jsp 页面的错误。到目前为止它工作正常,但如果我从这里上传任何文件甚至图像,服务器就会提示。

以下是我如何将 index.jsp 页面包含在 UploadServlet.java servlet 中。

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 中。

如何解决这个问题?

最佳答案

显然您在 <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" ...>

关于java - RequestDispatcher.include(...) 附加 servlet 的包名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7357427/

相关文章:

java - Android项目连接WampServer的IP地址是多少?

javascript - 使用jsp动态包含时Onload可以提前触发吗?

java - 打印从 servlet 传递的表中的完整行

java - 获取 HttpServletRequest 状态以避免 IllegalStateException

jakarta-ee - 与 Java EE 项目相关的 web.xml 中可以使用的所有可能标记有哪些?

java - 删除 Java 中的日志

java - 如何在 jflex 中创建 lambda 符号?

java - @RolesAllowed 无法正常工作

jsp - Java Web 应用程序未编译 JSP

java - 如何从jsp的下拉列表中选择一个选项?