Servlet转发

时间:2014-08-11 22:33:56

标签: java jsp servlets

我在我的项目中使用了被盗的码头,并提出了一些问题。我有这两页:

  • 的index.jsp
  • result.jsp中

这两个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?

2 个答案:

答案 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来显示您的信息。