我做了个非常简单的一个例子(这里我暂时用jsp当作servlet)
建立一个test.jsp,代码如下:
<%!String root;%>
<%=this.root%>
<%this.root = "123123";%>首先:我用A机器打开test.jsp,屏幕上应该打印出"null",因为String root 并被有设置值,但在打印出的同时root 被设置成为了"123123"
其次:我用B机器打开test.jsp,竟然直接就打印出"123123"。所以我就想请高手解答下 servlet的生命周期,这个servlet到什么时候才结束呢,为什么用B机器看到的不是"null",而是A机器设置的123123呢?这样给我的感觉有点像在application范围内设置值。小弟菜鸟,问出愚蠢的问题,还请原谅,真的想搞懂,非常感谢!
建立一个test.jsp,代码如下:
<%!String root;%>
<%=this.root%>
<%this.root = "123123";%>首先:我用A机器打开test.jsp,屏幕上应该打印出"null",因为String root 并被有设置值,但在打印出的同时root 被设置成为了"123123"
其次:我用B机器打开test.jsp,竟然直接就打印出"123123"。所以我就想请高手解答下 servlet的生命周期,这个servlet到什么时候才结束呢,为什么用B机器看到的不是"null",而是A机器设置的123123呢?这样给我的感觉有点像在application范围内设置值。小弟菜鸟,问出愚蠢的问题,还请原谅,真的想搞懂,非常感谢!
implements org.apache.jasper.runtime.JspSourceDependent { String root;
private static java.util.Vector _jspx_dependants; public java.util.List getDependants() {
return _jspx_dependants;
} public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException {
...
out.print(this.root);
this.root = "123123";
...
}这个是你的jsp生成的对应的servlet的部分代码 .
重代码可以看到 String root;是类的成员 . 全局的. 在 _jspService 方法中 先输出root 的值然后 给root赋值. 所以第一次访问应该是为null 的 后面的几次 访问都只会执行 _jspService 方法 但这个 时候root 已经被赋了值 . 所以 就回输出"123123"
如果你用<%String root;%>,每次都是null.
对于servlet到什么时候才结束,我认为只要你不关服务器或不调用destory就一直会存在