有点简单的问题,但它让我陷入困境。我想从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);
%>
上述类型的工作,因为如果我手动刷新页面,页面的其余部分将被渲染,但仅限于我进行刷新。所以,我的问题是,
答案 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中找到一个示例。