0

有点简单的问题,但它让我卡住了。我想从 JSP 中执行一个 servlet,所以我尝试了类似以下的方法:

<%
    //Fetch server name port from request
    //Fetch email_addr from DB request
                   *
                   *
                   *
    //Forward request to servlet sendWelcomeMsg
    RequestDispatcher rd = getServletContext().getRequestDispatcher("/sendWelcomeMsg?  
      recipient=" + email_addr + 
      "&contentServerName=" + request.getServerName() + 
      "&contentServerPort=" + request.getServerPort());
    rd.forward(request, response);
%>

上述工作,如果我手动刷新页面,页面的其余部分会被渲染,但前提是我进行刷新。所以,我的问题是,

  1. 有没有更好的方法可以在不对我的 JSP 进行重大重写的情况下做到这一点?
  2. 失败 1.,如何从 scriptlet 中以编程方式刷新页面?
4

2 回答 2

0

从 JSP 转发到 Servlet 是不正常的。应该是反过来的。否则,servlet 将完全接管响应处理。IllegalStateException轮到 JSP 时,您可能会在 servet 日志中看到错误。

但是,您可以在 JSP 中包含 servlet 的输出(请注意,有问题的 servlet 可以而且不应该修改响应标头):

rd.include(request, response);

不过,这不是正常的做法。如果您打算在将结果呈现在 JSP 中之前对 GET 请求执行业务任务,那么您需要将该任务放在 servlet 中doGet()并将其转发给 JSP。请求应该首先到达控制器,通常是一个 servlet,然后再转发到视图,通常是一个 JSP。您可以在我们的 servlets wiki 页面中找到一个示例。

于 2013-01-18T20:12:23.250 回答
0

我决定在页面中添加一个表单,让用户随意调用 servlet(servlet 发送一条欢迎消息,而用户可能想要发送几个,作为测试)。

于 2013-01-18T19:58:33.977 回答