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