一个Jsp页面会被编译成一个Servlet类,运行时响应某个用户请求的那个对象,就是该类的一个实例。

解决方案 »

  1.   

    this是jsp页面对象,当然实际上执行的时候,jsp会被编译成servlet来执行,所以实际上this是一个servlet。由于你的jsp页面对象已经存在了,所以getServletContext()可以被调用。
      

  2.   

    session request怎么能直接用呢?一样的道理
      

  3.   

    这些都是JSP容器协助自动完成的,如果感兴趣的话,当然可以找一些资料来深入研究一下JSP技术。没兴趣的话知道有那么回事,知道还有别的模块会对它进行处理就行了。
    其实JSP页面离一个JAVA“类”的格式差得远远的呢,想想也知道,肯定是有别的模块做了别有手脚。。
      

  4.   

    jsp会被解析为servlet的class,找到解析后java源文件看看就明白怎么回事了。
      

  5.   

    我也有过上面的考虑,jsp编译成servlet,this指servlet对象,而getContextServlet做为该对象的方法,通过this.getServletContext调用是可以的。但问题是:getContextServlet()不是静态方法,调用时为什么可以不加“对象名.”呢?
    ____________________________________________________________________________________
    至于 
    jihanzhong(逍遥) ( ) 信誉:100    Blog  2006-08-30 14:33:00  得分: 0  
     
     
       session request怎么能直接用呢?一样的道理
    那是因为session request是内建对象,当然可以直接调用,但getContextServlet是方法,没有内建方法一说,可以直接调用的方法只有静态方法,不是吗?
    ____________________________________________________________________________________
    所以这个问题还是没问清,希望有人继续解答,谢谢。
      
     
      

  6.   

    我已经告诉你了,你看看解析成的java源码就明白了,jsp不是类,它不符合java类的所有特性。如果你能写一个解析程序的话,完全可以不用jsp写程序,写成任何你想要得程序,只要最好解析成java源码的时候符合java类的规则就可以了。
      

  7.   

    to flyforlove:
    我用tomcat,解析文件是不是在tomcat的work文件夹啊?
    我看过解析后的.java文件了,不用this的调用解析如下:
    String content=(String)getServletContext().getAttribute(new String("chatTopic_1"));
    用this的调用解析如下:
    String content=(String)this.etServletContext().getAttribute(new String("chatTopic_1"));请问,这样说明什么问题吗?解析过的仍然用this调用,这符合java规则吗?
    又或者我找到的解析文件错了?继续糊涂...请来过路过的继续关注下,谢谢!
      

  8.   

    你找到的事对的亚,getServletContext()本来就是祖先类里的方法,这儿用不用this都一样呀,
    即使你省略不用,编译成class的时候,也会帮你加上的你所谓的不符合规则是指的问什么有this么?
      

  9.   

    ____________________________________________________________________________________
    至于 
    jihanzhong(逍遥) ( ) 信誉:100    Blog  2006-08-30 14:33:00  得分: 0  
     
     
       session request怎么能直接用呢?一样的道理
    那是因为session request是内建对象,当然可以直接调用,但getContextServlet是方法,没有内建方法一说,可以直接调用的方法只有静态方法,不是吗?
    ____________________________________________________________________________________
    所以这个问题还是没问清,希望有人继续解答,谢谢。好吧, 那我说getContextServlet是“内建”方法,你是不是明白了呢?
      

  10.   

    看来这不是jsp的问题,是你自己对java的继承知识还没有一个基本的认识。父类的public方法(当然不只这一种)就可以当成自己的方法用,要不要继承做什么。
      

  11.   

    为什么你觉得用this调用就有问题呢?
      

  12.   

    上面笔误了,我认为没有this调用有问题。
    抛开jsp来说,一个方法要调用不是都要由一个"对象名."来引出吗?(静态方法除外)
    那么这样直接调用getServletContext方法不就有问题了吗?
      

  13.   

    问题就在于JSP页面中的语句最终相当于被整理到一个类的某个方法中,而在类的方法中调用类本身的另一个方法当然不一定要写“this”。
      

  14.   

    public class A{        public A(){        }        public void greeting(){
                    System.out.println("hello");
            }}public class B extends A{        public B(){                greeting();
            }
            public static void main(String[] args){                new B();
            }}c:>java B
       hello"一个方法要调用不是都要由一个"对象名."来引出吗?(静态方法除外)" ---引用楼主的话照这种说法 在 B的构造子里面 调用greeting() 是不合法的 咯????? 因为greeting()不是static的试试看就知道了麻
      

  15.   

    “父类的public方法(当然不只这一种)就可以当成自己的方法用,要不要继承做什么。

    注意这句话。
    另外,didoleo(冷月无声) 也把例子给你举出来了。
      

  16.   

    一个方法要调用不是都要由一个"对象名."来引出吗?它不是没用,而是用了,但是是隐含的用,这个对象名就是this在类中调用这个类的方法,是隐含一个this的,也就是所有的调用实际上都是:this.方法名我记得在JAVA编程思想一书中有说隐含this的
      

  17.   

    getServletContext()是来自父类com.caucho.jsp.JavaPage中的方法因为每个jsp页面都继承com.caucho.jsp.JavaPage,因此继承了com.caucho.jsp.JavaPage的getServletContext()方法,
    揭帖吧
      

  18.   

    好多星星(),哈哈,最近搞Delphi,过来看看,怀念啊.
      

  19.   

    晕,你写的jsp不过是java的一个方法,而且是实例方法,当然可以调用其它方法了
      

  20.   

    是啊是啊。比如:public class A {
        public void f1() { ... }    public void f2() {
            f1(); //瞧见了不?不用对象名有时也可以调用方法。:D
        }
    }
      

  21.   

    didoleo的代码验证了。
    steedhorse(晨星) :"问题就在于JSP页面中的语句最终相当于被整理到一个类的某个方法中,而在类的方法中调用类本身的另一个方法当然不一定要写“this”。"也很有道理
    还有flyforlove辛苦了。
    谢谢所有人,我想这次问题就是“子类调用父类方法+jsp编译”引起的,明白了!