gpt4 book ai didi

java - Servlet 转发

转载 作者:行者123 更新时间:2023-12-01 12:39:29 29 4
gpt4 key购买 nike

我在我的项目中使用嵌入 jetty 并提出了一些问题。我有这两页:

  • íindex.jsp
  • 结果.jsp

这两个 servlet:

  • 上传
  • 搜索

在 íindex.jsp 中有一个用于上传文件的表单,上传过程由上传 servlet 处理,但随后我应该向 íindex.jsp 返回一条消息以告知上传是否完成。

request.setAttribute("message", "Upload Sucedded!");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
rd.forward(request, response);

这会将消息转发到 íindex 页面,但 url 将是/upload,我希望成为 íindex。那么还有其他一些方法来构造我的文件,也许可以让我的欢迎文件成为一些 servlet 而不是 íindex.jsp?

最佳答案

这与 Jetty 无关。这是转发的默认行为。

丑陋的解决方案:

如果您想重写 URL,请使用重定向并通过 session 传递参数。显示消息后,将其从 session 中删除。

更好的解决方案:

通过 IndexServlet 更改上传 servlet 的名称。该servlet 将处理对index.jsp 页面的GET 和POST 请求。处理结束时,您将转到 JSP 页面。通过这样做,您可以直接将表单发布到当前页面:

<form action="index.jsp" method="POST" enctype="multipart/form-data">
<!-- your fields ... -->
</form>

然后你的servlet:

@WebServlet("index.jsp")
public class IndexServlet extends HttpServlet {
//using ... to avoid parameters and exceptions to be thrown
@Override
public void doGet(...) throws ... {
//this method should only forward to your view
RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}

//using ... to avoid parameters and exceptions to be thrown
@Override
public void doPost(...) throws ... {
//current implementation...
//in the end, forward to the same view
request.setAttribute("message", "Upload Sucedded!");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
rd.forward(request, response);
}
}

更多信息:

关于java - Servlet 转发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25253501/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com