Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JSP中的scriptlet向servlet发送请求_Jsp_Servlets_Scriptlet - Fatal编程技术网

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

如何从JSP中的scriptlet向servlet发送请求,jsp,servlets,scriptlet,Jsp,Servlets,Scriptlet,这是一个简单的问题,但它让我卡住了。我希望从JSP中执行servlet,因此我尝试了以下方法: <% //Fetch server name port from request //Fetch email_addr from DB request * * * //Forward request to servlet sendWelcomeMsg

这是一个简单的问题,但它让我卡住了。我希望从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);
%>

上面的工作原理是,如果我手动刷新页面,页面的其余部分将被呈现,但只有在我进行刷新的情况下。所以,我的问题是

  • 有没有更好的方法不用重写JSP就能做到这一点
  • 失败1.,如何从scriptlet中以编程方式刷新页面

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

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

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

    不过,这不是正常的做法。如果您打算在JSP中显示结果之前对GET请求执行业务任务,那么您需要将该任务放入servlet的
    doGet()
    中,并将其转发给JSP。请求应该首先到达控制器,该控制器通常是一个servlet,而该servlet又会转发到视图,该视图通常是一个JSP。你可以在中找到一个例子

    rd.include(request, response);