刚学jsp,一直认为<%! %>里面声明的变量相当于全局变量,<% %>里面声明的变量相当于局部变量,
可是看了某些例子后发现这种想法是错误的,在<% %>里面声明的类对象也可以在同一个jsp页面中引用,请哪位帮忙解释一下<%! %>和<% %>到底怎么用吧!急等答案
可是看了某些例子后发现这种想法是错误的,在<% %>里面声明的类对象也可以在同一个jsp页面中引用,请哪位帮忙解释一下<%! %>和<% %>到底怎么用吧!急等答案
解决方案 »
- 我怎么都想不明白为什么我jsp页面循环输不出来数据,望高人帮忙
- 问问struts2类型转换问题
- ssh整合,启动应用就报这个异常
- orcla jdbc 连接的例子 谁有???我忘记了 急用!!!100分
- 表关联,数据不能及时更新高分求救!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 想要jsp下的树形菜单源代码和例程,谢谢!
- Struts的Validation机制,请指教!
- 如何得到此<input type="text" name="aa">的值
- 在java里对数据库进行操做,怎样取得时间差
- 关于javabean的使用!
- 新手问题在eclipse中启动了tomcat本地服务器后无法用浏览执行jsp文件
- SQL分页与Oracle分页的疑问?
上面粗体字代码部分声明了一个整型变量和一个普通方法,表面上看起来这个变量和方法不属于任何类,似乎可以独立存在,但这只是一个假象。打开Tomcat的work\Catalina\localhost\jspPrinciple\org\apache\jsp目录下declare_jsp.java文件,看到如下代码片段:public final class declare_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent {//声明一个整型变量public int count;//声明一个方法public String info(){return "hello";}...}
上面的粗体字代码与JSP页面的声明部分完全对应,这表明JSP页面的声明部分将转换成对应Servlet的成员变量或成员方法。由于JSP声明语法定义的变量和方法对应于Servlet的成员变量和方法,所以JSP声明部分定义的变量和方法可以使用private、public等访问控制符修饰,也可使用static修饰,将其变成类属性和类方法。但不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应Servlet变成抽象类,从而导致无法实例化。打开多个浏览器,甚至可以在不同的机器上打开浏览器来刷新该页面,将发现所有客户端访问的count值是连续的,即所有客户端共享了同一个count变量。这是因为:JSP页面会编译成一个Servlet类,每个Servlet在容器中只有一个实例;在JSP中声明的变量是成员变量,成员变量只在创建实例时初始化,该变量的值将一直保存,直到实例销毁。值得注意的是,info()的值也可正常输出。因为JSP声明的方法其实是在JSP编译生成的Servlet的实例方法——Java里的方法是不能独立存在的,即使在JSP页面中也不行。JSP声明中独立存在的方法,只是一种假象。
<% %>里声明的变量本来就是在jsp页面内可访问的!在jsp页面里是局部变量,相当于Page 变量。<%! %>里的变量是全局的变量相当于application变量,别的用户操作会互相影响。
jsp Scriptlet:<%...%>
jsp 声明:<%!...%>
等等,构造jsp页面元素...
<% %>中不能够定义方法,如果定义方法他会定义到相应JSP.java的方法中,而Java中方法中是不允许在定义方法的。
<%! %>会定义到相应JSP.java的相当于成员变量,只初始化一次。
2 把你的web app部署起来,并且运行
3 跑到${TOMCAT_HOME}\work\Catalina\localhost\${WEBAPP_NAME}\org\apache\jsp\XXXXXXX
来寻找你被翻译成java类的文件 就能看到结果了