我需要在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调用方法。
答案 0 :(得分:0)
您不能从 Bar.jsp 中的 Foo.jsp 中引用代码。 如果您使用 jsp:include 执行此操作。
在这种情况下,两个页面都被编译到幕后的独立servlet中。我们称它们为 Foo_Servlet 和 Bar_Servlet 。
在这种情况下,实际发生的情况如下: Bar_Servlet 在处理请求时将控制权和原始请求传递给 Foo_Servlet 。 一旦 Foo_Servlet 完成 Foo_Servlet 的执行响应(而不是原始的jsp代码),就会与 Bar_Servlet 的响应结合起来。