【问题标题】:Calling Servlets from JSP从 JSP 调用 Servlet
【发布时间】:2010-09-07 18:07:11
【问题描述】:

我是 servlet 和 JSP 的新手。我正在尝试从 jsp 调用记录器 servlet。要求是 servlet 将控制权返回给 jsp(在记录事件之后)。 servlet 需要是透明的,即根据性能可能会关闭日志记录功能。

JSP:INCLUDE 是唯一的方法吗?还有其他方法吗?

谢谢,

温斯顿。

【问题讨论】:

  • 这个 logger servlet 会做什么?

标签: jsp servlets


【解决方案1】:

您不能直接从 JSP 调用 servlet。但是,您可以发送redirect。这将告诉浏览器它应该在另一个位置寻找资源。

来自 JSP

<%
String destination  ="/jsp/destination.jsp";        
response.sendRedirect(response.encodeRedirectURL(destination));
%>

来自 Serlet

protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException  {

String destination  ="/jsp/destination.jsp";        
response.sendRedirect(response.encodeRedirectURL(destination));

 }
}

如果您的目的是“记录”,您应该使用Filter。 Filter 就像一个轻量级 servlet,它不会生成自己的内容,而是插入到请求处理过程中,并在正常的页面处理之外执行。

强烈建议以MVC 模式的方式使用Servlet/JSP。它将应用程序的数据、用户界面和控制逻辑分成三个独立的实体。该请求由 Servlet(控制器)处理,该 Servlet 将初始化满足用户请求所需的任何 JavaBean(模型)。然后,Servlet(控制器)会将包含 JavaBean(模型)的请求转发到仅包含 HTML 和 JSTL 语法的 JSP(视图)页面。

【讨论】:

  • -1 表示“不能”和 scriptlet-approach,+1 表示过滤器,这是正确的方法。
  • :( 我只是想指出从 jsp 调用 servlet 不是正确的思考方式。无论如何,tks for the -1+1=0 :D
  • 其中一种方式是&lt;jsp:include&gt;,正如 OP 已经提到的那样。另一种(更多的前端控制器模式)方法是首先调用 servlet 而不是 JSP,然后在 doGet() 方法中对 JSP 执行 RequestDispatcher#forward(),正如您后面提到的那样。但毕竟,OP 在这里肯定需要Filter :)
  • 是的,这似乎是一个过滤器的工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-24
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-25
  • 1970-01-01
  • 2015-06-02
相关资源
最近更新 更多