我在我的项目中使用了被盗的码头,并提出了一些问题。我有这两页:
这两个servlet:
在índex.jsp中有一个表单可以上传文件,上传进程在上传servlet中处理,但是我应该向índex.jsp返回一条消息,告诉他们上传是否完成。
request.setAttribute("message", "Upload Sucedded!");
RequestDispatcher rd = getServletContext().getRequestDispatcher("/index.jsp");
rd.forward(request, response);
这会将消息转发到índex页面,但网址将是/ upload,我想成为índex。所以有一些结构我的文件的方式,也许我的欢迎文件是一些servlet而不是índex.jsp?
答案 0 :(得分:1)
这与Jetty无关。这是转发的默认行为。
如果要重写URL,请改用重定向并按会话传递参数。显示消息后,将其从会话中删除。
通过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);
}
}
更多信息:
答案 1 :(得分:0)
最简单的解决方案是将上传servlet更改为使用重定向并使用请求参数而不是像这样的属性:
// upload servlet
response.sendRedirect("index.jsp?message=YourMessage");
然后在index.jsp
中使用request.getParameter("message")
或EL来显示您的信息。