使用动态包含时,是否可以从一个JSP中调用另一个方法中的方法?

时间:2019-04-12 17:28:48

标签: java jsp servlets

我需要在JSP中调用另一个JSP中定义的方法,该方法应该动态(包括页面)而不是静态(包括文件)包括在内,但是我收到一个jsp编译错误“方法未定义”。当我使用<%@ include file =“”%>“时,效果很好。

我需要这个的原因是我们的JSP最终变得太大,并且出现以下错误:“方法_jspService(HttpServletRequest,HttpServletResponse)的代码超出了65535个字节的限制”(因此需要动态包含其他jsps) ),因此我们将其某些功能分解为较小的JSP。

Foo.jsp

<%@page language="java"%>
<%!

public String getSomeID(String param) throws Exception {
    return "someId";
}

%>

Bar.jsp

<jsp:include page="Foo.jsp"></jsp:include>

String id = getSomeID(param);

我知道这里更好的选择是使用预处理servlet。我们可能会这样做。但是,现在,我仅希望知道在动态包含它的情况下是否可以从另一个jsp调用方法。

1 个答案:

答案 0 :(得分:0)

您不能从 Bar.jsp 中的 Foo.jsp 中引用代码。 如果您使用 jsp:include 执行此操作。

在这种情况下,两个页面都被编译到幕后的独立servlet中。我们称它们为 Foo_Servlet Bar_Servlet

在这种情况下,实际发生的情况如下: Bar_Servlet 在处理请求时将控制权和原始请求传递给 Foo_Servlet 。 一旦 Foo_Servlet 完成 Foo_Servlet 的执行响应(而不是原始的jsp代码),就会与 Bar_Servlet 的响应结合起来。