当前位置:  技术问答>java相关

纠正一个include问题的错误,这个错误在精华贴中也存在,希望版主重视!

    来源: 互联网  发布时间:2015-08-31

    本文导语:  近日做一项目要用到JSP动态包含JSP,本想肯定很简单,但不想这么复杂,而且目前还没有求到好的答案,问题如下: ---------------------------------------- #文件:...

近日做一项目要用到JSP动态包含JSP,本想肯定很简单,但不想这么复杂,而且目前还没有求到好的答案,问题如下:
----------------------------------------
#文件:one.jsp

----------------------------------------
#文件 two.jsp

----------------------------------------
#文件 three.jsp







----------------------------------------
执行three.jsp会出什么结果?
a.编译错误
b.显示China England

很多人理所当然的觉得肯定是a,因为j=1所以只包含one.jsp,two.jsp不会包含进来,但答案是b,上机测试就知道。
为什么?
因为@include要先于jsp的其他代码执行,所以两个文件都会被包含进来!
----------------------------------------
如果你说用jsp:include可以解决问题,好,把three.jsp改成如下:
#文件 three.jsp




----------------------------------------
结果是什么?
a.编译错误
b.显示 China

是b吗,不,是a,编译错误!提示var1未定义。

为什么?因为jsp:include是动态包含,相当于把包含文件与被包含文件分开编译。
----------------------------------------

 现把include的问题总结如下:
【引用 gfzhx(小小)的话】
    动态包含相当于作了一个页面跳转,也就是相当于重新访问了另一个servlet,所以当然会提示变量没有定义,你想一想

,一个类中申明了一个变量,第二个类直接是用这个变量,你说可以吗?其实你的情况和这个例子很像,这就是动态包含,

而静态包含你可以看一看jsp编译后的java文件就知道了,它是直接将你包含的页面直接包含进去,然后再编译的。所以你的

问题采用静态包含就可以了。不过不管怎么,还是不推荐采用这种形式,会给程序造成很多问题,至少比较难以维护了,可

以说是一种不好的编程风格。建议采用其他方法解决问题。

【引用 xiao_yuer(小鱼儿)的话】
 要使用引入文件中定义的变量,只能用@include指令。
也就是,但这在一般情况下都不是动态的,是在jsp页面第一次编译时,把它导入的。而jsp

编译后,这两个文件再作修改很多jsp服务器都不会侦测到,因为包含这两的jsp的jsp文件本身并没有发生变化。但很奇怪,

weblogic6好像可以。你可以试试,不过不要抱太大希望,因为你这种要求不是很合理。向你这种情况,完全应该引入一个

java类,这个类中定义一些变量(按你的说法都应该算是常量了,jsp取出来直接用而不会修改它再存回去),然后再jsp中

得到那个类的实例,来进行处理。那样如果你要修改这些常量的值,就修改java类,而不用修改jsp.

【自己的:-))】
 @include包含是静态包含,是把被包含文件加入到包含文件中然后进行编译,所以这种包含与解释执行的语言很象(例如

php),而且JSP中@开头的语句都要先于其他语句执行,所以如上,用if.else来判断然后包含是不行的,所以以前如果是做

PHP这种解释语言的人会觉得不适应(象我,:(()
 
 jsp:include是既可以静态包含又可以动态包含,与@include不同的是,jsp:include没有@include那样的优先权,即不是现

于其他语句执行的,所以jsp:include可以又选择性的包含。不过更重要的一点是,用jsp:include相当于编译两个不同的文

件,所以如果被包含文件中仅仅是显示某些东西(例如被包含文件是纯HTML)的话,这种情况下,用jsp:include和@include

来包含文件的效果是一样的,但如果要用jsp:include来显示被包含文件中定义的变量就不行了(为什么?见上面的引用吧,

就不赘述了)。

【感谢】
 gfzhx(小小)、xiao_yuer(小鱼儿)

【致版主】
 问题贴地址如下:
http://www.csdn.net/Expert/FAQ/FAQ_Index.asp?id=1380
http://www.csdn.net/expert/topic/707/707524.xml?temp=1.226443E-02
希望版主能够更正一下。

|
上机测试过吗?
#文件 three.jsp







上面的文件是在执行JSP代码之前包含进来的,但是我觉得应该是包含进来后的
#文件 three.jsp如下:









当然上面我指的是静态包含,如果是这样的话,不应该输出England,能否将包含文件后的Jsp文件还没有转换成Servlet之前的情况详细告知.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 如下申明有错吗?应该怎样纠正?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3