CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2EE / EJB / JMS

找不到好答案!!getServletContext()不是一个静态方法,为什么jsp中可以直接调用呢?

楼主alpha2007(高低频)2006-08-30 14:27:24 在 Java / J2EE / EJB / JMS 提问

在jsp页面中可以如下调用:  
  String   content=(String)getServletContext().getAttribute(...);  
  getServletContext()不是一个静态方法,为什么能直接调用呢?  
   
  此外,jsp页面中0如果写成this.getServletContext().getAttribute(...);也是对的,这里的this是什么对象啊?  
   
   
  问题点数:20、回复次数:27Top

1 楼steedhorse(晨星)回复于 2006-08-30 14:31:08 得分 0

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

2 楼infowain(infowain)回复于 2006-08-30 14:32:41 得分 0

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

3 楼jihanzhong(逍遥)回复于 2006-08-30 14:33:11 得分 0

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

4 楼steedhorse(晨星)回复于 2006-08-30 14:36:35 得分 0

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

5 楼flyforlove(吾将远去)回复于 2006-08-30 14:41:11 得分 0

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

6 楼alpha2007(高低频)回复于 2006-08-30 14:44:24 得分 0

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

7 楼flyforlove(吾将远去)回复于 2006-08-30 14:57:45 得分 0

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

8 楼alpha2007(高低频)回复于 2006-08-30 15:06:56 得分 0

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规则吗?  
  又或者我找到的解析文件错了?继续糊涂...  
   
  请来过路过的继续关注下,谢谢!Top

9 楼flyforlove(吾将远去)回复于 2006-08-30 15:14:42 得分 0

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

10 楼alpha2007(高低频)回复于 2006-08-30 15:19:20 得分 0

是,父类方法在子类调用时,可以直接调用吗?Top

11 楼jihanzhong(逍遥)回复于 2006-08-30 15:19:58 得分 0

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

12 楼flyforlove(吾将远去)回复于 2006-08-30 15:30:52 得分 10

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

13 楼steedhorse(晨星)回复于 2006-08-30 16:14:54 得分 0

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

14 楼alpha2007(高低频)回复于 2006-08-30 18:25:34 得分 0

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

15 楼steedhorse(晨星)回复于 2006-08-30 19:32:32 得分 5

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

16 楼didoleo(冷月无声)回复于 2006-08-30 21:59:02 得分 5

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的  
   
  试试看就知道了麻  
  Top

17 楼hjm123()回复于 2006-08-30 22:10:03 得分 0

????????????????  
   
  Top

18 楼flyforlove(吾将远去)回复于 2006-08-30 22:45:32 得分 0

“父类的public方法(当然不只这一种)就可以当成自己的方法用,要不要继承做什么。  
  ”  
  注意这句话。  
   
   
  另外,didoleo(冷月无声)   也把例子给你举出来了。Top

19 楼liang8305(换工作的时间到了...)回复于 2006-08-30 23:04:22 得分 0

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

20 楼shengshuai(卡农的魔笛)回复于 2006-08-31 07:46:33 得分 0

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

21 楼stevensinclair(向PM前进)回复于 2006-08-31 08:08:04 得分 0

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

22 楼SHauCle(我不想就这样一直走 ....)回复于 2006-08-31 08:35:55 得分 0

我想扁人了Top

23 楼treeroot(旗鲁特)回复于 2006-08-31 09:01:31 得分 0

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

24 楼qingyuan18(zealot_tang)回复于 2006-08-31 09:07:06 得分 0

楼主不要钻牛角尖嘛~~Top

25 楼steedhorse(晨星)回复于 2006-08-31 09:47:02 得分 0

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

26 楼daryl715(上善若水)回复于 2006-08-31 10:02:45 得分 0

没必要深究这些吧,清楚了又如何,不清楚又如何呢Top

27 楼alpha2007(高低频)回复于 2006-08-31 10:50:38 得分 0

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

相关问题

关键词

得分解答快速导航

  • 帖主:alpha2007
  • flyforlove
  • steedhorse
  • didoleo

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo