如何从JSP中的scriptlet向servlet发送请求

时间:2013-01-18 05:42:36

标签: jsp servlets scriptlet

有点简单的问题,但它让我陷入困境。我想从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中以编程方式刷新页面?

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

rd.include(request, response);

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