jsp - 使 Servlet 重新加载调用它的页面

标签 jsp servlets

我已经编写了一个完成任务的 Servlet,然后我希望它重新加载最初调用 Servlet 的 JSP。 servlet 运行 enctype='multipart/form-data' JSP,这个 JSP 称为 Uploadtest,每次我尝试运行以下代码时,我都会得到 The requested resource (/project_name/WebContent/jsps/new.jsp) 不可用

我试过:

response.sendRedirect("/WebContent/jsp/Uploadtest.jsp");

getServletContext().getRequestDispatcher("/WebContent/jsps/Uploadtest.jsp").forward   (request, response); 

但是这两个都产生了一个错误,说它找不到我正在寻找的页面。

我正在寻找有关如何解决此问题的任何想法?

谢谢

最佳答案

您确实需要了解项目中源代码布局、部署的网络应用程序布局以及服务器中应用程序布局之间的区别。

部署的 webapp 具有以下结构:

jsps
    Uploadtest.jsp
WEB-INF
    classes
        the compiled classes of your application
    lib
        the jars of your application

部署的应用程序中不存在 WebContent 目录。它正是 Eclipse 存储 webapp 相关资源(JSP 文件、图像等)的地方。

每个 webapp 都有一个上下文路径。如果您的 Web 应用程序的上下文路径是 /foo,则您必须在浏览器的地址栏中为 JSP 输入的路径为:

http://localhost:8080/foo/jsps/Uploadtest.jsp

当您转发到另一个资源时,它总是转发到同一网络应用程序的资源。所以你不需要指定上下文路径:

getServletContext().getRequestDispatcher("/jsps/Uploadtest.jsp").forward (request, response); 

当您重定向(这与转发完全不同)时,您可以重定向到任何 URL(同一个网络应用程序、同一主机上的另一个网络应用程序,或者 www.google.com,如果您愿意)。如果你重定向到同一个webapp的某个资源,你不需要发送http://localhost:8080部分,但是你需要发送上下文路径,后面是资源路径webapp,并且您还应该始终使用 encodeRedirectURL 方法(除非您不关心用户依赖 URL 重写而不是 cookie 进行 session 管理):

String redirect = 
    response.encodeRedirectURL(request.getContextPath() + "/jsps/Uploadtest.jsp");
response.sendRedirect(redirect);

request.getContextPath() 用于获取 /foo 而无需对其进行硬编码。

关于jsp - 使 Servlet 重新加载调用它的页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11190388/

相关文章:

java - jsp中的错误: NullPointerException

java - JQuery Ajax POST 方法不起作用? $.post

java - servlet执行后将结果传递给jsp页面

java - 使用 ServletContext 加载 Applicationscoped Bean

java - 从 Web 应用程序生成动态数据到 pdf

java - 创建 Servlet Cookie

eclipse - Google App Engine - Java 8 和 JSP 文件 : compilation error

java - ServletRequest.setAttribute 是否允许带句点的键名?

java - 从 JSP 中取回对象

java - Servlet 示例 - 找不到文件