<% String fname=request.getParameter("fname"); String username=getVal("lname"); %> <%! private String getVal(String param){ return request.getParameter("fname"); } %> /* --err org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP PWC6197: An error occurred at line: 5 in the jsp file: /register.jsp PWC6199: Generated servlet error: string:///register_jsp.java:12: cannot find symbol symbol : variable request location: class org.apache.jsp.register_jsp /*
JSP通过一个JSP编译器,该编译器会将JSP页面转换为servlet,从而自动生成Java代码。
JSP指令指示JSP编译器在哪里放置内容。内部的所有内容<% %>(称为 JSP scriptlets )都将放入service()生成的servlet 的方法中。内部的所有内容<%! %>(称为 JSP声明 )都将成为生成的servlet实际类的一部分,因此您的getVal()将成为实例方法。
<% %>
service()
<%! %>
标准request(和session与pageContext等)对象实例的内部限定service(),以便它们被在效果,仅提供内部JSP脚本部分方法。
request
session
pageContext
例如,如果您在Tomcat上运行,那么如果您在Tomcat安装中的“工作”目录中查看,则可以查看JSP页面实际生成的Java代码。如果不能更好地了解“幕后”情况,可能会很有趣。